Line data Source code
1 : /** 2 : * \file DecimationFilter.hxx 3 : */ 4 : 5 : #include "DecimationFilter.h" 6 : 7 : #include <cassert> 8 : 9 : namespace ATK 10 : { 11 : template<class DataType> 12 17 : DecimationFilter<DataType>::DecimationFilter(gsl::index nb_channels) 13 17 : :TypedBaseFilter<DataType>(nb_channels, nb_channels) 14 : { 15 17 : } 16 : 17 : template<class DataType> 18 34 : void DecimationFilter<DataType>::setup() 19 : { 20 34 : Parent::setup(); 21 34 : if(output_sampling_rate == 0 || input_sampling_rate % output_sampling_rate != 0) 22 : { 23 0 : decimation = 0; 24 : } 25 : else 26 : { 27 34 : decimation = static_cast<int>(input_sampling_rate / output_sampling_rate); 28 : } 29 34 : } 30 : 31 : template<class DataType> 32 17 : void DecimationFilter<DataType>::process_impl(gsl::index size) const 33 : { 34 17 : assert(nb_input_ports == nb_output_ports); 35 : 36 34 : for(gsl::index channel = 0; channel < nb_input_ports; ++channel) 37 : { 38 17 : const DataType* ATK_RESTRICT input = converted_inputs[channel]; 39 17 : DataType* ATK_RESTRICT output = outputs[channel]; 40 341297 : for(gsl::index i = 0; i < size; ++i) 41 : { 42 341280 : output[i] = input[i*decimation]; 43 : } 44 : } 45 17 : } 46 : }