Superheterodyne Oscillator Tracking


These pages describe a small C program I wrote some time ago to help design radio receiver "front ends". It may be of use to you, if so, please grab a copy of the source code.

The same thing is now available in javascript for your viewing pleasure. Feel free to steal a copy.

Classical superheterodyne receivers use "3 point tracking" whereby the signal and oscillator tuned circuit resonant frequencies are made to differ by a fixed amount (the intermediate frequency or IF) over the tuning range of the receiver. This is achieved by judicious choice of seven (or maybe more) component values, one of which, the padder capacitor, is the secret to "3 point tracking". In a private email Martin Willcocks provided a fascinating brief history of superheterodyne oscillator tracking.

This problem was solved many years ago, so there is nothing new or wonderful in what I have done.

The circuit, for which the program calculates component values, is shown below

The components are identified by the variable names used in the program.

Note that the oscillator frequency is above the signal frequency (as is the usual case??). If you want the oscillator frequency below the signal frequency, just swap the functions of the two tuned circuits.

Strictly speaking, the difference frequency (the IF) is "exact" at three points within the tuning range and slightly wrong elsewhere. The program places two of these points at the ends of the tuning range and the third in the "middle". This is not the best choice. A better choice would be to place two points within the tuning range (near the ends) and position the third carefully near the middle. By this means, the tracking error (error in the IF) could be minimised. Maybe one day when I feel like playing programming more than playing radio, I'll re-write the program. (Don't hold your breath waiting though ;-)

The program as it exists is "good enough" in that the tracking error isn't too bad. A sample run shows moderate errors for the MF (AM broadcast) band.

An improved program should roughly halve the error.

PS: If any component values come out negative, it is because you have tried to cover too wide a band.