|
@@ -7,7 +7,6 @@
|
|
|
|
|
|
import gnuradio.analog
|
|
|
import gnuradio.audio
|
|
|
-import gnuradio.fft
|
|
|
import gnuradio.filter
|
|
|
import gnuradio.gr
|
|
|
import osmosdr
|
|
@@ -17,33 +16,30 @@ class fm_radio(gnuradio.gr.top_block):
|
|
|
def __init__(self):
|
|
|
gnuradio.gr.top_block.__init__(self, "FM Radio Receiver", catch_exceptions=True)
|
|
|
|
|
|
- channel_width_hertz = 250000
|
|
|
audio_sample_rate_hertz = 48000
|
|
|
+ channel_width_hertz = (
|
|
|
+ 250000 // audio_sample_rate_hertz
|
|
|
+ ) * audio_sample_rate_hertz
|
|
|
|
|
|
rtlsdr_source = osmosdr.source()
|
|
|
rtlsdr_source.set_sample_rate(2560000) # Hz
|
|
|
rtlsdr_source.set_center_freq((98.3 * 1e6), 0)
|
|
|
- resampler = gnuradio.filter.rational_resampler_fff(
|
|
|
- interpolation=audio_sample_rate_hertz, decimation=channel_width_hertz
|
|
|
- )
|
|
|
- low_pass_filter = gnuradio.filter.fir_filter_ccf(
|
|
|
- int(rtlsdr_source.get_sample_rate() / channel_width_hertz),
|
|
|
- gnuradio.filter.firdes.low_pass(
|
|
|
- gain=2,
|
|
|
- sampling_freq=rtlsdr_source.get_sample_rate(),
|
|
|
- cutoff_freq=100000,
|
|
|
- transition_width=10000,
|
|
|
- ),
|
|
|
+
|
|
|
+ resampler = gnuradio.filter.rational_resampler_ccf(
|
|
|
+ interpolation=channel_width_hertz,
|
|
|
+ decimation=int(rtlsdr_source.get_sample_rate()),
|
|
|
)
|
|
|
- audio_sink = gnuradio.audio.sink(audio_sample_rate_hertz)
|
|
|
+ self.connect((rtlsdr_source, 0), (resampler, 0))
|
|
|
+
|
|
|
+ assert channel_width_hertz % audio_sample_rate_hertz == 0
|
|
|
wbfm_demodulator = gnuradio.analog.wfm_rcv(
|
|
|
- quad_rate=channel_width_hertz, audio_decimation=1
|
|
|
+ quad_rate=channel_width_hertz,
|
|
|
+ audio_decimation=channel_width_hertz // audio_sample_rate_hertz,
|
|
|
)
|
|
|
+ self.connect((resampler, 0), (wbfm_demodulator, 0))
|
|
|
|
|
|
- self.connect((wbfm_demodulator, 0), (resampler, 0))
|
|
|
- self.connect((low_pass_filter, 0), (wbfm_demodulator, 0))
|
|
|
- self.connect((resampler, 0), (audio_sink, 0))
|
|
|
- self.connect((rtlsdr_source, 0), (low_pass_filter, 0))
|
|
|
+ audio_sink = gnuradio.audio.sink(audio_sample_rate_hertz, "", False)
|
|
|
+ self.connect((wbfm_demodulator, 0), (audio_sink, 0))
|
|
|
|
|
|
|
|
|
def _main():
|