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 121 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 129 of file dsp_filters.h.

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

◆ ~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 136 of file dsp_filters.h.

136{ 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 138 of file dsp_filters.h.

138{}

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

160 {
161 std::vector line(_order, ComplexType{0.0, 0.0});
162
163 for (auto& sample : samples)
164 {
165 line[0] = sample;
166 ComplexType result{0.0, 0.0};
167
168 result = std::transform_reduce(line.begin(), line.end(), _filter.begin(), ComplexType{0.0, 0.0},
169 std::plus<ComplexType>{},
170 [](const ComplexType& x, const RealType coeff) { return x * coeff; });
171
172 sample = result;
173
174 std::ranges::rotate(std::views::reverse(line), line.rbegin() + 1);
175 }
176 }
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: