Change fm_demod to quadrature demod (#51)

Taking out WBFM/NBFM for a straight quadrature demod method

Change from 44.1k output to 44k output to be more compatible
with gr-satellites

Also changing rtlsdr to a 2msps rate by default
This commit is contained in:
Corey Shields 2017-01-22 12:36:13 -05:00 committed by Manolis Surligas
parent 50098ee879
commit 7184f551a0
3 changed files with 148 additions and 599 deletions

View File

@ -10,7 +10,7 @@
</param>
<param>
<key>window_size</key>
<value>3000,3000</value>
<value>3000, 3000</value>
</param>
<param>
<key>category</key>
@ -81,33 +81,6 @@
<value>FM Generic Demodulation</value>
</param>
</block>
<block>
<key>variable</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(1864, 12)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>audio_decimation</value>
</param>
<param>
<key>value</key>
<value>2</value>
</param>
</block>
<block>
<key>variable</key>
<param>
@ -122,7 +95,7 @@ SDR received samples</value>
</param>
<param>
<key>_coordinate</key>
<value>(1296, 12)</value>
<value>(1704, 796)</value>
</param>
<param>
<key>_rotation</key>
@ -149,7 +122,7 @@ SDR received samples</value>
</param>
<param>
<key>_coordinate</key>
<value>(2072, 12)</value>
<value>(1704, 52)</value>
</param>
<param>
<key>_rotation</key>
@ -161,7 +134,7 @@ SDR received samples</value>
</param>
<param>
<key>value</key>
<value>44100</value>
<value>48000</value>
</param>
</block>
<block>
@ -174,11 +147,11 @@ SDR received samples</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(1088, 12)</value>
<value>(1704, 348)</value>
</param>
<param>
<key>_rotation</key>
@ -205,7 +178,61 @@ SDR received samples</value>
</param>
<param>
<key>_coordinate</key>
<value>(1680, 12)</value>
<value>(1480, 988)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>deviation</value>
</param>
<param>
<key>value</key>
<value>5000</value>
</param>
</block>
<block>
<key>variable</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(1704, 260)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>filter_rate</value>
</param>
<param>
<key>value</key>
<value>250000</value>
</param>
</block>
<block>
<key>variable</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(1704, 508)</value>
</param>
<param>
<key>_rotation</key>
@ -233,7 +260,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1512, 12)</value>
<value>(1704, 956)</value>
</param>
<param>
<key>_rotation</key>
@ -268,7 +295,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(32, 788)</value>
<value>(48, 716)</value>
</param>
<param>
<key>_rotation</key>
@ -296,34 +323,18 @@ TX sampling rate</value>
</param>
</block>
<block>
<key>analog_sig_source_x</key>
<param>
<key>amp</key>
<value>1</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<key>variable</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>freq</key>
<value>-lo_offset</value>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(320, 12)</value>
<value>(1704, 164)</value>
</param>
<param>
<key>_rotation</key>
@ -331,39 +342,15 @@ TX sampling rate</value>
</param>
<param>
<key>id</key>
<value>analog_sig_source_x_0</value>
<value>xlate_filter_taps</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>offset</key>
<value>0</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
<key>samp_rate</key>
<value>samp_rate_rx</value>
</param>
<param>
<key>waveform</key>
<value>analog.GR_COS_WAVE</value>
<key>value</key>
<value>firdes.low_pass(1, samp_rate_rx, 125000, 25000, firdes.WIN_HAMMING, 6.76)</value>
</param>
</block>
<block>
<key>analog_wfm_rcv</key>
<param>
<key>audio_decimation</key>
<value>audio_decimation</value>
</param>
<key>analog_quadrature_demod_cf</key>
<param>
<key>alias</key>
<value></value>
@ -378,19 +365,23 @@ TX sampling rate</value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(1176, 476)</value>
<value>(1088, 564)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
<value>180</value>
</param>
<param>
<key>gain</key>
<value>(2*math.pi*deviation)/audio_samp_rate</value>
</param>
<param>
<key>id</key>
<value>analog_wfm_rcv_0</value>
<value>analog_quadrature_demod_cf_0</value>
</param>
<param>
<key>maxoutbuf</key>
@ -400,64 +391,9 @@ TX sampling rate</value>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>quad_rate</key>
<value>quadrature_rate</value>
</param>
</block>
<block>
<key>blocks_multiply_const_vxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>const</key>
<value>audio_gain</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(1808, 484)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_multiply_xx</key>
<key>rational_resampler_xxx</key>
<param>
<key>alias</key>
<value></value>
@ -470,13 +406,21 @@ TX sampling rate</value>
<key>affinity</key>
<value></value>
</param>
<param>
<key>decim</key>
<value>125</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>fbw</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(568, 140)</value>
<value>(1272, 268)</value>
</param>
<param>
<key>_rotation</key>
@ -484,11 +428,11 @@ TX sampling rate</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_xx_0</value>
<value>blks2_rational_resampler_xxx_1</value>
</param>
<param>
<key>type</key>
<value>complex</value>
<key>interp</key>
<value>24</value>
</param>
<param>
<key>maxoutbuf</key>
@ -499,12 +443,12 @@ TX sampling rate</value>
<value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
<key>taps</key>
<value>[]</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
<key>type</key>
<value>ccc</value>
</param>
</block>
<block>
@ -535,7 +479,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(2056, 464)</value>
<value>(1088, 664)</value>
</param>
<param>
<key>_rotation</key>
@ -570,7 +514,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1904, 192)</value>
<value>(64, 984)</value>
</param>
<param>
<key>_rotation</key>
@ -613,7 +557,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1272, 192)</value>
<value>(736, 984)</value>
</param>
<param>
<key>_rotation</key>
@ -660,7 +604,7 @@ TX sampling rate</value>
</param>
<param>
<key>decim</key>
<value>decimation_rx</value>
<value>int(samp_rate_rx/filter_rate)</value>
</param>
<param>
<key>_enabled</key>
@ -668,7 +612,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(808, 452)</value>
<value>(680, 268)</value>
</param>
<param>
<key>_rotation</key>
@ -692,7 +636,7 @@ TX sampling rate</value>
</param>
<param>
<key>taps</key>
<value>taps</value>
<value>xlate_filter_taps</value>
</param>
<param>
<key>type</key>
@ -716,7 +660,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1736, 192)</value>
<value>(1704, 608)</value>
</param>
<param>
<key>_rotation</key>
@ -2047,7 +1991,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(16, 368)</value>
<value>(16, 376)</value>
</param>
<param>
<key>_rotation</key>
@ -2150,368 +2094,6 @@ we shift the LO a little further</value>
<value></value>
</param>
</block>
<block>
<key>pfb_arb_resampler_xxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(1456, 452)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>pfb_arb_resampler_xxx_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>nfilts</key>
<value>32</value>
</param>
<param>
<key>rrate</key>
<value>audio_samp_rate / (quadrature_rate * 1.0 / audio_decimation)</value>
</param>
<param>
<key>samp_delay</key>
<value>0</value>
</param>
<param>
<key>atten</key>
<value>100</value>
</param>
<param>
<key>taps</key>
<value>firdes.low_pass_2(32, 32, 0.8, 0.1, 100)</value>
</param>
<param>
<key>type</key>
<value>fff</value>
</param>
</block>
<block>
<key>qtgui_freq_sink_x</key>
<param>
<key>autoscale</key>
<value>False</value>
</param>
<param>
<key>average</key>
<value>1.0</value>
</param>
<param>
<key>axislabels</key>
<value>True</value>
</param>
<param>
<key>bw</key>
<value>samp_rate_rx</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>fc</key>
<value>0</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>ctrlpanel</key>
<value>True</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>fftsize</key>
<value>1024</value>
</param>
<param>
<key>_coordinate</key>
<value>(728, 120)</value>
</param>
<param>
<key>gui_hint</key>
<value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid</key>
<value>True</value>
</param>
<param>
<key>id</key>
<value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>legend</key>
<value>True</value>
</param>
<param>
<key>alpha1</key>
<value>1.0</value>
</param>
<param>
<key>color1</key>
<value>"blue"</value>
</param>
<param>
<key>label1</key>
<value></value>
</param>
<param>
<key>width1</key>
<value>1</value>
</param>
<param>
<key>alpha10</key>
<value>1.0</value>
</param>
<param>
<key>color10</key>
<value>"dark blue"</value>
</param>
<param>
<key>label10</key>
<value></value>
</param>
<param>
<key>width10</key>
<value>1</value>
</param>
<param>
<key>alpha2</key>
<value>1.0</value>
</param>
<param>
<key>color2</key>
<value>"red"</value>
</param>
<param>
<key>label2</key>
<value></value>
</param>
<param>
<key>width2</key>
<value>1</value>
</param>
<param>
<key>alpha3</key>
<value>1.0</value>
</param>
<param>
<key>color3</key>
<value>"green"</value>
</param>
<param>
<key>label3</key>
<value></value>
</param>
<param>
<key>width3</key>
<value>1</value>
</param>
<param>
<key>alpha4</key>
<value>1.0</value>
</param>
<param>
<key>color4</key>
<value>"black"</value>
</param>
<param>
<key>label4</key>
<value></value>
</param>
<param>
<key>width4</key>
<value>1</value>
</param>
<param>
<key>alpha5</key>
<value>1.0</value>
</param>
<param>
<key>color5</key>
<value>"cyan"</value>
</param>
<param>
<key>label5</key>
<value></value>
</param>
<param>
<key>width5</key>
<value>1</value>
</param>
<param>
<key>alpha6</key>
<value>1.0</value>
</param>
<param>
<key>color6</key>
<value>"magenta"</value>
</param>
<param>
<key>label6</key>
<value></value>
</param>
<param>
<key>width6</key>
<value>1</value>
</param>
<param>
<key>alpha7</key>
<value>1.0</value>
</param>
<param>
<key>color7</key>
<value>"yellow"</value>
</param>
<param>
<key>label7</key>
<value></value>
</param>
<param>
<key>width7</key>
<value>1</value>
</param>
<param>
<key>alpha8</key>
<value>1.0</value>
</param>
<param>
<key>color8</key>
<value>"dark red"</value>
</param>
<param>
<key>label8</key>
<value></value>
</param>
<param>
<key>width8</key>
<value>1</value>
</param>
<param>
<key>alpha9</key>
<value>1.0</value>
</param>
<param>
<key>color9</key>
<value>"dark green"</value>
</param>
<param>
<key>label9</key>
<value></value>
</param>
<param>
<key>width9</key>
<value>1</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>name</key>
<value>""</value>
</param>
<param>
<key>nconnections</key>
<value>1</value>
</param>
<param>
<key>showports</key>
<value>True</value>
</param>
<param>
<key>freqhalf</key>
<value>True</value>
</param>
<param>
<key>tr_chan</key>
<value>0</value>
</param>
<param>
<key>tr_level</key>
<value>0.0</value>
</param>
<param>
<key>tr_mode</key>
<value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
<key>tr_tag</key>
<value>""</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
<key>update_time</key>
<value>0.01</value>
</param>
<param>
<key>wintype</key>
<value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
<key>label</key>
<value>Relative Gain</value>
</param>
<param>
<key>ymax</key>
<value>10</value>
</param>
<param>
<key>ymin</key>
<value>-140</value>
</param>
<param>
<key>units</key>
<value>dB</value>
</param>
</block>
<block>
<key>parameter</key>
<param>
@ -2528,7 +2110,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1576, 192)</value>
<value>(472, 984)</value>
</param>
<param>
<key>_rotation</key>
@ -2571,7 +2153,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1432, 192)</value>
<value>(616, 984)</value>
</param>
<param>
<key>_rotation</key>
@ -2614,7 +2196,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1080, 192)</value>
<value>(312, 984)</value>
</param>
<param>
<key>_rotation</key>
@ -2661,7 +2243,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(464, 460)</value>
<value>(352, 276)</value>
</param>
<param>
<key>_rotation</key>
@ -2708,7 +2290,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(24, 196)</value>
<value>(16, 204)</value>
</param>
<param>
<key>_rotation</key>
@ -2748,53 +2330,29 @@ we shift the LO a little further</value>
</param>
</block>
<connection>
<source_block_id>analog_sig_source_x_0</source_block_id>
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>analog_wfm_rcv_0</source_block_id>
<sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
<source_block_id>analog_quadrature_demod_cf_0</source_block_id>
<sink_block_id>blocks_wavfile_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_xx_0</source_block_id>
<sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_block_id>blks2_rational_resampler_xxx_1</source_block_id>
<sink_block_id>analog_quadrature_demod_cf_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
<sink_block_id>analog_wfm_rcv_0</sink_block_id>
<sink_block_id>blks2_rational_resampler_xxx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>osmosdr_source_0</source_block_id>
<sink_block_id>blocks_multiply_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>osmosdr_source_0</source_block_id>
<sink_block_id>satnogs_coarse_doppler_correction_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>satnogs_coarse_doppler_correction_cc_0</source_block_id>
<sink_block_id>freq_xlating_fir_filter_xxx_0</sink_block_id>

View File

@ -5,7 +5,7 @@
# Title: FM Generic Demodulation
# Author: Manolis Surligas (surligas@gmail.com)
# Description: A generic FM demodulation block
# Generated: Mon Nov 7 19:50:22 2016
# Generated: Fri Jan 20 15:58:24 2017
##################################################
from gnuradio import analog
@ -15,8 +15,8 @@ from gnuradio import filter
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from gnuradio.filter import pfb
from optparse import OptionParser
import math
import osmosdr
import satnogs
import time
@ -41,26 +41,20 @@ class satnogs_fm_demod(gr.top_block):
# Variables
##################################################
self.samp_rate_rx = samp_rate_rx = satnogs.hw_rx_settings[rx_sdr_device]['samp_rate']
self.decimation_rx = decimation_rx = satnogs.fm_demod_settings[rx_sdr_device]['decimation_rx']
self.xlate_filter_taps = xlate_filter_taps = firdes.low_pass(1, samp_rate_rx, 125000, 25000, firdes.WIN_HAMMING, 6.76)
self.taps = taps = firdes.low_pass(12.0, samp_rate_rx, 100e3, 60000, firdes.WIN_HAMMING, 6.76)
self.quadrature_rate = quadrature_rate = samp_rate_rx / decimation_rx
self.audio_samp_rate = audio_samp_rate = 44100
self.filter_rate = filter_rate = 250000
self.deviation = deviation = 5000
self.audio_samp_rate = audio_samp_rate = 48000
self.audio_gain = audio_gain = satnogs.fm_demod_settings[rx_sdr_device]['audio_gain']
self.audio_decimation = audio_decimation = 2
##################################################
# Blocks
##################################################
self.satnogs_tcp_rigctl_msg_source_0 = satnogs.tcp_rigctl_msg_source("127.0.0.1", rigctl_port, False, 1000, 1500)
self.satnogs_coarse_doppler_correction_cc_0 = satnogs.coarse_doppler_correction_cc(rx_freq, samp_rate_rx)
self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_fff(
audio_samp_rate / (quadrature_rate * 1.0 / audio_decimation),
taps=(firdes.low_pass_2(32, 32, 0.8, 0.1, 100)),
flt_size=32)
self.pfb_arb_resampler_xxx_0.declare_sample_delay(0)
self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + satnogs.hw_rx_settings[rx_sdr_device]['dev_arg'] )
self.osmosdr_source_0.set_sample_rate(samp_rate_rx)
self.osmosdr_source_0.set_center_freq(rx_freq - lo_offset, 0)
@ -74,23 +68,24 @@ class satnogs_fm_demod(gr.top_block):
self.osmosdr_source_0.set_antenna(satnogs.hw_rx_settings[rx_sdr_device]['antenna'], 0)
self.osmosdr_source_0.set_bandwidth(samp_rate_rx, 0)
self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc(decimation_rx, (taps), lo_offset, samp_rate_rx)
self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc(int(samp_rate_rx/filter_rate), (xlate_filter_taps), lo_offset, samp_rate_rx)
self.blocks_wavfile_sink_0 = blocks.wavfile_sink(file_path, 1, audio_samp_rate, 16)
self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((audio_gain, ))
self.analog_wfm_rcv_0 = analog.wfm_rcv(
quad_rate=quadrature_rate,
audio_decimation=audio_decimation,
self.blks2_rational_resampler_xxx_1 = filter.rational_resampler_ccc(
interpolation=24,
decimation=125,
taps=None,
fractional_bw=None,
)
self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf((2*math.pi*deviation)/audio_samp_rate)
##################################################
# Connections
##################################################
self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_coarse_doppler_correction_cc_0, 'freq'))
self.connect((self.analog_wfm_rcv_0, 0), (self.pfb_arb_resampler_xxx_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_wavfile_sink_0, 0))
self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.analog_wfm_rcv_0, 0))
self.connect((self.analog_quadrature_demod_cf_0, 0), (self.blocks_wavfile_sink_0, 0))
self.connect((self.blks2_rational_resampler_xxx_1, 0), (self.analog_quadrature_demod_cf_0, 0))
self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.blks2_rational_resampler_xxx_1, 0))
self.connect((self.osmosdr_source_0, 0), (self.satnogs_coarse_doppler_correction_cc_0, 0))
self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_0, 0))
self.connect((self.satnogs_coarse_doppler_correction_cc_0, 0), (self.freq_xlating_fir_filter_xxx_0, 0))
def get_doppler_correction_per_sec(self):
@ -134,63 +129,59 @@ class satnogs_fm_demod(gr.top_block):
def set_rx_sdr_device(self, rx_sdr_device):
self.rx_sdr_device = rx_sdr_device
self.set_samp_rate_rx(satnogs.hw_rx_settings[self.rx_sdr_device]['samp_rate'])
self.set_decimation_rx(satnogs.fm_demod_settings[self.rx_sdr_device]['decimation_rx'])
self.set_audio_gain(satnogs.fm_demod_settings[self.rx_sdr_device]['audio_gain'])
self.osmosdr_source_0.set_gain(satnogs.hw_rx_settings[self.rx_sdr_device]['rf_gain'], 0)
self.osmosdr_source_0.set_if_gain(satnogs.hw_rx_settings[self.rx_sdr_device]['if_gain'], 0)
self.osmosdr_source_0.set_bb_gain(satnogs.hw_rx_settings[self.rx_sdr_device]['bb_gain'], 0)
self.osmosdr_source_0.set_antenna(satnogs.hw_rx_settings[self.rx_sdr_device]['antenna'], 0)
self.set_audio_gain(satnogs.fm_demod_settings[self.rx_sdr_device]['audio_gain'])
def get_samp_rate_rx(self):
return self.samp_rate_rx
def set_samp_rate_rx(self, samp_rate_rx):
self.samp_rate_rx = samp_rate_rx
self.set_quadrature_rate(self.samp_rate_rx / self.decimation_rx)
self.set_xlate_filter_taps(firdes.low_pass(1, self.samp_rate_rx, 125000, 25000, firdes.WIN_HAMMING, 6.76))
self.osmosdr_source_0.set_sample_rate(self.samp_rate_rx)
self.osmosdr_source_0.set_bandwidth(self.samp_rate_rx, 0)
def get_decimation_rx(self):
return self.decimation_rx
def get_xlate_filter_taps(self):
return self.xlate_filter_taps
def set_decimation_rx(self, decimation_rx):
self.decimation_rx = decimation_rx
self.set_quadrature_rate(self.samp_rate_rx / self.decimation_rx)
def set_xlate_filter_taps(self, xlate_filter_taps):
self.xlate_filter_taps = xlate_filter_taps
self.freq_xlating_fir_filter_xxx_0.set_taps((self.xlate_filter_taps))
def get_taps(self):
return self.taps
def set_taps(self, taps):
self.taps = taps
self.freq_xlating_fir_filter_xxx_0.set_taps((self.taps))
def get_quadrature_rate(self):
return self.quadrature_rate
def get_filter_rate(self):
return self.filter_rate
def set_quadrature_rate(self, quadrature_rate):
self.quadrature_rate = quadrature_rate
self.pfb_arb_resampler_xxx_0.set_rate(self.audio_samp_rate / (self.quadrature_rate * 1.0 / self.audio_decimation))
def set_filter_rate(self, filter_rate):
self.filter_rate = filter_rate
def get_deviation(self):
return self.deviation
def set_deviation(self, deviation):
self.deviation = deviation
self.analog_quadrature_demod_cf_0.set_gain((2*math.pi*self.deviation)/self.audio_samp_rate)
def get_audio_samp_rate(self):
return self.audio_samp_rate
def set_audio_samp_rate(self, audio_samp_rate):
self.audio_samp_rate = audio_samp_rate
self.pfb_arb_resampler_xxx_0.set_rate(self.audio_samp_rate / (self.quadrature_rate * 1.0 / self.audio_decimation))
self.analog_quadrature_demod_cf_0.set_gain((2*math.pi*self.deviation)/self.audio_samp_rate)
def get_audio_gain(self):
return self.audio_gain
def set_audio_gain(self, audio_gain):
self.audio_gain = audio_gain
self.blocks_multiply_const_vxx_0.set_k((self.audio_gain, ))
def get_audio_decimation(self):
return self.audio_decimation
def set_audio_decimation(self, audio_decimation):
self.audio_decimation = audio_decimation
self.pfb_arb_resampler_xxx_0.set_rate(self.audio_samp_rate / (self.quadrature_rate * 1.0 / self.audio_decimation))
def argument_parser():

View File

@ -46,5 +46,5 @@ hw_rx_settings = {'usrpb200' : {'rf_gain' : 20.0, 'if_gain' : 0.0,
'bb_gain' : 20.0, 'samp_rate' : 2e6,
'antenna' : '', 'dev_arg': 'hackrf'},
'rtlsdr' : {'rf_gain' : 32.0, 'if_gain' : 0.0,
'bb_gain' : 0.0, 'samp_rate' : 1.024e6,
'bb_gain' : 0.0, 'samp_rate' : 2e6,
'antenna' : '', 'dev_arg' : 'rtl'} }