Improve_RF_sensitivity_NOAA_signal (#2654)

This commit is contained in:
Brumi-2021 2025-05-18 12:49:24 +02:00 committed by GitHub
parent db187301ab
commit 322b06d670
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 90 additions and 44 deletions

View file

@ -143,7 +143,7 @@ class WFMAMAptOptionsView : public View {
}; };
OptionsField options_config{ OptionsField options_config{
{3 * 8, 0 * 16}, {3 * 8, 0 * 16},
15, // Max option char length "FM+AM(NOAA Apt)" 16, // Max option char length "80khz (NOAA Apt)" example.
{ {
// Using common messages from freqman_ui.cpp // Using common messages from freqman_ui.cpp
}}; }};

View file

@ -108,7 +108,8 @@ options_t freqman_bandwidths[6] = {
}, },
{ {
// WFMAM for NOAA satellites, 137 Mhz band // WFMAM for NOAA satellites, 137 Mhz band
{"FM+AM(NOAA Apt)", 1}, // Fixed RX demod- WFM config Index 1 : FM+AM for Audio NOAA APT ones. {"80kHz (NOAA Apt)", 0}, // Fixed RX demod- WFM config Index 1 : FM+AM for Audio NOAA APT ones.
{"38kHz (NOAA Apt)", 1},
}, },
}; };

View file

@ -69,8 +69,9 @@ static constexpr std::array<baseband::WFMConfig, 3> wfm_configs{{
{taps_40k_wfm_decim_0, taps_40k_wfm_decim_1}, {taps_40k_wfm_decim_0, taps_40k_wfm_decim_1},
}}; }};
static constexpr std::array<baseband::WFMAMConfig, 1> wfmam_configs{{ static constexpr std::array<baseband::WFMAMConfig, 2> wfmam_configs{{
{taps_16k0_decim_0, taps_84k_wfmam_decim_1}, {taps_16k0_decim_0, taps_80k_wfmam_decim_1},
{taps_16k0_decim_0, taps_38k_wfmam_decim_1},
}}; }};
} /* namespace */ } /* namespace */

View file

@ -146,16 +146,16 @@ void NoaaAptRx::configure(const NoaaAptRxConfigureMessage& message) {
// Temptatively , I splitted, in two WidebandFMAudio::configure_wfm / WidebandFMAudio::configure_wfmam and dynamically /2, /8 . (here /8) // Temptatively , I splitted, in two WidebandFMAudio::configure_wfm / WidebandFMAudio::configure_wfmam and dynamically /2, /8 . (here /8)
// decim_1.set<dsp::decimate::FIRC16xR16x16Decim2>().configure(message.decim_1_filter.taps); // for wfm // decim_1.set<dsp::decimate::FIRC16xR16x16Decim2>().configure(message.decim_1_filter.taps); // for wfm
// decim_1.set<dsp::decimate::FIRC16xR16x32Decim8>().configure(message.decim_1_filter.taps); // for wfmam // decim_1.set<dsp::decimate::FIRC16xR16x32Decim8>().configure(message.decim_1_filter.taps); // for wfmam
decim_1.configure(taps_84k_wfmam_decim_1.taps); // for wfmam decim_1.configure(taps_38k_wfmam_decim_1.taps); // for wfmam
size_t decim_1_output_fs = decim_1_input_fs / decim_1.decimation_factor; // wfmam, decim_1.decimation_factor() = /8 ,if applied after the line, decim_1.set<dsp::decimate::FIRC16xR16x16Decim2>().configure(message.decim_1_filter.taps); size_t decim_1_output_fs = decim_1_input_fs / decim_1.decimation_factor; // wfmam, decim_1.decimation_factor() = /8 ,if applied after the line, decim_1.set<dsp::decimate::FIRC16xR16x16Decim2>().configure(message.decim_1_filter.taps);
size_t demod_input_fs = decim_1_output_fs; size_t demod_input_fs = decim_1_output_fs;
// spectrum_interval_samples = decim_1_output_fs / spectrum_rate_hz; // spectrum_interval_samples = decim_1_output_fs / spectrum_rate_hz;
// spectrum_samples = 0; // spectrum_samples = 0;
channel_filter_low_f = taps_84k_wfmam_decim_1.low_frequency_normalized * decim_1_input_fs; channel_filter_low_f = taps_38k_wfmam_decim_1.low_frequency_normalized * decim_1_input_fs;
channel_filter_high_f = taps_84k_wfmam_decim_1.high_frequency_normalized * decim_1_input_fs; channel_filter_high_f = taps_38k_wfmam_decim_1.high_frequency_normalized * decim_1_input_fs;
channel_filter_transition = taps_84k_wfmam_decim_1.transition_normalized * decim_1_input_fs; channel_filter_transition = taps_38k_wfmam_decim_1.transition_normalized * decim_1_input_fs;
demod.configure(demod_input_fs, 17000); demod.configure(demod_input_fs, 17000);
audio_filter.configure(taps_64_lp_1875_2166.taps); audio_filter.configure(taps_64_lp_1875_2166.taps);
audio_output.configure(apt_audio_12k_notch_2k4_config, apt_audio_12k_lpf_2000hz_config); audio_output.configure(apt_audio_12k_notch_2k4_config, apt_audio_12k_lpf_2000hz_config);

View file

@ -1327,44 +1327,88 @@ constexpr fir_taps_real<16> taps_40k_wfm_decim_1 = {
// WFMAM decimation filters //////////////////////////////////////////////// // WFMAM decimation filters ////////////////////////////////////////////////
// Used for NOAA 137 Mhz APT sat demod. // Used for NOAA 137 Mhz APT sat demod.
// IFIR prototype filter: fs=768000, pass=42000, stop=95000, decim=8, fout=96000 // IFIR prototype filter: fs=768000, pass=40000, stop=95000, decim=8, fout=96000
constexpr fir_taps_real<32> taps_84k_wfmam_decim_1 = { constexpr fir_taps_real<32> taps_80k_wfmam_decim_1 = {
.low_frequency_normalized = -42000.0f / 768000.0f, .low_frequency_normalized = -40000.0f / 768000.0f,
.high_frequency_normalized = 42000.0f / 768000.0f, .high_frequency_normalized = 40000.0f / 768000.0f,
.transition_normalized = 53000.0f / 768000.0f, .transition_normalized = 53000.0f / 768000.0f,
.taps = {{ .taps = {{
13, 5,
-6, -37,
-47, -120,
-116, -248,
-207, -397,
-294, -519,
-332, -535,
-266, -354,
-39, 106,
386, 896,
1012, 2006,
1795, 3355,
2648, 4797,
3452, 6136,
4079, 7171,
4423, 7736,
4423, 7736,
4079, 7171,
3452, 6136,
2648, 4797,
1795, 3355,
1012, 2006,
386, 896,
-39, 106,
-266, -354,
-332, -535,
-294, -519,
-207, -397,
-116, -248,
-47, -120,
-6, -37,
13, 5,
}},
};
// WFMAM decimation filters ////////////////////////////////////////////////
// Used for NOAA 137 Mhz APT sat demod.
// IFIR prototype filter: fs=768000, pass=19000, stop=68000, decim=8, fout=96000
constexpr fir_taps_real<32> taps_38k_wfmam_decim_1 = {
.low_frequency_normalized = -19000.0f / 768000.0f,
.high_frequency_normalized = 19000.0f / 768000.0f,
.transition_normalized = 49000.0f / 768000.0f,
.taps = {{
49,
91,
175,
303,
483,
724,
1028,
1391,
1805,
2253,
2712,
3158,
3560,
3891,
4127,
4250,
4250,
4127,
3891,
3560,
3158,
2712,
2253,
1805,
1391,
1028,
724,
483,
303,
175,
91,
49,
}}, }},
}; };