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>
<param> <param>
<key>window_size</key> <key>window_size</key>
<value>3000,3000</value> <value>3000, 3000</value>
</param> </param>
<param> <param>
<key>category</key> <key>category</key>
@ -81,33 +81,6 @@
<value>FM Generic Demodulation</value> <value>FM Generic Demodulation</value>
</param> </param>
</block> </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> <block>
<key>variable</key> <key>variable</key>
<param> <param>
@ -122,7 +95,7 @@ SDR received samples</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1296, 12)</value> <value>(1704, 796)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -149,7 +122,7 @@ SDR received samples</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(2072, 12)</value> <value>(1704, 52)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -161,7 +134,7 @@ SDR received samples</value>
</param> </param>
<param> <param>
<key>value</key> <key>value</key>
<value>44100</value> <value>48000</value>
</param> </param>
</block> </block>
<block> <block>
@ -174,11 +147,11 @@ SDR received samples</value>
</param> </param>
<param> <param>
<key>_enabled</key> <key>_enabled</key>
<value>True</value> <value>0</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1088, 12)</value> <value>(1704, 348)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -205,7 +178,61 @@ SDR received samples</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <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>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -233,7 +260,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1512, 12)</value> <value>(1704, 956)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -268,7 +295,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(32, 788)</value> <value>(48, 716)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -296,34 +323,18 @@ TX sampling rate</value>
</param> </param>
</block> </block>
<block> <block>
<key>analog_sig_source_x</key> <key>variable</key>
<param>
<key>amp</key>
<value>1</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param> <param>
<key>comment</key> <key>comment</key>
<value></value> <value></value>
</param> </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param> <param>
<key>_enabled</key> <key>_enabled</key>
<value>0</value> <value>True</value>
</param>
<param>
<key>freq</key>
<value>-lo_offset</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(320, 12)</value> <value>(1704, 164)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -331,39 +342,15 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>id</key> <key>id</key>
<value>analog_sig_source_x_0</value> <value>xlate_filter_taps</value>
</param> </param>
<param> <param>
<key>maxoutbuf</key> <key>value</key>
<value>0</value> <value>firdes.low_pass(1, samp_rate_rx, 125000, 25000, firdes.WIN_HAMMING, 6.76)</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>
</param> </param>
</block> </block>
<block> <block>
<key>analog_wfm_rcv</key> <key>analog_quadrature_demod_cf</key>
<param>
<key>audio_decimation</key>
<value>audio_decimation</value>
</param>
<param> <param>
<key>alias</key> <key>alias</key>
<value></value> <value></value>
@ -378,19 +365,23 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_enabled</key> <key>_enabled</key>
<value>1</value> <value>True</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1176, 476)</value> <value>(1088, 564)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <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>
<param> <param>
<key>id</key> <key>id</key>
<value>analog_wfm_rcv_0</value> <value>analog_quadrature_demod_cf_0</value>
</param> </param>
<param> <param>
<key>maxoutbuf</key> <key>maxoutbuf</key>
@ -400,64 +391,9 @@ TX sampling rate</value>
<key>minoutbuf</key> <key>minoutbuf</key>
<value>0</value> <value>0</value>
</param> </param>
<param>
<key>quad_rate</key>
<value>quadrature_rate</value>
</param>
</block> </block>
<block> <block>
<key>blocks_multiply_const_vxx</key> <key>rational_resampler_xxx</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>
<param> <param>
<key>alias</key> <key>alias</key>
<value></value> <value></value>
@ -470,13 +406,21 @@ TX sampling rate</value>
<key>affinity</key> <key>affinity</key>
<value></value> <value></value>
</param> </param>
<param>
<key>decim</key>
<value>125</value>
</param>
<param> <param>
<key>_enabled</key> <key>_enabled</key>
<value>True</value>
</param>
<param>
<key>fbw</key>
<value>0</value> <value>0</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(568, 140)</value> <value>(1272, 268)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -484,11 +428,11 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>id</key> <key>id</key>
<value>blocks_multiply_xx_0</value> <value>blks2_rational_resampler_xxx_1</value>
</param> </param>
<param> <param>
<key>type</key> <key>interp</key>
<value>complex</value> <value>24</value>
</param> </param>
<param> <param>
<key>maxoutbuf</key> <key>maxoutbuf</key>
@ -499,12 +443,12 @@ TX sampling rate</value>
<value>0</value> <value>0</value>
</param> </param>
<param> <param>
<key>num_inputs</key> <key>taps</key>
<value>2</value> <value>[]</value>
</param> </param>
<param> <param>
<key>vlen</key> <key>type</key>
<value>1</value> <value>ccc</value>
</param> </param>
</block> </block>
<block> <block>
@ -535,7 +479,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(2056, 464)</value> <value>(1088, 664)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -570,7 +514,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1904, 192)</value> <value>(64, 984)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -613,7 +557,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1272, 192)</value> <value>(736, 984)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -660,7 +604,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>decim</key> <key>decim</key>
<value>decimation_rx</value> <value>int(samp_rate_rx/filter_rate)</value>
</param> </param>
<param> <param>
<key>_enabled</key> <key>_enabled</key>
@ -668,7 +612,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(808, 452)</value> <value>(680, 268)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -692,7 +636,7 @@ TX sampling rate</value>
</param> </param>
<param> <param>
<key>taps</key> <key>taps</key>
<value>taps</value> <value>xlate_filter_taps</value>
</param> </param>
<param> <param>
<key>type</key> <key>type</key>
@ -716,7 +660,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1736, 192)</value> <value>(1704, 608)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2047,7 +1991,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(16, 368)</value> <value>(16, 376)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2150,368 +2094,6 @@ we shift the LO a little further</value>
<value></value> <value></value>
</param> </param>
</block> </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> <block>
<key>parameter</key> <key>parameter</key>
<param> <param>
@ -2528,7 +2110,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1576, 192)</value> <value>(472, 984)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2571,7 +2153,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1432, 192)</value> <value>(616, 984)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2614,7 +2196,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(1080, 192)</value> <value>(312, 984)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2661,7 +2243,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(464, 460)</value> <value>(352, 276)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2708,7 +2290,7 @@ we shift the LO a little further</value>
</param> </param>
<param> <param>
<key>_coordinate</key> <key>_coordinate</key>
<value>(24, 196)</value> <value>(16, 204)</value>
</param> </param>
<param> <param>
<key>_rotation</key> <key>_rotation</key>
@ -2748,53 +2330,29 @@ we shift the LO a little further</value>
</param> </param>
</block> </block>
<connection> <connection>
<source_block_id>analog_sig_source_x_0</source_block_id> <source_block_id>analog_quadrature_demod_cf_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>
<sink_block_id>blocks_wavfile_sink_0</sink_block_id> <sink_block_id>blocks_wavfile_sink_0</sink_block_id>
<source_key>0</source_key> <source_key>0</source_key>
<sink_key>0</sink_key> <sink_key>0</sink_key>
</connection> </connection>
<connection> <connection>
<source_block_id>blocks_multiply_xx_0</source_block_id> <source_block_id>blks2_rational_resampler_xxx_1</source_block_id>
<sink_block_id>qtgui_freq_sink_x_0</sink_block_id> <sink_block_id>analog_quadrature_demod_cf_0</sink_block_id>
<source_key>0</source_key> <source_key>0</source_key>
<sink_key>0</sink_key> <sink_key>0</sink_key>
</connection> </connection>
<connection> <connection>
<source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id> <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> <source_key>0</source_key>
<sink_key>0</sink_key> <sink_key>0</sink_key>
</connection> </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> <connection>
<source_block_id>osmosdr_source_0</source_block_id> <source_block_id>osmosdr_source_0</source_block_id>
<sink_block_id>satnogs_coarse_doppler_correction_cc_0</sink_block_id> <sink_block_id>satnogs_coarse_doppler_correction_cc_0</sink_block_id>
<source_key>0</source_key> <source_key>0</source_key>
<sink_key>0</sink_key> <sink_key>0</sink_key>
</connection> </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> <connection>
<source_block_id>satnogs_coarse_doppler_correction_cc_0</source_block_id> <source_block_id>satnogs_coarse_doppler_correction_cc_0</source_block_id>
<sink_block_id>freq_xlating_fir_filter_xxx_0</sink_block_id> <sink_block_id>freq_xlating_fir_filter_xxx_0</sink_block_id>

View File

@ -5,7 +5,7 @@
# Title: FM Generic Demodulation # Title: FM Generic Demodulation
# Author: Manolis Surligas (surligas@gmail.com) # Author: Manolis Surligas (surligas@gmail.com)
# Description: A generic FM demodulation block # 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 from gnuradio import analog
@ -15,8 +15,8 @@ from gnuradio import filter
from gnuradio import gr from gnuradio import gr
from gnuradio.eng_option import eng_option from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes from gnuradio.filter import firdes
from gnuradio.filter import pfb
from optparse import OptionParser from optparse import OptionParser
import math
import osmosdr import osmosdr
import satnogs import satnogs
import time import time
@ -41,26 +41,20 @@ class satnogs_fm_demod(gr.top_block):
# Variables # Variables
################################################## ##################################################
self.samp_rate_rx = samp_rate_rx = satnogs.hw_rx_settings[rx_sdr_device]['samp_rate'] 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.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.filter_rate = filter_rate = 250000
self.audio_samp_rate = audio_samp_rate = 44100 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_gain = audio_gain = satnogs.fm_demod_settings[rx_sdr_device]['audio_gain']
self.audio_decimation = audio_decimation = 2
################################################## ##################################################
# Blocks # Blocks
################################################## ##################################################
self.satnogs_tcp_rigctl_msg_source_0 = satnogs.tcp_rigctl_msg_source("127.0.0.1", rigctl_port, False, 1000, 1500) 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.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 = 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_sample_rate(samp_rate_rx)
self.osmosdr_source_0.set_center_freq(rx_freq - lo_offset, 0) 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_antenna(satnogs.hw_rx_settings[rx_sdr_device]['antenna'], 0)
self.osmosdr_source_0.set_bandwidth(samp_rate_rx, 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_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.blks2_rational_resampler_xxx_1 = filter.rational_resampler_ccc(
self.analog_wfm_rcv_0 = analog.wfm_rcv( interpolation=24,
quad_rate=quadrature_rate, decimation=125,
audio_decimation=audio_decimation, taps=None,
fractional_bw=None,
) )
self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf((2*math.pi*deviation)/audio_samp_rate)
################################################## ##################################################
# Connections # Connections
################################################## ##################################################
self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_coarse_doppler_correction_cc_0, 'freq')) 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.analog_quadrature_demod_cf_0, 0), (self.blocks_wavfile_sink_0, 0))
self.connect((self.blocks_multiply_const_vxx_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.analog_wfm_rcv_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.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)) 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): 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): def set_rx_sdr_device(self, rx_sdr_device):
self.rx_sdr_device = 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_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_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_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_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.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): def get_samp_rate_rx(self):
return self.samp_rate_rx return self.samp_rate_rx
def set_samp_rate_rx(self, samp_rate_rx): def set_samp_rate_rx(self, samp_rate_rx):
self.samp_rate_rx = 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_sample_rate(self.samp_rate_rx)
self.osmosdr_source_0.set_bandwidth(self.samp_rate_rx, 0) self.osmosdr_source_0.set_bandwidth(self.samp_rate_rx, 0)
def get_decimation_rx(self): def get_xlate_filter_taps(self):
return self.decimation_rx return self.xlate_filter_taps
def set_decimation_rx(self, decimation_rx): def set_xlate_filter_taps(self, xlate_filter_taps):
self.decimation_rx = decimation_rx self.xlate_filter_taps = xlate_filter_taps
self.set_quadrature_rate(self.samp_rate_rx / self.decimation_rx) self.freq_xlating_fir_filter_xxx_0.set_taps((self.xlate_filter_taps))
def get_taps(self): def get_taps(self):
return self.taps return self.taps
def set_taps(self, taps): def set_taps(self, taps):
self.taps = taps self.taps = taps
self.freq_xlating_fir_filter_xxx_0.set_taps((self.taps))
def get_quadrature_rate(self): def get_filter_rate(self):
return self.quadrature_rate return self.filter_rate
def set_quadrature_rate(self, quadrature_rate): def set_filter_rate(self, filter_rate):
self.quadrature_rate = quadrature_rate self.filter_rate = filter_rate
self.pfb_arb_resampler_xxx_0.set_rate(self.audio_samp_rate / (self.quadrature_rate * 1.0 / self.audio_decimation))
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): def get_audio_samp_rate(self):
return self.audio_samp_rate return self.audio_samp_rate
def set_audio_samp_rate(self, audio_samp_rate): def set_audio_samp_rate(self, audio_samp_rate):
self.audio_samp_rate = 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): def get_audio_gain(self):
return self.audio_gain return self.audio_gain
def set_audio_gain(self, audio_gain): def set_audio_gain(self, audio_gain):
self.audio_gain = 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(): 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, 'bb_gain' : 20.0, 'samp_rate' : 2e6,
'antenna' : '', 'dev_arg': 'hackrf'}, 'antenna' : '', 'dev_arg': 'hackrf'},
'rtlsdr' : {'rf_gain' : 32.0, 'if_gain' : 0.0, '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'} } 'antenna' : '', 'dev_arg' : 'rtl'} }