Mercurial > hg > vamp-tempogram
comparison FIRFilter.cpp @ 7:21147df9cb2d
* Error when deleting Spectrogram object in Tempogram::getRemainingFeatures().
* Moved Spectrogram computation into own class.
author | Carl Bussey <c.bussey@se10.qmul.ac.uk> |
---|---|
date | Thu, 07 Aug 2014 16:21:21 +0100 |
parents | 597f033fa7a2 |
children | 4e429b9f2b4d |
comparison
equal
deleted
inserted
replaced
6:14a143a2c4c9 | 7:21147df9cb2d |
---|---|
5 // Created by Carl Bussey on 25/06/2014. | 5 // Created by Carl Bussey on 25/06/2014. |
6 // Copyright (c) 2014 Carl Bussey. All rights reserved. | 6 // Copyright (c) 2014 Carl Bussey. All rights reserved. |
7 // | 7 // |
8 | 8 |
9 #include "FIRFilter.h" | 9 #include "FIRFilter.h" |
10 #include <cmath> | 10 |
11 #include <vamp-sdk/FFT.h> | |
12 #include <assert.h> | |
13 #include <iostream> | |
14 using namespace std; | 11 using namespace std; |
15 | |
16 using Vamp::FFT; | 12 using Vamp::FFT; |
17 | 13 |
18 FIRFilter::FIRFilter(const unsigned int lengthInput, const unsigned int numberOfCoefficients) : | 14 FIRFilter::FIRFilter(const unsigned int lengthInput, const unsigned int numberOfCoefficients) : |
19 _lengthInput(lengthInput), | 15 _lengthInput(lengthInput), |
20 _numberOfCoefficients(numberOfCoefficients), | 16 _numberOfCoefficients(numberOfCoefficients), |
59 } | 55 } |
60 | 56 |
61 void | 57 void |
62 FIRFilter::process(const float* input, const float* coefficients, float* output) | 58 FIRFilter::process(const float* input, const float* coefficients, float* output) |
63 { | 59 { |
64 float max = 0; | 60 for(int i = 0; i < _lengthFIRFFT; i++){ |
65 for(int i = 0; i < _lengthInput; i++){ | 61 fftInput[i] = i < _lengthInput ? input[i] : 0.0; |
66 fftInput[i] = input[i]; | 62 fftCoefficients[i] = i < _numberOfCoefficients ? coefficients[i] : 0.0; |
67 max = max > fftInput[i] ? max : fftInput[i]; | |
68 //cout << fftInput[i] << endl; | |
69 } | |
70 //cout << max << endl; | |
71 for(int i = 0; i < _numberOfCoefficients; i++){ | |
72 fftCoefficients[i] = coefficients[i]; | |
73 //cout << fftCoefficients[i] << endl; | |
74 } | 63 } |
75 | 64 |
76 FFT::forward(_lengthFIRFFT, fftInput, NULL, fftReal1, fftImag1); | 65 FFT::forward(_lengthFIRFFT, fftInput, NULL, fftReal1, fftImag1); |
77 FFT::forward(_lengthFIRFFT, fftCoefficients, NULL, fftReal2, fftImag2); | 66 FFT::forward(_lengthFIRFFT, fftCoefficients, NULL, fftReal2, fftImag2); |
67 | |
78 for (int i = 0; i < _lengthFIRFFT; i++){ | 68 for (int i = 0; i < _lengthFIRFFT; i++){ |
79 fftFilteredReal[i] = (fftReal1[i] * fftReal2[i]) - (fftImag1[i] * fftImag2[i]); | 69 fftFilteredReal[i] = (fftReal1[i] * fftReal2[i]) - (fftImag1[i] * fftImag2[i]); |
80 fftFilteredImag[i] = (fftReal1[i] * fftImag2[i]) + (fftReal2[i] * fftImag1[i]); | 70 fftFilteredImag[i] = (fftReal1[i] * fftImag2[i]) + (fftReal2[i] * fftImag1[i]); |
81 } | 71 } |
82 FFT::inverse(_lengthFIRFFT, fftFilteredReal, fftFilteredImag, fftOutputReal, fftOutputImag); | 72 FFT::inverse(_lengthFIRFFT, fftFilteredReal, fftFilteredImag, fftOutputReal, fftOutputImag); |
83 | 73 |
84 max = 0; | 74 for (int i = 0; i < _lengthInput; i++){ |
85 for(int i = 0; i < _lengthInput; i++){ | |
86 output[i] = fftOutputReal[i]; | 75 output[i] = fftOutputReal[i]; |
87 max = max > output[i] ? max : output[i]; | |
88 } | 76 } |
89 } | 77 } |
90 | 78 |
91 void | 79 void |
92 FIRFilter::cleanup() | 80 FIRFilter::cleanup() |
93 { | 81 { |
94 delete []fftInput; | 82 delete []fftInput; |
95 fftInput = NULL; | |
96 delete []fftCoefficients; | 83 delete []fftCoefficients; |
97 fftCoefficients = NULL; | |
98 delete []fftReal1; | 84 delete []fftReal1; |
99 fftReal1 = NULL; | |
100 delete []fftImag1; | 85 delete []fftImag1; |
101 fftImag1 = NULL; | |
102 delete []fftReal2; | 86 delete []fftReal2; |
103 fftReal2 = NULL; | |
104 delete []fftImag2; | 87 delete []fftImag2; |
105 fftImag2 = NULL; | |
106 delete []fftFilteredReal; | 88 delete []fftFilteredReal; |
107 fftFilteredReal = NULL; | |
108 delete []fftFilteredImag; | 89 delete []fftFilteredImag; |
109 fftFilteredImag = NULL; | |
110 delete []fftOutputReal; | 90 delete []fftOutputReal; |
111 fftOutputReal = NULL; | |
112 delete []fftOutputImag; | 91 delete []fftOutputImag; |
113 fftOutputImag = NULL; | 92 fftInput = fftCoefficients = fftReal1 = fftImag1 = fftReal2 = fftImag2 = fftFilteredReal = fftFilteredImag = fftOutputReal = fftOutputImag = NULL; |
114 } | 93 } |