iir1
Toggle main menu visibility
Loading...
Searching...
No Matches
iir
Biquad.h
1
35
36
#pragma once
37
38
#include "Common.h"
39
#include "MathSupplement.h"
40
#include "Types.h"
41
42
namespace
Iir
{
43
44
struct
IIR_EXPORT
BiquadPoleState
;
45
46
/*
47
* Holds coefficients for a second order Infinite Impulse Response
48
* digital filter. This is the building block for all IIR filters.
49
*
50
*/
51
class
IIR_EXPORT Biquad {
52
public
:
53
54
Biquad() =
default
;
55
60
complex_t
response
(
double
normalizedFrequency)
const
;
61
65
std::vector<PoleZeroPair>
getPoleZeros
()
const
;
66
70
double
getA0
()
const
{
return
m_a0; }
71
75
double
getA1
()
const
{
return
m_a1*m_a0; }
76
80
double
getA2
()
const
{
return
m_a2*m_a0; }
81
85
double
getB0
()
const
{
return
m_b0*m_a0; }
86
90
double
getB1
()
const
{
return
m_b1*m_a0; }
91
95
double
getB2
()
const
{
return
m_b2*m_a0; }
96
103
template
<
class
StateType>
104
inline
double
filter
(
double
s, StateType& state)
const
105
{
106
return
state.filter(s, *
this
);
107
}
108
109
public
:
119
void
setCoefficients (
double
a0,
double
a1,
double
a2,
120
double
b0,
double
b1,
double
b2);
121
125
void
setOnePole (complex_t pole, complex_t zero);
126
130
void
setTwoPole (complex_t pole1, complex_t zero1,
131
complex_t pole2, complex_t zero2);
132
136
void
setPoleZeroPair
(
const
PoleZeroPair
& pair)
137
{
138
if
(pair.isSinglePole ())
139
setOnePole
(pair.poles.first, pair.zeros.first);
140
else
141
setTwoPole
(pair.poles.first, pair.zeros.first,
142
pair.poles.second, pair.zeros.second);
143
}
144
145
void
setPoleZeroForm (
const
BiquadPoleState
& bps);
146
150
void
setIdentity ();
151
156
void
applyScale (
double
scale);
157
158
public
:
159
double
m_a0 = 1.0;
160
double
m_a1 = 0.0;
161
double
m_a2 = 0.0;
162
double
m_b1 = 0.0;
163
double
m_b2 = 0.0;
164
double
m_b0 = 1.0;
165
};
166
167
//------------------------------------------------------------------------------
168
169
174
struct
IIR_EXPORT BiquadPoleState : PoleZeroPair
175
{
176
BiquadPoleState () =
default
;
177
178
explicit
BiquadPoleState (
const
Biquad
& s);
179
180
double
gain = 1.0;
181
};
182
183
}
Iir::Biquad
Definition
Biquad.h:51
Iir::Biquad::getA2
double getA2() const
Definition
Biquad.h:80
Iir::Biquad::setOnePole
void setOnePole(complex_t pole, complex_t zero)
Definition
Biquad.cpp:141
Iir::Biquad::getA1
double getA1() const
Definition
Biquad.h:75
Iir::Biquad::filter
double filter(double s, StateType &state) const
Definition
Biquad.h:104
Iir::Biquad::getPoleZeros
std::vector< PoleZeroPair > getPoleZeros() const
Definition
Biquad.cpp:115
Iir::Biquad::setPoleZeroPair
void setPoleZeroPair(const PoleZeroPair &pair)
Definition
Biquad.h:136
Iir::Biquad::setTwoPole
void setTwoPole(complex_t pole1, complex_t zero1, complex_t pole2, complex_t zero2)
Definition
Biquad.cpp:156
Iir::Biquad::getA0
double getA0() const
Definition
Biquad.h:70
Iir::Biquad::getB0
double getB0() const
Definition
Biquad.h:85
Iir::Biquad::getB2
double getB2() const
Definition
Biquad.h:95
Iir::Biquad::response
complex_t response(double normalizedFrequency) const
Definition
Biquad.cpp:88
Iir::Biquad::getB1
double getB1() const
Definition
Biquad.h:90
Iir
Definition
Biquad.cpp:40
Iir::BiquadPoleState
Definition
Biquad.h:175
Iir::PoleZeroPair
Definition
Types.h:92
Generated on
for iir1 by
1.17.0