Line data Source code
1 : /** 2 : * \file FFTCheckerFilter.cpp 3 : */ 4 : 5 : #include "FFTCheckerFilter.h" 6 : 7 : #include <gtest/gtest.h> 8 : 9 : #include <cmath> 10 : 11 : namespace ATK 12 : { 13 : template<class DataType_> 14 313 : FFTCheckerFilter<DataType_>::FFTCheckerFilter() 15 313 : :TypedBaseFilter<DataType_>(1, 0) 16 : { 17 313 : } 18 : 19 : template<class DataType_> 20 313 : FFTCheckerFilter<DataType_>::~FFTCheckerFilter() 21 : { 22 313 : } 23 : 24 : template<class DataType_> 25 313 : void FFTCheckerFilter<DataType_>::set_checks(const std::vector<std::pair<int, DataType> >& frequency_checks) 26 : { 27 313 : this->frequency_checks = frequency_checks; 28 313 : } 29 : 30 : template<class DataType_> 31 313 : void FFTCheckerFilter<DataType_>::setup() 32 : { 33 313 : FFTimpl->set_size(input_sampling_rate); 34 313 : } 35 : 36 : template<class DataType_> 37 314 : void FFTCheckerFilter<DataType_>::process_impl(gsl::index size) const 38 : { 39 922 : for(gsl::index i = 0; i < size/input_sampling_rate; ++i) 40 : { 41 608 : FFTimpl->process(converted_inputs[0] + i * input_sampling_rate, input_sampling_rate); 42 608 : std::vector<DataType_> output_freqs; 43 608 : FFTimpl->get_amp(output_freqs); 44 : 45 2445 : for(gsl::index j = 0; j < frequency_checks.size(); ++j) 46 : { 47 1837 : DataType amp = output_freqs[frequency_checks[j].first]; 48 1837 : DataType amp_check = frequency_checks[j].second * frequency_checks[j].second; 49 1837 : if(amp_check < 0.001) 50 : { 51 1232 : ASSERT_NEAR(amp, 0, 0.001); 52 : } 53 : else 54 : { 55 605 : ASSERT_NEAR(2 * amp, amp_check, 0.1); 56 : } 57 : } 58 : } 59 : } 60 : 61 : template class FFTCheckerFilter<double>; 62 : }