Mercurial > hg > vamp-tempogram
diff FIRFilter.cpp @ 8:4e429b9f2b4d
* Fixed memory leak bug. Issue with calculating size of spectrogram array.
* Fixed bug in Tempogram::reset() where specData wasn't reinitialised.
author | Carl Bussey <c.bussey@se10.qmul.ac.uk> |
---|---|
date | Thu, 07 Aug 2014 17:25:24 +0100 |
parents | 21147df9cb2d |
children | be59b4a73f49 |
line wrap: on
line diff
--- a/FIRFilter.cpp Thu Aug 07 16:21:21 2014 +0100 +++ b/FIRFilter.cpp Thu Aug 07 17:25:24 2014 +0100 @@ -12,8 +12,8 @@ using Vamp::FFT; FIRFilter::FIRFilter(const unsigned int lengthInput, const unsigned int numberOfCoefficients) : - _lengthInput(lengthInput), - _numberOfCoefficients(numberOfCoefficients), + m_lengthInput(lengthInput), + m_numberOfCoefficients(numberOfCoefficients), fftInput(NULL), fftCoefficients(NULL), fftReal1(NULL), @@ -36,20 +36,20 @@ void FIRFilter::initialise() { - _lengthFIRFFT = pow(2,(ceil(log2(_lengthInput+_numberOfCoefficients-1)))); + m_lengthFIRFFT = pow(2,(ceil(log2(m_lengthInput+m_numberOfCoefficients-1)))); - fftInput = new double[_lengthFIRFFT]; - fftCoefficients = new double[_lengthFIRFFT]; - fftReal1 = new double[_lengthFIRFFT]; - fftImag1 = new double[_lengthFIRFFT]; - fftReal2 = new double[_lengthFIRFFT]; - fftImag2 = new double[_lengthFIRFFT]; - fftFilteredReal = new double[_lengthFIRFFT]; - fftFilteredImag = new double[_lengthFIRFFT]; - fftOutputReal = new double[_lengthFIRFFT]; - fftOutputImag = new double[_lengthFIRFFT]; + fftInput = new double[m_lengthFIRFFT]; + fftCoefficients = new double[m_lengthFIRFFT]; + fftReal1 = new double[m_lengthFIRFFT]; + fftImag1 = new double[m_lengthFIRFFT]; + fftReal2 = new double[m_lengthFIRFFT]; + fftImag2 = new double[m_lengthFIRFFT]; + fftFilteredReal = new double[m_lengthFIRFFT]; + fftFilteredImag = new double[m_lengthFIRFFT]; + fftOutputReal = new double[m_lengthFIRFFT]; + fftOutputImag = new double[m_lengthFIRFFT]; - for(int i = 0; i < _lengthFIRFFT; i++){ + for(int i = 0; i < m_lengthFIRFFT; i++){ fftInput[i] = fftCoefficients[i] = fftReal1[i] = fftImag1[i] = fftReal2[i] = fftImag2[i] = fftFilteredReal[i] = fftFilteredImag[i] = fftOutputReal[i] = fftOutputImag[i] = 0.0; } } @@ -57,21 +57,21 @@ void FIRFilter::process(const float* input, const float* coefficients, float* output) { - for(int i = 0; i < _lengthFIRFFT; i++){ - fftInput[i] = i < _lengthInput ? input[i] : 0.0; - fftCoefficients[i] = i < _numberOfCoefficients ? coefficients[i] : 0.0; + for(int i = 0; i < m_lengthFIRFFT; i++){ + fftInput[i] = i < m_lengthInput ? input[i] : 0.0; + fftCoefficients[i] = i < m_numberOfCoefficients ? coefficients[i] : 0.0; } - FFT::forward(_lengthFIRFFT, fftInput, NULL, fftReal1, fftImag1); - FFT::forward(_lengthFIRFFT, fftCoefficients, NULL, fftReal2, fftImag2); + FFT::forward(m_lengthFIRFFT, fftInput, NULL, fftReal1, fftImag1); + FFT::forward(m_lengthFIRFFT, fftCoefficients, NULL, fftReal2, fftImag2); - for (int i = 0; i < _lengthFIRFFT; i++){ + for (int i = 0; i < m_lengthFIRFFT; i++){ fftFilteredReal[i] = (fftReal1[i] * fftReal2[i]) - (fftImag1[i] * fftImag2[i]); fftFilteredImag[i] = (fftReal1[i] * fftImag2[i]) + (fftReal2[i] * fftImag1[i]); } - FFT::inverse(_lengthFIRFFT, fftFilteredReal, fftFilteredImag, fftOutputReal, fftOutputImag); + FFT::inverse(m_lengthFIRFFT, fftFilteredReal, fftFilteredImag, fftOutputReal, fftOutputImag); - for (int i = 0; i < _lengthInput; i++){ + for (int i = 0; i < m_lengthInput; i++){ output[i] = fftOutputReal[i]; } }