From 3559e37a76ae652157eb6b6ed0e6bd91932fffa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=B5=D0=BB=D0=BE=D1=83=D1=81=D0=BE=D0=B2=20=D0=9E?= =?UTF-8?q?=D0=BB=D0=B5=D0=B3?= Date: Mon, 17 Aug 2020 16:07:06 +0300 Subject: [PATCH] Audio FIR filter for CW --- .../application/apps/analog_audio_app.hpp | 1 + firmware/application/receiver_model.cpp | 3 ++- firmware/common/dsp_fir_taps.hpp | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/firmware/application/apps/analog_audio_app.hpp b/firmware/application/apps/analog_audio_app.hpp index 80f3bbe6..728b6277 100644 --- a/firmware/application/apps/analog_audio_app.hpp +++ b/firmware/application/apps/analog_audio_app.hpp @@ -58,6 +58,7 @@ private: { "DSB ", 0 }, { "USB ", 0 }, { "LSB ", 0 }, + { "CW ", 0 }, } }; }; diff --git a/firmware/application/receiver_model.cpp b/firmware/application/receiver_model.cpp index 782ab94a..c3216654 100644 --- a/firmware/application/receiver_model.cpp +++ b/firmware/application/receiver_model.cpp @@ -38,10 +38,11 @@ using namespace portapack; namespace { -static constexpr std::array am_configs { { +static constexpr std::array am_configs { { { taps_6k0_dsb_channel, AMConfigureMessage::Modulation::DSB }, { taps_2k8_usb_channel, AMConfigureMessage::Modulation::SSB }, { taps_2k8_lsb_channel, AMConfigureMessage::Modulation::SSB }, + { taps_0k7_usb_channel, AMConfigureMessage::Modulation::SSB }, } }; static constexpr std::array nbfm_configs { { diff --git a/firmware/common/dsp_fir_taps.hpp b/firmware/common/dsp_fir_taps.hpp index 1329b832..e622c723 100644 --- a/firmware/common/dsp_fir_taps.hpp +++ b/firmware/common/dsp_fir_taps.hpp @@ -313,6 +313,31 @@ constexpr fir_taps_complex<64> taps_2k8_lsb_channel { } }, }; +// USB AM 700Hz filter: fs=12000, start=600, end=800, width=200, stop=40db, decim=1, fout=12000 + +constexpr fir_taps_complex<64> taps_0k7_usb_channel { + .pass_frequency_normalized = 3000.0f / 12000.0f, + .stop_frequency_normalized = 3300.0f / 12000.0f, + .taps = { { + { 531, 0 }, { 192, 73 }, { 181, 163 }, { 129, 254 }, + { 34, 328 }, { -97, 364 }, { -251, 345 }, { -403, 261 }, + { -524, 111 }, { -585, -92 }, { -564, -326 }, { -448, -554 }, + { -239, -737 }, { 43, -836 }, { 366, -822 }, { 681, -681 }, + { 936, -417 }, { 1085, -56 }, { 1090, 354 }, { 935, 757 }, + { 629, 1090 }, { 205, 1296 }, { -283, 1331 }, { -766, 1180 }, + { -1172, 851 }, { -1435, 384 }, { -1510, -158 }, { -1377, -702 }, + { -1049, -1165 }, { -568, -1480 }, { 0, -1596 }, { 574, -1496 }, + { 1072, -1191 }, { 1422, -724 }, { 1576, -165 }, { 1515, 406 }, + { 1251, 908 }, { 827, 1273 }, { 309, 1453 }, { -226, 1431 }, + { -703, 1218 }, { -1058, 856 }, { -1248, 405 }, { -1257, -65 }, + { -1100, -489 }, { -810, -810 }, { -441, -992 }, { -53, -1024 }, + { 297, -916 }, { 566, -699 }, { 725, -418 }, { 765, -121 }, + { 697, 148 }, { 546, 355 }, { 348, 479 }, { 138, 517 }, + { -50, 477 }, { -194, 381 }, { -280, 252 }, { -308, 118 }, + { -285, 0 }, { -228, -87 }, { -153, -138 }, { -241, -473 }, + } }, +}; + // WFM 200KF8E emission type ////////////////////////////////////////////// // IFIR image-reject filter: fs=3072000, pass=100000, stop=484000, decim=4, fout=768000