- if (m_idFilterMethod == FILTER_METHOD_CONVOLUTION) {
- for (int i = 0; i < m_nSignalPoints; i++)
- output[i] = convolve (input, m_signalInc, i, m_nSignalPoints);
- } else if (m_idFilterMethod == FILTER_METHOD_FOURIER) {
- complex<double> fftSignal[m_nFilterPoints];
- complex<double> complexOutput[m_nFilterPoints];
- complex<double> filteredSignal[m_nFilterPoints];
- double inputSignal[m_nFilterPoints];
- for (int i = 0; i < m_nSignalPoints; i++)
- inputSignal[i] = input[i];
- for (int i = m_nSignalPoints; i < m_nFilterPoints; i++)
- inputSignal[i] = 0; // zeropad
- finiteFourierTransform (inputSignal, fftSignal, m_nFilterPoints, -1);
- dotProduct (m_vecFilter, fftSignal, filteredSignal, m_nFilterPoints);
- finiteFourierTransform (filteredSignal, complexOutput, m_nFilterPoints, 1);
- for (int i = 0; i < m_nSignalPoints; i++)
- output[i] = complexOutput[i].real();
- }
-#if HAVE_FFTW
- else if (m_idFilterMethod == FILTER_METHOD_FFTW) {
- for (int i = 0; i < m_nSignalPoints; i++)
- m_vecFftInput[i].re = input[i];
-
- fftw_complex out[m_nFilterPoints];
- fftw_one(m_planForward, m_vecFftInput, out);
- for (int i = 0; i < m_nFilterPoints; i++) {
- out[i].re = m_vecFilter[i] * out[i].re;
- out[i].im = m_vecFilter[i] * out[i].im;
- }
- fftw_complex outFiltered[m_nFilterPoints];
- fftw_one(m_planBackward, out, outFiltered);
- for (int i = 0; i < m_nSignalPoints; i++)
- output[i] = outFiltered[i].re;
- }
-#endif