AM demod looks simple on the surface, but under the hood it’s doing a couple of neat little tricks.
If the built-in AM demod block vanished overnight, you’d rebuild it from first principles like this:
🧠 1. Start With the RF Signal (Complex Baseband)
From your SDR you’ve got complex IQ samples centered on your AM carrier.
So conceptually:
s(t) = [1 + m(t)] * cos(2πf_ct)
After the SDR tunes and mixes to baseband, that carrier is sitting at 0 Hz.
🔧 2. Envelope Detection (The Core Trick)
Classic AM demod is just envelope detection.
In GNU Radio terms:
✔ Take the magnitude
Use:
- Complex to Mag block
This computes:
|I + jQ| = sqrt(I² + Q²)
That gives you the envelope.
At this point, you’ve essentially done what a diode detector does in an old radio.
🎚 3. Remove the DC Component
AM signals include a carrier offset (that “+1” in the equation).
So your magnitude output will have a big DC level.
You remove it using:
- DC Blocker or
- High-pass filter (very low cutoff, e.g. 20–50 Hz)
Now you’re left with just the modulation (audio).
🎛 4. Low-Pass Filter (Audio Bandwidth)
AM broadcast audio bandwidth is ~5 kHz (sometimes 10 kHz).
So you’d add:
- Low Pass Filter
- Cutoff: ~5 kHz (or whatever your signal uses)
- Transition width: reasonable
- Decimate if needed
This cleans up high-frequency junk from the magnitude operation.
🔊 5. Audio Gain + Resample
Then:
- Multiply Const (adjust volume)
- Rational Resampler if needed to get to 48 kHz or 44.1 kHz
- Send to Audio Sink
So the Full Replacement Chain Would Be:
SDR Source
↓
Frequency translating filter (if needed)
↓
Complex to Mag
↓
DC Blocker
↓
Low Pass Filter
↓
Gain
↓
Audio Sink
Boom. Homemade AM demod.
🔬 If You Want To Be Fancy (Synchronous Detection)
Envelope detection works, but it:
- distorts under fading
- struggles with weak signals
- doesn’t like overmodulation
A higher-quality approach:
Multiply by a local carrier (product detector)
- Multiply signal by cos(2πf_ct)
- Low-pass filter result
In baseband SDR world this becomes:
- Ensure carrier is centered
- Use Complex to Real (or multiply by 1∠0)
- Low-pass filter
Even better:
- Add a PLL to lock onto carrier (for DSB or SSB cases)
That’s basically what “AM Sync” receivers do.
🛰 For Your 1420 MHz Work
If you’re using AM in some diagnostic context (be honest… are you sneaking AM into an interferometer chain? 👀), envelope detection is fine.
But for serious signal integrity:
- Coherent detection is cleaner
- Especially if carrier suppression is present
TL;DR
To replace GNU Radio’s AM Demod block:
Magnitude → Remove DC → Low Pass → Gain
That’s it.