FERS 1.0.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
fers_signal::IirFilter Class Referencefinal

Implements an Infinite Impulse Response (IIR) filter. More...

#include "dsp_filters.h"

+ Inheritance diagram for fers_signal::IirFilter:
+ Collaboration diagram for fers_signal::IirFilter:

Public Member Functions

 IirFilter (const RealType *denCoeffs, const RealType *numCoeffs, unsigned order) noexcept
 Constructs an IIR filter with given numerator and denominator coefficients and order.
 
 ~IirFilter () override=default
 
RealType filter (RealType sample) noexcept override
 Filters a single sample.
 
void filter (std::span< RealType > samples) noexcept override
 Filters a block of samples.
 

Detailed Description

Implements an Infinite Impulse Response (IIR) filter.

Definition at line 81 of file dsp_filters.h.

Constructor & Destructor Documentation

◆ IirFilter()

fers_signal::IirFilter::IirFilter ( const RealType denCoeffs,
const RealType numCoeffs,
unsigned  order 
)
noexcept

Constructs an IIR filter with given numerator and denominator coefficients and order.

Parameters
denCoeffsPointer to the denominator coefficients array.
numCoeffsPointer to the numerator coefficients array.
orderThe order of the filter.

Definition at line 123 of file dsp_filters.cpp.

123 :
124 _a(denCoeffs, denCoeffs + order), _b(numCoeffs, numCoeffs + order), _w(order, 0.0), _order(order)
125 {
126 }

◆ ~IirFilter()

fers_signal::IirFilter::~IirFilter ( )
overridedefault

Member Function Documentation

◆ filter() [1/2]

RealType fers_signal::IirFilter::filter ( RealType  sample)
overridevirtualnoexcept

Filters a single sample.

Parameters
sampleThe sample to be filtered.
Returns
The filtered sample.

Implements fers_signal::DspFilter.

Definition at line 128 of file dsp_filters.cpp.

129 {
130 std::ranges::rotate(_w, _w.end() - 1);
131
132 _w[0] = sample;
133
134 for (unsigned j = 1; j < _order; ++j)
135 {
136 _w[0] -= _a[j] * _w[j];
137 }
138
139 return std::inner_product(_b.begin(), _b.end(), _w.begin(), 0.0);
140 }

◆ filter() [2/2]

void fers_signal::IirFilter::filter ( std::span< RealType samples)
overridevirtualnoexcept

Filters a block of samples.

Parameters
samplesSpan of samples to be filtered.

Implements fers_signal::DspFilter.

Definition at line 142 of file dsp_filters.cpp.

143 {
144 for (auto& sample : samples)
145 {
146 std::ranges::rotate(_w, _w.end() - 1);
147
148 _w[0] = sample;
149
150 for (unsigned j = 1; j < _order; ++j)
151 {
152 _w[0] -= _a[j] * _w[j];
153 }
154
155 sample = std::inner_product(_b.begin(), _b.end(), _w.begin(), 0.0);
156 }
157 }

The documentation for this class was generated from the following files: