From c63a4eb50d77b97613de109ab373e3e15ac2c20a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Sandstr=C3=B6m?= Date: Tue, 7 Apr 2020 16:30:35 +0200 Subject: [PATCH] Implement dc-remove option. --- .../ecmcPlugin_FFTApp/src/ecmcFFT.cpp | 18 ++++++++++++++++++ .../ecmcPlugin_FFTApp/src/ecmcFFT.h | 1 + 2 files changed, 19 insertions(+) diff --git a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp index 94fc67b..3e661ee 100644 --- a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp +++ b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp @@ -284,6 +284,7 @@ void ecmcFFT::dataUpdatedCallback(uint8_t* data, updateStatus(CALC); // **** Breakout to sperate low prio work thread below + removeDCOffset(); calcFFT(); // FFT cacluation scaleFFT(); // Scale FFT calcFFTAmp(); // Calculate amplitude from complex @@ -397,6 +398,23 @@ void ecmcFFT::calcFFTAmp() { } } +void ecmcFFT::removeDCOffset() { + if(!cfgDcRemove_) { + return; + } + + // calc average of raw data + double sum = 0; + for(unsigned int i = 0; i < cfgNfft_; ++i ) { + sum += dataBuffer_[i]; + } + double avg = sum / ((double)cfgNfft_); + for(unsigned int i = 0; i < cfgNfft_; ++i ) { + dataBuffer_[i]-=avg; + } +} + + void ecmcFFT::printEcDataArray(uint8_t* data, size_t size, ecmcEcDataType dt, diff --git a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h index d509219..60dee86 100644 --- a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h +++ b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h @@ -56,6 +56,7 @@ class ecmcFFT { void calcFFT(); void scaleFFT(); void calcFFTAmp(); + void removeDCOffset(); void initAsyn(); void updateStatus(FFT_STATUS status); // Also updates asynparam static int dataTypeSupported(ecmcEcDataType dt);