Jason has been working on a portable software defined transceiver design for the past year. Every day this week he’ll discuss a different part of the hardware in a series of guest posts. You can chat with the designer in the forum. Today’s post is about the roofing filter.
The term roofing filter is used to refer to the filter in a receiver that determines the bandwidth it is capable of receiving. Since this is a general purpose software defined transceiver, it is desirable to support a variety of bandwidths. Ideally, there would be separate roofing filters for each bandwidth that was to be supported. This would enable superior dynamic range for the narrower bandwidths than would be possible if only the widest supported bandwidth was used. However, this design is a compromise between performance and simplicity, so I have elected to create only a single roofing filter with a bandwidth that starts to roll off at 10KHz.
Lots more below.
In a superheterodyne receiver, the roofing filter takes the form of a bandpass filter — usually implemented with a ceramic or crystal filter at some standard frequency like 455KHz or 10.7MHz. In a DC receiver, things are a bit simpler. The roofing filter is implemented with a simple low-pass filter since the it has a zero-IF. But because this is a software defined receiver, special attention needs to be paid to the type of low pass filter.
Filters (low-pass or otherwise) affect not only the amplitude, but also the phase of the signals that go through them. Consider for a moment that you are decoding a signal encoded with FSK (frequency shift keying). There are two (or more) different frequencies present in the signal you wish to decode. If your filter delays all frequencies within the passband equally (leading to a linear phase response) then the mark and space frequencies within your FSK signal will be delayed the same amount and therefore there will be no overlapping of energy between them. On the other hand, of the filter delays different frequencies within the passband by different amounts, then there will be energy overlapping between the mark and space frequencies, and this will degrade your ability to decode a signal in the presence of noise. Typical filter types like the Butterworth or Chebychev designs do not have linear phase responses and are therefore best avoided in general purpose software defined radios. There is another type of filter, called the Bessel filter, which does have a linear phase response within the passband and that is what I have chosen to use for this design.
There is also an important interaction between this low pass filter and the sampling rate used to digitize the signal. The filter must prevent any signal energy from above the Nyquist frequency from reaching the analog to digital converters. Otherwise aliasing will result, which will again compromise the performance of the receiver. The end result of this is that if you use a low-order low-pass filter, you will need a sampling rate which is many times higher than your desired passband to avoid aliasing. For this design, I am willing to oversample the signal by a factor of two, so my lowpass filter needs to offer a great deal of attenuation above 20KHz in order to prevent aliasing. An 8th order lowpass Bessel filter meets the requirements I set out above, offering 40dB of attenuation at 20KHz, rapidly increasing above that frequency while maintaining a linear phase response within the passband.
Here is the schematic of the low pass filter. There are two identical filters in the design, one for the in-phase (real) channel, and the other for the quadrature (imaginary) channel. I have attached a PDF copy of the schematic for those who wish to examine it more closely.
Yes, I have built and tested the filter. It worked as advertised, but not as drawn! Earlier when you mentioned I was missing feedback, I checked my notes and didn’t know what you meant. However, I just looked at the schematic I drew in Altium Designer, and I see that when I drew the first 2nd order stage, I left out the connection between the inverting input and the output of the op amp! That mistake was duplicated on the remaining 7 stages in the schematic when I pasted it!
Anyway, thank you very much for catching that mistake and I’m sorry I didn’t think to check the posted schematic rather than my notes earlier. Since this mistake is particularly grievous, I have edited my earlier posting to correct the error.
Via the forum.