Line data Source code
1 : /** 2 : * \file TriangleGeneratorFilter.cpp 3 : */ 4 : 5 : #include "TriangleGeneratorFilter.h" 6 : #include <ATK/Core/TypeTraits.h> 7 : 8 : #include <cstdint> 9 : #include <complex> 10 : 11 : namespace ATK 12 : { 13 : template<class DataType_> 14 110 : TriangleGeneratorFilter<DataType_>::TriangleGeneratorFilter() 15 110 : :TypedBaseFilter<DataType_>(0, 1) 16 : { 17 110 : } 18 : 19 : template<class DataType_> 20 108 : void TriangleGeneratorFilter<DataType_>::set_amplitude(DataType_ amplitude) 21 : { 22 108 : this->amplitude = amplitude; 23 108 : } 24 : 25 : template<class DataType_> 26 109 : void TriangleGeneratorFilter<DataType_>::set_frequency(int frequency) 27 : { 28 109 : this->frequency = frequency; 29 109 : } 30 : 31 : template<class DataType_> 32 2156 : void TriangleGeneratorFilter<DataType_>::process_impl(gsl::index size) const 33 : { 34 2156 : double real_increment = 2. / output_sampling_rate * frequency; 35 : 36 22110330 : for(gsl::index i = 0; i < size; ++i) 37 : { 38 22108190 : state += real_increment * (ascending ? 1 : -1); 39 22108190 : if(state >= 1) 40 : { 41 230329 : state -= 2 * real_increment; 42 230329 : ascending = !ascending; 43 : } 44 21877830 : else if(state <= -1) 45 : { 46 230227 : state += 2 * real_increment; 47 230227 : ascending = !ascending; 48 : } 49 22108190 : outputs[0][i] = TypeTraits<DataType>::from_double(TypeTraits<DataType>::to_double(amplitude) * state); 50 : } 51 2156 : } 52 : 53 : template class TriangleGeneratorFilter<std::int16_t>; 54 : template class TriangleGeneratorFilter<std::int32_t>; 55 : template class TriangleGeneratorFilter<std::int64_t>; 56 : template class TriangleGeneratorFilter<float>; 57 : template class TriangleGeneratorFilter<double>; 58 : template class TriangleGeneratorFilter<std::complex<float>>; 59 : template class TriangleGeneratorFilter<std::complex<double>>; 60 : }