RTL-SDR for AM on GNU Radio


In the previous post we looked at using the RTL-SDR on Raspberry Pi4 with GNU Radio and Gqrx. We examined three applications: displaying the FM band spectrum, wide-band FM reception and narrow-band Marine weather reception. In this post we look at the RTL-SDR for AM reception on GNU Radio. The latest version of GNU Radio >=3.8xx is used (Ref.1).


Fig.1 RTL-SDR & 125MHz Upconverter & USB Hub

In order to receive MW/SW (0-30MHz) on the RTL-SDR, I use a 125MHz up-converter. I described this procedure in an earlier post (Ref.2). When receiving signals using SDR# for example, you tune to the receive frequency + 125MHz or set the shift frequency to -125MHz. In a similar fashion, using GNURadio, you must tune the RTL to the shifted frequency.

Zero IF Reception of AM

Fig.2 Zero IF Hartley IQ Receiver (Ref.3)

Figure 2 shows the block diagram of a Zero IF receiver. Essentially, a carrier signal is direct converted to base-band by multiplication with a local oscillator on the same frequency. The local oscillator matches the carrier frequency closely, but differs in phase. In I & Q reception, there are two receive branches, one with an LO = cos(wct+phi) and another with an LO = sin(wct+phi). This IQ construction can be used to receive AM or SSB(USB/LSB).

Consider the modulation process:
Info Signal = A(t) = [1 + m*cos(wmt)], m=mod index, wm=mod freq
Carrier Signal = A(t)*cos(wct), wc=carrier frequency

Consider the receiver I branch direct conversion:
Irx = A(t)*cos(wct)*cos(wct+phi), phi=phase difference carrier & LO
cosA*cosB = [cos(A+B)+cos(A-B)]/2, remove sum component with LPF
Irx = A(t)*cos(phi)

Consider the receiver Q branch direct conversion:
Qrx = A(t)*cos(wct)*sin(wct+phi)
cosA*sinA = [sin(A+B)+sin(A-B)]/2, remove sum component with LPF
Qrx = A(t)*sin(phi)

So to recover A(t), the receiver is basically a complex to magnitude block:
sqrt[Irx^2 + Qrx^2] = sqrt[A(t)^2*[cos^2(phi)+sin^2(phi)]] = A(t)

RTL-SDR for AM on GNU Radio

Fig.3 AM Receiver on GNU Radio Companion
Fig.4 Spectrum AM 680KHz & AM Band 440 – 920KHz

Figure 3 shows the AM receiver schematic on GNU Radio Companion. IQ information from the RTL-SDR Source block is first Low Pass Filtered to remove all components outside of the information base-band. The AM demodulator is simply a complex to magnitude block as discussed in the previous section. Figure 4 shows the frequency response of the RTL-SDR block output and the LPF output.

Fig.5 YouTube Video RTL-SDR for AM on GNU Radio

GNURadio Companion Basics Course:

Please send your comments, questions and suggestions to:

YouTube Channel
YouTube Channel


#1. – “GNU Radio Installation”

#2. – “RTL-SDR for HF 0-30MHz”

#3. – “HF Radio Telecommunications Learn by Simulation”

By Jeremy Clark

Jeremy Clark is a Senior Telecommunications Engineer and Advanced Amateur Radio Operator VE3PKC. He is the author of E-Books on Telecommunications, Navigation & Electronics.