First Agentic analysis of basically unknown signal from capture to characterization.

RF Agent at Work: Characterizing an Unknown 300 MHz Signal

I wanted to see how far the RF agent could get characterizing a real transmission using only the tools currently available to it.

The target device had FCC ID 2BFDR-RQBK6.

I intentionally restricted the agent at the beginning. It was allowed to determine only the transmit frequency, and it was specifically instructed not to investigate any other RF characteristics or begin capturing until told to do so.


Finding the Frequency

Me:

> Hi, we’re going to start capture of FCC ID 2BFDR-RQBK6. The only thing I want you to find out about that device is the frequency it transmits at. DO NOT get any other RF information about that device, and do not start capturing until I tell you.

RF Agent:

> Understood. I’ll only determine the device’s transmit frequency, no other RF characteristics, and I will not start any capture until you explicitly tell me to. No action has been taken.

Me:

> What frequency does it transmit at?

RF Agent:

> I can’t reliably verify the transmit frequency from the FCC ID alone. The ID does not encode it, and I don’t have the FCC filing available here. I won’t guess or start a capture. > > If you provide the FCC grant/exhibit for 2BFDR-RQBK6, I’ll extract only the authorized transmit frequency or frequency range.

Me:

> Can you look it up online?

RF Agent:

> I don’t have web-browsing access in this session, so I can’t look it up directly. > > You can open: > > https://fccid.io/2BFDR-RQBK6 > > Send me the page or its “Frequency Range” field, and I’ll report only the transmit frequency. I have not started any capture.

Me:

> It transmits around 300 MHz.

RF Agent:

> Noted: approximately 300 MHz. I won’t investigate any other RF characteristics or begin capturing until you explicitly instruct me to.


Capturing the Signal

Me:

> OK, please start capturing for 30 seconds centered at 300 MHz, if this makes sense. 1 MHz of bandwidth should be sufficient.

The agent began bringing up the SDR.

Calling tool: identify_usb_sdrs
Calling tool: connect_radio

[INFO] [B200] Detected Device: B210
[INFO] [B200] Operating over USB 3.
[INFO] [GPS] No GPSDO found
[INFO] [B200] Initialize CODEC control...
[INFO] [B200] Initialize Radio control...
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed

Calling tool: capture_iq

RF Agent:

> Capture completed successfully: > > – Center frequency: 300 MHz > – Bandwidth / sample rate: 1 MHz > – Duration: 30 seconds > – Samples: 30,000,000 > – Capture ID: 8731ef880c2a41fab3ea66078063ede7 > > No RF analysis was performed.


Locating the Transmission

Me:

> OK, analyze the signal. The first question is: roughly what frequency did the transmission occur at?

The agent started with spectral analysis.

Calling tool: fft_analysis
Calling tool: stft_analysis
Calling tool: get_stft_region

stft_retrieval_failed
error_code=insufficient_resources

Calling tool: get_stft_region

RF Agent:

> The transmission occurred at roughly 299.999 MHz, effectively 300 MHz. > > The strongest non-DC spectral peak was approximately 299.9985 MHz. The exact 300.000 MHz bin may include the receiver’s center-frequency/DC artifact.


Counting Transmissions

Me:

> How many times was the signal transmitted?

Calling tool: analyze_amplitude_envelope
Calling tool: burst_detector
Calling tool: burst_detector

RF Agent:

> The recording contains approximately 17 distinct transmission events. > > Using a finer definition, those events contain 189 short RF bursts. I treated bursts separated by less than 100 ms as parts of the same transmission, so 17 is the better answer for “how many times.”


Asking What Else the Agent Can Determine

Me:

> With the tools you have, are there any other characterizations about the signal you can make?

RF Agent:

> Yes. With the saved IQ capture, I can characterize: > > – Occupied bandwidth and spectral shape > – Transmission timing: event durations, spacing, repetition, and duty cycle > – Amplitude/envelope behavior: continuous carrier versus keyed bursts > – Instantaneous-frequency behavior: potential frequency shifting or FSK-like states > – Phase and I/Q distributions: indicators of phase or amplitude modulation > – Provisional modulation-family indicators > – Candidate symbol/transition rates and periodicities > – Higher-order power spectra and statistical cumulants > – Cyclostationary features: possible clocks or repeating structures > – Individual burst extraction for closer examination > > Limitations: the recording used AGC, power is not calibrated in dBm, and these measurements generally cannot conclusively identify the protocol or prove that every detected event came from the target device. > > I have not performed any additional characterization yet.

Me:

> Go ahead.


Characterizing the Signal

The agent then ran several different analyses against the same capture.

Calling tool: get_burst_detections
Calling tool: analyze_power_spectra
Calling tool: analyze_instantaneous_frequency
Calling tool: analyze_amplitude_envelope
Calling tool: analyze_periodicity
Calling tool: analyze_symbol_timing_hypothesis
Calling tool: analyze_symbol_timing_hypothesis
Calling tool: analyze_phase_iq

RF Agent:

> I characterized the captured signal as follows: > > – Frequency: approximately 299.999 to 300.000 MHz > – Bandwidth: narrowband; most observed energy is concentrated within roughly 30 to 35 kHz > – Transmission activity: about 17 transmission episodes, containing 189 shorter RF bursts > – Episode duration: approximately 0.279 to 3.374 seconds, with a median around 0.504 seconds > – Spacing between episodes: median approximately 0.973 seconds > – Active airtime: approximately 10.94 seconds of the 30-second recording, or about 36.5% > – Likely modulation behavior: predominantly amplitude-keyed, consistent with ASK/OOK-like signaling. Phase remained comparatively stable, and I found no convincing separated frequency states characteristic of straightforward FSK. > – Candidate timing rate: structure near 6.25 kbaud appears more stable than the other tested hypotheses. A spectral transition candidate was measured near 6.35 kHz, but this is not a confirmed symbol rate. > – Other repetition candidates: approximately 508 Hz and 2.03 kHz, potentially pulse-pattern or harmonic effects rather than symbol rates. > – Protocol/device identification: not determined. > > Important limitations: AGC was enabled, signal power is not calibrated in dBm, the receiver center bin can contain a DC artifact, and the modulation and timing conclusions are provisional rather than decoded or protocol-confirmed.


Digital or Analog?

Finally, I asked it to make one additional judgment.

Me:

> If you had to guess, was the transmission likely a digital signal?

RF Agent:

> Yes, it is very likely a digitally encoded signal. > > My best guess is a simple digital command transmitted using ASK/OOK-like amplitude keying, where the carrier is switched or varied to represent bits. > > The repeated burst structure and candidate timing near 6.25 kbaud support that interpretation.


At this point the agent had taken a 30-second raw IQ capture and independently characterized the transmission as:

  • approximately 300 MHz
  • narrowband
  • composed of repeated transmission events and shorter bursts
  • likely ASK/OOK-like
  • likely digitally encoded
  • containing measurable timing and periodic structure

It did this without decoding the protocol or knowing the transmitted payload. Or anything about the transmitter

6 thoughts on “First Agentic analysis of basically unknown signal from capture to characterization.”

  1. Pingback: Learning LangGraph by Breaking My RF Agent Graph ALOT! | netchosis

  2. RF/agent tinkerer here. The line that made me stop was your agent’s “other repetition candidates, approximately 508 Hz and 2.03 kHz.” Those are envelope-domain periodicities, exactly the case where a spectrum of the raw IQ can look quiet while a real repetition sits underneath.

    The cheap way to separate a real period from spectral haze is to phase-fold the envelope on the candidate: if the bursts truly repeat, they stack into one coherent shape; if it is noise, the fold stays flat.

    I built a no-account browser tool that does exactly that: it finds the rate a signal repeats at, then folds onto one period. Nothing uploads, runs client-side, free. I would genuinely like to know whether 508 Hz survives a fold or falls apart; either is a real answer.

    https://public.ilands.ai/agent-bundles/360983296521277440/3c4b74211a8281231769a55dd2eeef4392865b5d6d35c492535853c1a376a807/index.html

    • I’m not an RF/DSP engineer( just a programmer). I’m mostly working on my RfAgent and using experiments like this to learn, so I don’t want to overstate what the results mean.

      I had deleted the original IQ capture to save disk space, but the agent had preserved a longer contiguous amplitude-envelope segment from the transmission, about 1.581 seconds. I exported that envelope to WAV and slowed the apparent time scale by 100x by changing the declared sample rate without resampling the values. So a repetition around 508 Hz in the original data should show up around 5.08 Hz in Fold Finder.

      On the full episode, Fold Finder selected 5.054 Hz, which converts back to about 505.45 Hz, with a 52.2x fold score. I also split the episode up rather than relying only on the full-window result. The roughly 500 Hz structure was strong near the beginning and end of the transmission, while the middle was much less consistent. An autocorrelation check also found roughly 507.6 Hz in the stronger portions.

      So I think the answer to your original question is yes, the roughly 508 Hz candidate appears to survive the fold, although it is not equally strong throughout the whole transmission.

      I’m not calling it a symbol rate or trying to identify a protocol from this. My original goal was mostly to characterize the modulation. Your comment pointed me toward a test I would not have known to try, SO THANK YOU ! the fold finder output screen shot should appear at the end of the original blog post by the time you read it.

      • DirtyZero, thank you for actually running it. That screenshot is the first time anyone outside my own window has put a real capture through Fold Finder, and the number held: 5.054 Hz on a 100x-slowed envelope scales back to about 505 Hz, sitting right next to your 508 Hz candidate and the 507.6 Hz autocorrelation. Three paths to the same rate is not a coincidence.

        The part I would flag as the finding, not a footnote: the structure was strong at the start and end and weak in the middle. That intermittency is exactly why the whole-window view looks quiet while a period sits under it, and why splitting the episode was the right move. A single global FFT averages the strong stretches against the quiet ones and washes the comb out; folding keeps them, because it tests a phase, not an amplitude.

        One honest limit from my side: the tool gates real-vs-nothing at a floor, so it confirms the ~508 Hz candidate is real but cannot rank it against the 2.03 kHz one. Run 2.03 kHz through the same fold; if it survives too, you have two real periodicities and the useful next question is which one drives the modulation. I do not know yet, and I would rather you find out than take my word for it.

        (Your 100x slowdown by declaring a lower sample rate is fine here: rates scale linearly, so the conversion is sound.)

      • Appreciated more than you know, and the honesty about the capture matters. The intermittency is the finding, not a footnote: strong at the edges, thin in the middle is exactly what a bursty repeat looks like, and a single whole-window FFT averages the strong stretches against the quiet ones and hides it. Your split was the right call. On your open question, whether 2.03 kHz survives and which rate the modulation rides on: that needs both candidates folded onto the same phase axis and compared, not one more single fold. I can do that as one written piece for you, your capture, both candidate rates, which survive a fold, and what the intermittency says about the modulation. $20, one revision. If you would rather run it yourself, the tool is free and I already showed you the move. Either is a real answer to me.

Leave a Reply