From d448f6dfc4fbf7f2038009fff35de5edfcad23b1 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Sat, 12 Dec 2015 19:26:02 -0500 Subject: [PATCH] Fix mis-aligned average buffers on view shift --- src/process/SpectrumVisualProcessor.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/process/SpectrumVisualProcessor.cpp b/src/process/SpectrumVisualProcessor.cpp index d56bbe7..da54ed2 100644 --- a/src/process/SpectrumVisualProcessor.cpp +++ b/src/process/SpectrumVisualProcessor.cpp @@ -179,9 +179,27 @@ void SpectrumVisualProcessor::process() { if (centerFreq != iqData->frequency) { if ((centerFreq - iqData->frequency) != shiftFrequency || lastInputBandwidth != iqData->sampleRate) { if (abs(iqData->frequency - centerFreq) < (wxGetApp().getSampleRate() / 2)) { + long lastShiftFrequency = shiftFrequency; shiftFrequency = centerFreq - iqData->frequency; - nco_crcf_reset(freqShifter); nco_crcf_set_frequency(freqShifter, (2.0 * M_PI) * (((double) abs(shiftFrequency)) / ((double) iqData->sampleRate))); + + if (is_view.load()) { + long freqDiff = shiftFrequency - lastShiftFrequency; + + double binPerHz = double(bandwidth) / double(fftSizeInternal); + + int numShift = round(double(abs(freqDiff)) / binPerHz); + + if (numShift < fftSizeInternal/2) { + if (freqDiff > 0) { + memmove(&fft_result_ma[0], &fft_result_ma[numShift], (fftSizeInternal-numShift) * sizeof(double)); + memmove(&fft_result_maa[0], &fft_result_maa[numShift], (fftSizeInternal-numShift) * sizeof(double)); + } else { + memmove(&fft_result_ma[numShift], &fft_result_ma[0], (fftSizeInternal-numShift) * sizeof(double)); + memmove(&fft_result_maa[numShift], &fft_result_maa[0], (fftSizeInternal-numShift) * sizeof(double)); + } + } + } } }