From 305cd4bf5b610ed3ee0e9b460b2093f6bb4a6dca Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Thu, 4 Feb 2016 22:22:19 -0500 Subject: [PATCH] Temporary FIR fix for windows --- src/modules/modem/analog/ModemLSB.cpp | 21 +++++++++++++++++---- src/modules/modem/analog/ModemLSB.h | 6 +++++- src/modules/modem/analog/ModemUSB.cpp | 25 +++++++++++++++++++------ src/modules/modem/analog/ModemUSB.h | 8 ++++++-- 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/modules/modem/analog/ModemLSB.cpp b/src/modules/modem/analog/ModemLSB.cpp index ace4f70..69887c9 100644 --- a/src/modules/modem/analog/ModemLSB.cpp +++ b/src/modules/modem/analog/ModemLSB.cpp @@ -3,8 +3,12 @@ ModemLSB::ModemLSB() : ModemAnalog() { // half band filter used for side-band elimination // demodAM_LSB = ampmodem_create(0.25, 0.25, LIQUID_AMPMODEM_LSB, 1); +#ifdef WIN32 + ssbFilt = firfilt_crcf_create_kaiser(23, 0.25, 90.0, 0.01f); +#else ssbFilt = iirfilt_crcf_create_lowpass(6, 0.25); - ssbShift = nco_crcf_create(LIQUID_NCO); +#endif + ssbShift = nco_crcf_create(LIQUID_NCO); nco_crcf_set_frequency(ssbShift, (2.0 * M_PI) * 0.25); c2rFilt = firhilbf_create(5, 90.0); } @@ -18,8 +22,12 @@ std::string ModemLSB::getName() { } ModemLSB::~ModemLSB() { - iirfilt_crcf_destroy(ssbFilt); - nco_crcf_destroy(ssbShift); +#ifdef WIN32 + firfilt_crcf_destroy(ssbFilt); +#else + iirfilt_crcf_destroy(ssbFilt); +#endif + nco_crcf_destroy(ssbShift); firhilbf_destroy(c2rFilt); // ampmodem_destroy(demodAM_LSB); } @@ -52,7 +60,12 @@ void ModemLSB::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *a for (size_t i = 0; i < bufSize; i++) { // Reject upper band nco_crcf_step(ssbShift); nco_crcf_mix_up(ssbShift, input->data[i], &x); - iirfilt_crcf_execute(ssbFilt, x, &y); +#ifdef WIN32 + firfilt_crcf_push(ssbFilt, x); + firfilt_crcf_execute(ssbFilt, &y); +#else + iirfilt_crcf_execute(ssbFilt, x, &y); +#endif nco_crcf_mix_down(ssbShift, y, &x); // Liquid-DSP AMPModem SSB drifts with strong signals near baseband (like a carrier?) // ampmodem_demodulate(demodAM_LSB, y, &demodOutputData[i]); diff --git a/src/modules/modem/analog/ModemLSB.h b/src/modules/modem/analog/ModemLSB.h index 016c574..2a88899 100644 --- a/src/modules/modem/analog/ModemLSB.h +++ b/src/modules/modem/analog/ModemLSB.h @@ -16,7 +16,11 @@ public: void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: - iirfilt_crcf ssbFilt; +#ifdef WIN32 + firfilt_crcf ssbFilt; +#else + iirfilt_crcf ssbFilt; +#endif firhilbf c2rFilt; nco_crcf ssbShift; // firfilt_crcf ssbFilt; diff --git a/src/modules/modem/analog/ModemUSB.cpp b/src/modules/modem/analog/ModemUSB.cpp index 5fe4759..5451e48 100644 --- a/src/modules/modem/analog/ModemUSB.cpp +++ b/src/modules/modem/analog/ModemUSB.cpp @@ -3,8 +3,12 @@ ModemUSB::ModemUSB() : ModemAnalog() { // half band filter used for side-band elimination // demodAM_USB = ampmodem_create(0.25, -0.25, LIQUID_AMPMODEM_USB, 1); - ssbFilt = iirfilt_crcf_create_lowpass(6, 0.25); - ssbShift = nco_crcf_create(LIQUID_NCO); +#ifdef WIN32 + ssbFilt = firfilt_crcf_create_kaiser(23, 0.25, 90.0, 0.01f); +#else + ssbFilt = iirfilt_crcf_create_lowpass(6, 0.25); +#endif + ssbShift = nco_crcf_create(LIQUID_NCO); nco_crcf_set_frequency(ssbShift, (2.0 * M_PI) * 0.25); c2rFilt = firhilbf_create(5, 90.0); } @@ -18,8 +22,12 @@ std::string ModemUSB::getName() { } ModemUSB::~ModemUSB() { - iirfilt_crcf_destroy(ssbFilt); - nco_crcf_destroy(ssbShift); +#ifdef WIN32 + firfilt_crcf_destroy(ssbFilt); +#else + iirfilt_crcf_destroy(ssbFilt); +#endif + nco_crcf_destroy(ssbShift); firhilbf_destroy(c2rFilt); // ampmodem_destroy(demodAM_USB); } @@ -52,8 +60,13 @@ void ModemUSB::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *a for (size_t i = 0; i < bufSize; i++) { // Reject lower band nco_crcf_step(ssbShift); nco_crcf_mix_down(ssbShift, input->data[i], &x); - iirfilt_crcf_execute(ssbFilt, x, &y); - nco_crcf_mix_up(ssbShift, y, &x); +#ifdef WIN32 + firfilt_crcf_push(ssbFilt, x); + firfilt_crcf_execute(ssbFilt, &y); +#else + iirfilt_crcf_execute(ssbFilt, x, &y); +#endif + nco_crcf_mix_up(ssbShift, y, &x); // Liquid-DSP AMPModem SSB drifts with strong signals near baseband (like a carrier?) // ampmodem_demodulate(demodAM_USB, y, &demodOutputData[i]); firhilbf_c2r_execute(c2rFilt, x, &demodOutputData[i]); diff --git a/src/modules/modem/analog/ModemUSB.h b/src/modules/modem/analog/ModemUSB.h index 5e90286..9657fb3 100644 --- a/src/modules/modem/analog/ModemUSB.h +++ b/src/modules/modem/analog/ModemUSB.h @@ -16,8 +16,12 @@ public: void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: - iirfilt_crcf ssbFilt; - firhilbf c2rFilt; +#ifdef WIN32 + firfilt_crcf ssbFilt; +#else + iirfilt_crcf ssbFilt; +#endif + firhilbf c2rFilt; nco_crcf ssbShift; // ampmodem demodAM_USB; }; \ No newline at end of file