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

Implements a Finite Impulse Response (FIR) filter. More...

#include "dsp_filters.h"

+ Inheritance diagram for fers_signal::FirFilter:
+ Collaboration diagram for fers_signal::FirFilter:

Public Member Functions

 FirFilter (std::span< const RealType > coeffs)
 Constructs an FIR filter with the given coefficients.
 
 ~FirFilter () override=default
 
RealType filter (RealType) override
 Filters a single sample.
 
void filter (std::span< RealType >) noexcept override
 Filters a block of samples.
 
void filter (std::vector< ComplexType > &samples) const
 Filters a block of complex samples.
 

Detailed Description

Implements a Finite Impulse Response (FIR) filter.

Definition at line 120 of file dsp_filters.h.

Constructor & Destructor Documentation

◆ FirFilter()

fers_signal::FirFilter::FirFilter ( std::span< const RealType coeffs)
explicit

Constructs an FIR filter with the given coefficients.

Parameters
coeffsSpan of filter coefficients.

Definition at line 128 of file dsp_filters.h.

128 :
129 _filter(coeffs.begin(), coeffs.end()), _w(coeffs.size()), _order(coeffs.size())
130 {
131 }

◆ ~FirFilter()

fers_signal::FirFilter::~FirFilter ( )
overridedefault

Member Function Documentation

◆ filter() [1/3]

RealType fers_signal::FirFilter::filter ( RealType  sample)
overridevirtual

Filters a single sample.

Parameters
sampleA single real-valued sample to be filtered.
Returns
The filtered sample.

Implements fers_signal::DspFilter.

Definition at line 135 of file dsp_filters.h.

135{ return 0; }

Referenced by fers_signal::downsample(), and fers_signal::upsample().

+ Here is the caller graph for this function:

◆ filter() [2/3]

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

Filters a block of samples.

Parameters
samplesSpan of real-valued samples to be filtered.

Implements fers_signal::DspFilter.

Definition at line 137 of file dsp_filters.h.

137{}

◆ filter() [3/3]

void fers_signal::FirFilter::filter ( std::vector< ComplexType > &  samples) const

Filters a block of complex samples.

Parameters
samplesSpan of complex samples to be filtered.

Definition at line 158 of file dsp_filters.cpp.

159 {
160 std::vector line(_order, ComplexType{0.0, 0.0});
161
162 for (auto& sample : samples)
163 {
164 line[0] = sample;
165 ComplexType result{0.0, 0.0};
166
167 result = std::transform_reduce(line.rbegin(), line.rend(), _filter.begin(), ComplexType{0.0, 0.0},
168 std::plus<ComplexType>{},
169 [](const ComplexType& x, const RealType coeff) { return x * coeff; });
170
171 sample = result;
172
173 std::rotate(line.rbegin(), line.rbegin() + 1, line.rend());
174 }
175 }
double RealType
Type for real numbers.
Definition config.h:27
std::complex< RealType > ComplexType
Type for complex numbers.
Definition config.h:35

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