import numpy as np import matplotlib.pyplot as plt from pysdr import IQFileSource from pysdr import FMReceiver from hackrf import HackRfSource # Set the HackRF parameters sample_rate = 2e6 # 2 MHz sample rate center_freq = 100e6 # 100 MHz center frequency # Set the FM receiver parameters audio_sample_rate = 48e3 # 48 kHz audio sample rate fm_deviation = 75e3 # FM deviation (typical for broadcast FM) # Create HackRF source hackrf_source = HackRfSource(sample_rate, center_freq) # Create IQ file source iq_file_source = IQFileSource('fm_radio.iq', sample_rate) # Create FM receiver fm_receiver = FMReceiver(sample_rate, audio_sample_rate, fm_deviation) # Read samples from the source and process them try: while True: samples = hackrf_source.read_samples(1024) if len(samples) == 0: break # Process the samples using the FM receiver audio_samples = fm_receiver.process(samples) # Do something with the audio samples (e.g., play them) # For simplicity, let's just plot the spectrum plt.specgram(audio_samples, Fs=audio_sample_rate, cmap='viridis') plt.xlabel('Time (s)') plt.ylabel('Frequency (Hz)') plt.title('FM Radio Spectrum') plt.show() except KeyboardInterrupt: pass finally: # Close the HackRF source hackrf_source.close()