Line data Source code
1 : /** 2 : * \file SinusGeneratorFilter.cpp 3 : */ 4 : 5 : #include "SimpleSinusGeneratorFilter.h" 6 : 7 : #include <boost/math/constants/constants.hpp> 8 : 9 : #include <cmath> 10 : #include <cstdint> 11 : 12 : namespace ATK 13 : { 14 : template<class DataType_> 15 370 : SimpleSinusGeneratorFilter<DataType_>::SimpleSinusGeneratorFilter() 16 370 : :TypedBaseFilter<DataType_>(0, 1) 17 : { 18 370 : } 19 : 20 : template<class DataType_> 21 354 : void SimpleSinusGeneratorFilter<DataType_>::set_amplitude(DataType_ amplitude) 22 : { 23 354 : this->amplitude = amplitude; 24 354 : } 25 : 26 : template<class DataType_> 27 370 : void SimpleSinusGeneratorFilter<DataType_>::set_frequency(int frequency) 28 : { 29 370 : this->frequency = frequency; 30 370 : } 31 : 32 : template<class DataType_> 33 9080 : void SimpleSinusGeneratorFilter<DataType_>::process_impl(gsl::index size) const 34 : { 35 9080 : double real_increment = 2. / output_sampling_rate * frequency; 36 : 37 67801889 : for(gsl::index i = 0; i < size; ++i) 38 : { 39 67792760 : state += real_increment; 40 67792760 : outputs[0][i] = static_cast<DataType_>(amplitude * std::sin(state * boost::math::constants::pi<double>())); 41 : } 42 9080 : } 43 : 44 : template class SimpleSinusGeneratorFilter<std::int16_t>; 45 : template class SimpleSinusGeneratorFilter<std::int32_t>; 46 : template class SimpleSinusGeneratorFilter<int64_t>; 47 : template class SimpleSinusGeneratorFilter<float>; 48 : template class SimpleSinusGeneratorFilter<double>; 49 : }