rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes
Biquad Class Reference

#include <biquad.h>

Collaboration diagram for Biquad:
Collaboration graph
[legend]

Public Member Functions

 Biquad ()
 
float filter (float input)
 
void reset ()
 
void cookSteadyState (float steadyStateInput)
 
void configureBandpass (float samplingFrequency, float centerFrequency, float Q)
 
void configureLowpass (float samplingFrequency, float cutoffFrequency, float Q=0.54f)
 
void configureHighpass (float samplingFrequency, float cutoffFrequency, float Q=0.54f)
 

Private Attributes

float a0
 
float a1
 
float a2
 
float b1
 
float b2
 
float z1
 
float z2
 

Detailed Description

Definition at line 10 of file biquad.h.

Constructor & Destructor Documentation

◆ Biquad()

Biquad::Biquad ( )

Definition at line 12 of file biquad.cpp.

12 {
13// Default to passthru
14 a0 = 1;
15 a1 = a2 = b1 = b2 = 0;
16
17 reset();
18}
float a0
Definition biquad.h:26
float b1
Definition biquad.h:26
float b2
Definition biquad.h:26
float a1
Definition biquad.h:26
void reset()
Definition biquad.cpp:20
float a2
Definition biquad.h:26
Here is the call graph for this function:

Member Function Documentation

◆ configureBandpass()

void Biquad::configureBandpass ( float  samplingFrequency,
float  centerFrequency,
float  Q 
)

Definition at line 32 of file biquad.cpp.

32 {
33 if (samplingFrequency < 2.5f * centerFrequency) {
34 criticalError("Invalid biquad parameters samplingFrequency=%f centerFrequency=%f", samplingFrequency, centerFrequency);
35 return;
36 }
37
38 float K = getK(samplingFrequency, centerFrequency);
39 float norm = getNorm(K, Q);
40
41 a0 = K / Q * norm;
42 a1 = 0;
43 a2 = -a0;
44 b1 = 2 * (K * K - 1) * norm;
45 b2 = (1 - K / Q + K * K) * norm;
46}
static float getK(float samplingFrequency, float cutoff)
Definition biquad.cpp:24
static float getNorm(float K, float Q)
Definition biquad.cpp:28

Referenced by initSoftwareKnock().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ configureHighpass()

void Biquad::configureHighpass ( float  samplingFrequency,
float  cutoffFrequency,
float  Q = 0.54f 
)

Definition at line 61 of file biquad.cpp.

61 {
62 criticalAssertVoid(samplingFrequency >= 2.5f * cutoffFrequency, "Invalid biquad parameters");
63
64 float K = getK(samplingFrequency, cutoffFrequency);
65 float norm = getNorm(K, Q);
66
67 a0 = 1 * norm;
68 a1 = -2 * a0;
69 a2 = a0;
70 b1 = 2 * (K * K - 1) * norm;
71 b2 = (1 - K / Q + K * K) * norm;
72}

Referenced by IdleController::init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ configureLowpass()

void Biquad::configureLowpass ( float  samplingFrequency,
float  cutoffFrequency,
float  Q = 0.54f 
)

Definition at line 48 of file biquad.cpp.

48 {
49 criticalAssertVoid(samplingFrequency >= 2.5f * cutoffFrequency, "Invalid biquad parameters");
50
51 float K = getK(samplingFrequency, cutoffFrequency);
52 float norm = getNorm(K, Q);
53
54 a0 = K * K * norm;
55 a1 = 2 * a0;
56 a2 = a0;
57 b1 = 2 * (K * K - 1) * norm;
58 b2 = (1 - K / Q + K * K) * norm;
59}

Referenced by LuaBiQuad::configureLowpass(), FlexConverter::FlexConverter(), initFlexSensor(), and FrequencySensor::initIfValid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cookSteadyState()

void Biquad::cookSteadyState ( float  steadyStateInput)

Definition at line 84 of file biquad.cpp.

84 {
85 float Y = steadyStateInput * (a0 + a1 + a2) / (1 + b1 + b2);
86
87 float steady_z2 = steadyStateInput * a2 - Y * b2;
88 float steady_z1 = steady_z2 + steadyStateInput * a1 - Y * b1;
89
90 this->z1 = steady_z1;
91 this->z2 = steady_z2;
92}
float z1
Definition biquad.h:27
float z2
Definition biquad.h:27

Referenced by LuaBiQuad::filter(), processLastKnockEvent(), and AdcSubscription::UpdateSubscribers().

Here is the caller graph for this function:

◆ filter()

float Biquad::filter ( float  input)

Definition at line 74 of file biquad.cpp.

74 {
75 float result = input * a0 + z1;
77 efiPrintf("input %f, a0 %f, z1 %f, result %f", input, a0, z1, result);
78 }
79 z1 = input * a1 + z2 - b1 * result;
80 z2 = input * a2 - b2 * result;
81 return result;
82}
static constexpr engine_configuration_s * engineConfiguration

Referenced by FlexConverter::convert(), fft::fft_adc_sample_filtered(), LuaBiQuad::filter(), flexCallback(), IdleController::getIdlePosition(), FrequencySensor::onEdge(), processLastKnockEvent(), and AdcSubscription::UpdateSubscribers().

Here is the caller graph for this function:

◆ reset()

void Biquad::reset ( )

Definition at line 20 of file biquad.cpp.

20 {
21 z1 = z2 = 0;
22}

Referenced by Biquad().

Here is the caller graph for this function:

Field Documentation

◆ a0

float Biquad::a0
private

◆ a1

float Biquad::a1
private

◆ a2

float Biquad::a2
private

◆ b1

float Biquad::b1
private

◆ b2

float Biquad::b2
private

◆ z1

float Biquad::z1
private

Definition at line 27 of file biquad.h.

Referenced by cookSteadyState(), filter(), and reset().

◆ z2

float Biquad::z2
private

Definition at line 27 of file biquad.h.

Referenced by cookSteadyState(), filter(), and reset().


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