Fix NOAA APT waterfall bandwidth

The flowgraph for decoding NOAA APT images generates a waterfall with a
bandwidth depending on the default samplerate of the SDR hardware.
USRPB200 defaults to 500 ksps, which produces an output of 125 ksps
after the "first_stage_decimation" which is fixed to a value of 4.
Changing the hardware to an "rtlsdr" also changes the default
samplerate to 1 Msps which results in a waterfall bandwidth of 250 kHz
(+- 125 kHz). Connecting the waterfall sink behind the FFT Filter,
which has a decimation set to match an output samplerate of 125 kHz,
seems to be correct! This produces waterfalls with a bandwidth of
125 kHz (+- 62,5 kHz).

Fixes issue #128
This commit is contained in:
Patrick Dohmen 2018-07-04 10:18:43 +02:00 committed by Manolis Surligas
parent 07eb575437
commit e831d81502
2 changed files with 53 additions and 56 deletions

View File

@ -94,7 +94,7 @@ the quadrature demodulation</value>
</param>
<param>
<key>_coordinate</key>
<value>(927, 459)</value>
<value>(904, 492)</value>
</param>
<param>
<key>_rotation</key>
@ -124,7 +124,7 @@ in acceptable levels especially for embedded devices.</value>
</param>
<param>
<key>_coordinate</key>
<value>(1306, 460)</value>
<value>(1272, 492)</value>
</param>
<param>
<key>_rotation</key>
@ -159,7 +159,7 @@ in acceptable levels especially for embedded devices.</value>
</param>
<param>
<key>_coordinate</key>
<value>(16, 689)</value>
<value>(168, 564)</value>
</param>
<param>
<key>_rotation</key>
@ -199,7 +199,7 @@ the quadrature demodulation</value>
</param>
<param>
<key>_coordinate</key>
<value>(1118, 459)</value>
<value>(1088, 492)</value>
</param>
<param>
<key>_rotation</key>
@ -234,7 +234,7 @@ the quadrature demodulation</value>
</param>
<param>
<key>_coordinate</key>
<value>(15, 551)</value>
<value>(8, 564)</value>
</param>
<param>
<key>_rotation</key>
@ -274,7 +274,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(791, 459)</value>
<value>(784, 492)</value>
</param>
<param>
<key>_rotation</key>
@ -313,7 +313,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(935, 123)</value>
<value>(696, 164)</value>
</param>
<param>
<key>_rotation</key>
@ -352,7 +352,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(494, 634)</value>
<value>(1200, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -411,7 +411,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1174, 83)</value>
<value>(912, 116)</value>
</param>
<param>
<key>_rotation</key>
@ -474,7 +474,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(414, 634)</value>
<value>(1120, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -521,7 +521,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1040, 360)</value>
<value>(880, 392)</value>
</param>
<param>
<key>_rotation</key>
@ -560,7 +560,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(183, 547)</value>
<value>(576, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -603,7 +603,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(183, 634)</value>
<value>(880, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -646,7 +646,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(15, 459)</value>
<value>(8, 476)</value>
</param>
<param>
<key>_rotation</key>
@ -689,7 +689,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(184, 796)</value>
<value>(464, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -740,7 +740,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(710, 171)</value>
<value>(496, 164)</value>
</param>
<param>
<key>_rotation</key>
@ -791,7 +791,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(183, 714)</value>
<value>(344, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -842,7 +842,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1422, 123)</value>
<value>(1096, 164)</value>
</param>
<param>
<key>_rotation</key>
@ -889,7 +889,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(312, 716)</value>
<value>(1360, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -944,7 +944,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(295, 295)</value>
<value>(248, 324)</value>
</param>
<param>
<key>_rotation</key>
@ -999,7 +999,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(1264, 356)</value>
<value>(1040, 388)</value>
</param>
<param>
<key>_rotation</key>
@ -1042,7 +1042,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(343, 634)</value>
<value>(1040, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -1085,7 +1085,7 @@ TX sampling rate</value>
</param>
<param>
<key>_coordinate</key>
<value>(296, 796)</value>
<value>(1448, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -1129,7 +1129,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(575, 459)</value>
<value>(568, 476)</value>
</param>
<param>
<key>_rotation</key>
@ -2460,7 +2460,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(31, 223)</value>
<value>(8, 244)</value>
</param>
<param>
<key>_rotation</key>
@ -2579,7 +2579,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(487, 459)</value>
<value>(480, 476)</value>
</param>
<param>
<key>_rotation</key>
@ -2634,7 +2634,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1438, 239)</value>
<value>(1184, 364)</value>
</param>
<param>
<key>_rotation</key>
@ -2693,7 +2693,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(824, 336)</value>
<value>(696, 364)</value>
</param>
<param>
<key>_rotation</key>
@ -2752,7 +2752,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1172, 0)</value>
<value>(912, 20)</value>
</param>
<param>
<key>_rotation</key>
@ -2811,7 +2811,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(936, 232)</value>
<value>(696, 268)</value>
</param>
<param>
<key>_rotation</key>
@ -2858,7 +2858,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(271, 634)</value>
<value>(960, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -2901,7 +2901,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(295, 459)</value>
<value>(288, 476)</value>
</param>
<param>
<key>_rotation</key>
@ -2944,7 +2944,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(391, 459)</value>
<value>(384, 476)</value>
</param>
<param>
<key>_rotation</key>
@ -2987,7 +2987,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(175, 459)</value>
<value>(168, 476)</value>
</param>
<param>
<key>_rotation</key>
@ -3034,7 +3034,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(464, 176)</value>
<value>(272, 168)</value>
</param>
<param>
<key>_rotation</key>
@ -3089,7 +3089,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1176, 236)</value>
<value>(880, 276)</value>
</param>
<param>
<key>_rotation</key>
@ -3132,7 +3132,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(520, 320)</value>
<value>(472, 356)</value>
</param>
<param>
<key>_rotation</key>
@ -3154,10 +3154,6 @@ we shift the LO a little further</value>
<key>width</key>
<value>2080</value>
</param>
<param>
<key>split</key>
<value>False</value>
</param>
<param>
<key>sync</key>
<value>bool(sync)</value>
@ -3187,7 +3183,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(1420, 3)</value>
<value>(1096, 28)</value>
</param>
<param>
<key>_rotation</key>
@ -3226,7 +3222,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(223, 47)</value>
<value>(8, 132)</value>
</param>
<param>
<key>_rotation</key>
@ -3297,7 +3293,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(712, 0)</value>
<value>(696, 20)</value>
</param>
<param>
<key>_rotation</key>
@ -3317,7 +3313,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>samp_rate</key>
<value>samp_rate_rx /first_stage_decimation</value>
<value>samp_rate_rx/ ( first_stage_decimation * int(samp_rate_rx/ first_stage_decimation / initial_bandwidth))</value>
</param>
</block>
<block>
@ -3336,7 +3332,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(400, 716)</value>
<value>(1280, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -3379,7 +3375,7 @@ we shift the LO a little further</value>
</param>
<param>
<key>_coordinate</key>
<value>(335, 546)</value>
<value>(736, 628)</value>
</param>
<param>
<key>_rotation</key>
@ -3442,6 +3438,12 @@ we shift the LO a little further</value>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>fft_filter_xxx_0</source_block_id>
<sink_block_id>satnogs_waterfall_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>fir_filter_xxx_1</source_block_id>
<sink_block_id>rational_resampler_xxx_0</sink_block_id>
@ -3496,12 +3498,6 @@ we shift the LO a little further</value>
<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>satnogs_waterfall_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>satnogs_tcp_rigctl_msg_source_0</source_block_id>
<sink_block_id>satnogs_coarse_doppler_correction_cc_0</sink_block_id>

View File

@ -5,9 +5,10 @@
# Title: NOAA APT Decoder
# Author: Manolis Surligas, George Vardakis
# Description: A NOAA APT Decoder with automatic image synchronization
# Generated: Sat Feb 24 00:15:33 2018
# Generated: Wed Jul 4 10:18:17 2018
##################################################
from gnuradio import analog
from gnuradio import blocks
from gnuradio import eng_notation
@ -65,7 +66,7 @@ class satnogs_noaa_apt_decoder(gr.top_block):
##################################################
# Blocks
##################################################
self.satnogs_waterfall_sink_0 = satnogs.waterfall_sink(samp_rate_rx /first_stage_decimation, 0.0, 8, 1024, waterfall_file_path, 0)
self.satnogs_waterfall_sink_0 = satnogs.waterfall_sink(samp_rate_rx/ ( first_stage_decimation * int(samp_rate_rx/ first_stage_decimation / initial_bandwidth)), 0.0, 8, 1024, waterfall_file_path, 0)
self.satnogs_tcp_rigctl_msg_source_0 = satnogs.tcp_rigctl_msg_source("127.0.0.1", rigctl_port, False, 1000/doppler_correction_per_sec, 1500)
self.satnogs_ogg_encoder_0 = satnogs.ogg_encoder(file_path, 48000, 0.8)
self.satnogs_noaa_apt_sink_0 = satnogs.noaa_apt_sink(decoded_data_file_path, 2080, 1800, bool(sync), bool(flip_images))
@ -132,6 +133,7 @@ class satnogs_noaa_apt_decoder(gr.top_block):
self.connect((self.blocks_complex_to_mag_0, 0), (self.rational_resampler_xxx_0_0, 0))
self.connect((self.fft_filter_xxx_0, 0), (self.analog_wfm_rcv_0, 0))
self.connect((self.fft_filter_xxx_0, 0), (self.rational_resampler_xxx_2, 0))
self.connect((self.fft_filter_xxx_0, 0), (self.satnogs_waterfall_sink_0, 0))
self.connect((self.fir_filter_xxx_1, 0), (self.rational_resampler_xxx_0, 0))
self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.satnogs_coarse_doppler_correction_cc_0, 0))
self.connect((self.hilbert_fc_0, 0), (self.blocks_complex_to_mag_0, 0))
@ -141,7 +143,6 @@ class satnogs_noaa_apt_decoder(gr.top_block):
self.connect((self.rational_resampler_xxx_1, 0), (self.satnogs_ogg_encoder_0, 0))
self.connect((self.rational_resampler_xxx_2, 0), (self.satnogs_iq_sink_0, 0))
self.connect((self.satnogs_coarse_doppler_correction_cc_0, 0), (self.fft_filter_xxx_0, 0))
self.connect((self.satnogs_coarse_doppler_correction_cc_0, 0), (self.satnogs_waterfall_sink_0, 0))
def get_antenna(self):
return self.antenna