[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Discuss-Gnuradio] IF filter design for FM demodulation
From: |
Achilleas Anastasopoulos |
Subject: |
[Discuss-Gnuradio] IF filter design for FM demodulation |
Date: |
Thu, 06 Jan 2005 17:45:28 -0500 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) |
Dear all,
I am looking at the FM demodulator example
provided in the gnuradio examples (in the mc4020 directory)
and I have a question on the
the design parameters of the filter used to separate one
FM station before demodulating:
the sampling frequency is 20 Msps
the desired station is centered at 5.75 MHz
the designed filter (lowpass version)
has a cutoff frequency at 250 KHz
and a transition band of 800KHz
The signal is filtered and IQ demodulated and then
decimated by a factor of 125.
It seems that this filter is too wide:
an adjacent FM station (at 5.75 MHz + 200 KHz)
is not attenuated at all and its spectrum (after decimation)
is folded on the desired station spectrum.
This is clearly seen in the simple example I attach.
What am I missing here?
Thanks
Achilleas
===============================================
#!/usr/bin/env python
import sys
from gnuradio import gr
from gnuradio.wxgui import stdgui
from gnuradio.wxgui import fftsink
import wx
class filter_plus_fft (stdgui.gui_flow_graph):
def __init__(self, frame, panel, vbox, argv):
stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv)
IF_freq = 5.75e6
input_rate = 20.00e6
cfir_decimation = 125
cut_off = 250e3
trans_band_width = 800e3
src = gr.sig_source_f (input_rate,gr.GR_SIN_WAVE,IF_freq, 1e0)
interference = gr.sig_source_f
(input_rate,gr.GR_SIN_WAVE,IF_freq+200e3, 1e0)
adder = gr.add_ff()
# compute FIR filter taps for channel selection
channel_coeffs = \
gr.firdes.low_pass (1.0, # gain
input_rate, # sampling rate
cut_off, # low pass cutoff freq
trans_band_width, # width of
trans. band
gr.firdes.WIN_HAMMING)
# input: float; output: complex
chan_filter = \
gr.freq_xlating_fir_filter_fcf (cfir_decimation,
channel_coeffs,
IF_freq,
input_rate)
# fft window as final sink
block, fft_win = fftsink.make_fft_sink_c (self, panel,
"Filtered Signal", 1024, input_rate / cfir_decimation)
# now wire it all together
self.connect (src, (adder,0))
self.connect (interference, (adder,1))
self.connect (adder, chan_filter)
self.connect (chan_filter, block)
vbox.Add (fft_win, 1, wx.EXPAND)
def main ():
app = stdgui.stdapp (filter_plus_fft, "FM Demod Problem")
app.MainLoop ()
if __name__ == '__main__':
main ()
=====================================================
- [Discuss-Gnuradio] IF filter design for FM demodulation,
Achilleas Anastasopoulos <=