LCOV - code coverage report
Current view: top level - EQ - ChamberlinFilter.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 37 37 100.0 %
Date: 2021-02-18 20:07:22 Functions: 9 9 100.0 %

          Line data    Source code
       1             : /**
       2             :  * \file ChamberlinFilter.cpp
       3             :  */
       4             : 
       5             : #include "ChamberlinFilter.h"
       6             : 
       7             : #include <boost/math/constants/constants.hpp>
       8             : 
       9             : namespace ATK
      10             : {
      11             :   template<typename DataType>
      12          12 :   ChamberlinFilter<DataType>::ChamberlinFilter()
      13          12 :   :TypedBaseFilter<DataType>(1, 1)
      14             :   {
      15          12 :   }
      16             :   
      17             :   template<typename DataType_>
      18          10 :   void ChamberlinFilter<DataType_>::set_cut_frequency(CoeffDataType cutoff_frequency)
      19             :   {
      20          10 :     this->cutoff_frequency = cutoff_frequency;
      21          10 :     setup();
      22          10 :   }
      23             : 
      24             :   template<typename DataType_>
      25           1 :   typename ChamberlinFilter<DataType_>::CoeffDataType ChamberlinFilter<DataType_>::get_cut_frequency() const
      26             :   {
      27           1 :     return cutoff_frequency;
      28             :   }
      29             :   
      30             :   template<typename DataType_>
      31           1 :   void ChamberlinFilter<DataType_>::set_attenuation(CoeffDataType attenuation)
      32             :   {
      33           1 :     this->attenuation = attenuation;
      34           1 :     setup();
      35           1 :   }
      36             : 
      37             :   template<typename DataType_>
      38           1 :   typename ChamberlinFilter<DataType_>::CoeffDataType ChamberlinFilter<DataType_>::get_attenuation() const
      39             :   {
      40           1 :     return attenuation;
      41             :   }
      42             :   
      43             :   template<typename DataType>
      44          10 :   void ChamberlinFilter<DataType>::select(int selection)
      45             :   {
      46          10 :     this->selected = selection;
      47          10 :   }
      48             :   
      49             :   template<typename DataType>
      50           1 :   int ChamberlinFilter<DataType>::get_selected() const
      51             :   {
      52           1 :     return selected;
      53             :   }
      54             :   
      55             :   template<typename DataType>
      56          29 :   void ChamberlinFilter<DataType>::setup()
      57             :   {
      58          29 :     numerical_frequency = 2 * std::sin(boost::math::constants::pi<DataType>() * cutoff_frequency / input_sampling_rate);
      59          29 :     numerical_attenuation = 2 * attenuation;
      60          29 :   }
      61             : 
      62             :   template<typename DataType>
      63          18 :   void ChamberlinFilter<DataType>::process_impl(gsl::index size) const
      64             :   {
      65          18 :     const DataType* ATK_RESTRICT input = converted_inputs[0];
      66          18 :     DataType* ATK_RESTRICT output = outputs[0];
      67     1179670 :     for(gsl::index i = 0; i < size; ++i)
      68             :     {
      69     1179650 :       yh = input[i] - yl - numerical_attenuation * yb;
      70     1179650 :       yb = numerical_frequency * yh + yb;
      71     1179650 :       yl = numerical_frequency * yb + yl;
      72     1179650 :       if(selected == 0)
      73             :       {
      74      393216 :         output[i] = yl;
      75             :       }
      76      786432 :       else if(selected == 1)
      77             :       {
      78      393216 :         output[i] = yb;
      79             :       }
      80             :       else
      81             :       {
      82      393216 :         output[i] = yh;
      83             :       }
      84             :     }
      85          18 :   }
      86             :   
      87             : #if ATK_ENABLE_INSTANTIATION
      88             :   template class ChamberlinFilter<float>;
      89             : #endif
      90             :   template class ChamberlinFilter<double>;
      91             : }

Generated by: LCOV version TK-3.3.0-4-gdba42eea