53 typedef typename util::CallTraits<T>::TValue TValue;
54 typedef typename util::CallTraits<T>::TParam TParam;
55 typedef typename util::CallTraits<T>::TReference TReference;
56 typedef typename util::CallTraits<T>::TConstReference TConstReference;
57 typedef InputIterator TInputIterator;
58 typedef OutputIterator TOutputIterator;
59 typedef NumTraits<T> TNumTraits;
62 TOutputIterator operator()(TInputIterator first, TInputIterator last, TOutputIterator output) {
return doFilter(first, last, output); }
63 void reset() { doReset(); }
66 virtual TOutputIterator doFilter(TInputIterator first, TInputIterator last, TOutputIterator output) = 0;
67 virtual void doReset() {}
81class FirFilter:
public Filter<T, InputIterator, OutputIterator>
84 typedef typename Filter<T, InputIterator, OutputIterator>::TValue TValue;
85 typedef typename Filter<T, InputIterator, OutputIterator>::TParam TParam;
86 typedef typename Filter<T, InputIterator, OutputIterator>::TReference TReference;
87 typedef typename Filter<T, InputIterator, OutputIterator>::TConstReference TConstReference;
88 typedef typename Filter<T, InputIterator, OutputIterator>::TInputIterator TInputIterator;
89 typedef typename Filter<T, InputIterator, OutputIterator>::TOutputIterator TOutputIterator;
90 typedef typename Filter<T, InputIterator, OutputIterator>::TNumTraits TNumTraits;
92 typedef std::vector<T> TValues;
94 FirFilter(
const TValues& impulseResponse);
96 typedef std::vector<size_t> TIndexTable;
98 TOutputIterator doFilter(TInputIterator first, TInputIterator last, TOutputIterator output)
override;
99 void doReset()
override;
103 TIndexTable nextIndex_;
122 typedef typename Filter<T, InputIterator, OutputIterator>::TValue TValue;
123 typedef typename Filter<T, InputIterator, OutputIterator>::TParam TParam;
124 typedef typename Filter<T, InputIterator, OutputIterator>::TReference TReference;
125 typedef typename Filter<T, InputIterator, OutputIterator>::TConstReference TConstReference;
126 typedef typename Filter<T, InputIterator, OutputIterator>::TInputIterator TInputIterator;
127 typedef typename Filter<T, InputIterator, OutputIterator>::TOutputIterator TOutputIterator;
128 typedef typename Filter<T, InputIterator, OutputIterator>::TNumTraits TNumTraits;
130 typedef std::vector<T> TValues;
131 typedef std::pair<TValues, TValues> TValuesPair;
133 IirFilter(
const TValues& numerator,
const TValues& denominator);
134 IirFilter(
const TValuesPair& coefficients);
136 static IirFilter makeLaplace(
const TValues& nominator,
const TValues& denominator, TParam samplingFrequency);
139 static IirFilter makeRlcLowPass(TParam qFactor, TParam cutoffAngularFrequency, TParam gain, TParam samplingFrequency);
140 static IirFilter makeRlcHighPass(TParam qFactor, TParam cutoffAngularFrequency, TParam gain, TParam samplingFrequency);
141 static IirFilter makeRlcBandPass(TParam qFactor, TParam centerAngularFrequency, TParam gain, TParam samplingFrequency);
142 static IirFilter makeRlcNotch(TParam qFactor, TParam centerAngularFrequency, TParam gain, TParam samplingFrequency);
148 typedef std::vector<size_t> TIndexTable;
150 TOutputIterator doFilter(TInputIterator first, TInputIterator last, TOutputIterator output)
override;
151 void doReset()
override;
152 void init(
const TValues& numerator,
const TValues& denominator);
154 template <
typename FwdIt1,
typename FwdIt2>
155 static IirFilter doMakeLaplace(FwdIt1 numFirst, FwdIt1 numLast, FwdIt2 denFirst, FwdIt2 denLast, TParam sampleFrequency);
156 static IirFilter doMakeLaplace(
const TValuesPair& coefficients, TParam sampleFrequency);
162 TIndexTable xNextIndex_;
163 TIndexTable yNextIndex_;
166 size_t xBufferIndex_;
167 size_t yBufferIndex_;
static IirFilter makeButterworthHighPass(unsigned order, TParam cutoffAngularFrequency, TParam gain, TParam samplingFrequency)
make an IIR filter implementing a high-pass butterworth filter.
static IirFilter makeRlcNotch(TParam qFactor, TParam centerAngularFrequency, TParam gain, TParam samplingFrequency)
make an IIR filter implementing an notch RLC circuit.
static IirFilter makeRlcHighPass(TParam qFactor, TParam cutoffAngularFrequency, TParam gain, TParam samplingFrequency)
make an IIR filter implementing an high-pass RLC circuit.
static IirFilter makeButterworthLowPass(unsigned order, TParam cutoffAngularFrequency, TParam gain, TParam samplingFrequency)
make an IIR filter implementing a low-pass butterworth filter.
static IirFilter makeRlcBandPass(TParam qFactor, TParam centerAngularFrequency, TParam gain, TParam samplingFrequency)
make an IIR filter implementing an band-pass RLC circuit.
static IirFilter makeRlcLowPass(TParam qFactor, TParam cutoffAngularFrequency, TParam gain, TParam samplingFrequency)
make an IIR filter implementing an low-pass RLC circuit.