summaryrefslogtreecommitdiff
path: root/numpy_fm_demod.py
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2018-03-26 19:20:00 +0200
committerYuval Adam <_@yuv.al>2018-03-26 19:20:00 +0200
commit73d1989f569ebfa5908ac1fce4bb1d0c67703b98 (patch)
tree8a6c552c7376b9bfcac167e504c4a1fb8cb5c085 /numpy_fm_demod.py
parent2c0e9b8a9a13d7c369cdd29611c4ac888e8b2772 (diff)
Initial numpy FM demod
Diffstat (limited to 'numpy_fm_demod.py')
-rw-r--r--numpy_fm_demod.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/numpy_fm_demod.py b/numpy_fm_demod.py
new file mode 100644
index 0000000..fb2c46b
--- /dev/null
+++ b/numpy_fm_demod.py
@@ -0,0 +1,33 @@
+import numpy as np
+import scipy.signal as signal
+
+from rtlsdr import RtlSdr
+
+
+class NumpyFmDemod():
+ '''
+ Numpy-based FM signal demodulation
+ Based on the great tutorial by Fraida Fund
+ https://witestlab.poly.edu/blog/capture-and-decode-fm-radio/
+ '''
+ def __init__(frequency, sample_rate=1140000, sample_count=8192000, dc_offset=250000):
+ self.freq = int(frequency)
+ self.sample_rate = sample_rate
+ self.sample_count = sample_count
+ self.dc_offset = dc_offset
+
+ def capture_samples(self):
+ sdr = RtlSdr()
+ sdr.sample_rate = self.sample_rate
+ sdr.center_freq = self.freq - self.dc_offset
+ sdr.gain = 'auto'
+
+ samples = sdr.read_samples(self.sample_count)
+ sdr.close()
+
+ self.raw_samples = np.array(samples).astype('complex64')
+
+
+if __name__ == '__main__':
+ nfd = NumpyFmDemod(frequency=96.3e6)
+ nfd.run()