1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- #
- # SPDX-License-Identifier: GPL-3.0
- #
- # GNU Radio Python Flow Graph
- # Title: FM Radio Receiver
- import signal
- import sys
- import gnuradio.analog
- import gnuradio.audio
- import gnuradio.fft
- import gnuradio.filter
- import gnuradio.gr
- import osmosdr
- class fm_radio(gnuradio.gr.top_block):
- def __init__(self):
- gnuradio.gr.top_block.__init__(self, "FM Radio Receiver", catch_exceptions=True)
- samp_rate = 2560000
- channel_width_hertz = 250000
- audio_sample_rate_hertz = 48000
- rtlsdr_source = osmosdr.source()
- rtlsdr_source.set_sample_rate(samp_rate)
- 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(samp_rate / channel_width_hertz)),
- gnuradio.filter.firdes.low_pass(
- 2, samp_rate, 100000, 10000, gnuradio.fft.window.WIN_KAISER, 6.76
- ),
- )
- audio_sink = gnuradio.audio.sink(audio_sample_rate_hertz, "", True)
- wbfm_demodulator = gnuradio.analog.wfm_rcv(
- quad_rate=channel_width_hertz, audio_decimation=1
- )
- 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))
- def main(top_block_cls=fm_radio, options=None):
- tb = top_block_cls()
- def sig_handler(sig=None, frame=None):
- tb.stop()
- tb.wait()
- sys.exit(0)
- signal.signal(signal.SIGINT, sig_handler)
- signal.signal(signal.SIGTERM, sig_handler)
- tb.start()
- try:
- input("Press Enter to quit: ")
- except EOFError:
- pass
- tb.stop()
- tb.wait()
- if __name__ == "__main__":
- main()
|