diff FIRFilter.cpp @ 9:be59b4a73f49

* Added Spectrogram zero padding functionality * Made output bins correspond to BPM * User can now specify a range of output bins to view * Comments added
author Carl Bussey <c.bussey@se10.qmul.ac.uk>
date Tue, 12 Aug 2014 14:40:37 +0100
parents 4e429b9f2b4d
children 17a260410116
line wrap: on
line diff
--- a/FIRFilter.cpp	Thu Aug 07 17:25:24 2014 +0100
+++ b/FIRFilter.cpp	Tue Aug 12 14:40:37 2014 +0100
@@ -33,9 +33,11 @@
     cleanup();
 }
 
+//allocate memory
 void
 FIRFilter::initialise()
 {
+    //next power of 2
     m_lengthFIRFFT = pow(2,(ceil(log2(m_lengthInput+m_numberOfCoefficients-1))));
     
     fftInput = new double[m_lengthFIRFFT];
@@ -57,6 +59,7 @@
 void
 FIRFilter::process(const float* input, const float* coefficients, float* output)
 {
+    //Copy to same length FFT buffers
     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;
@@ -65,17 +68,20 @@
     FFT::forward(m_lengthFIRFFT, fftInput, NULL, fftReal1, fftImag1);
     FFT::forward(m_lengthFIRFFT, fftCoefficients, NULL, fftReal2, fftImag2);
     
+    //Multiply FFT coefficients. Multiplication in freq domain is convolution in time domain.
     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(m_lengthFIRFFT, fftFilteredReal, fftFilteredImag, fftOutputReal, fftOutputImag);
     
+    //copy to output
     for (int i = 0; i < m_lengthInput; i++){
         output[i] = fftOutputReal[i];
     }
 }
 
+//remove memory allocations
 void
 FIRFilter::cleanup()
 {