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 80 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 122 of file dsp_filters.cpp.

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

◆ ~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 127 of file dsp_filters.cpp.

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

◆ 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 141 of file dsp_filters.cpp.

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

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