iir1
Toggle main menu visibility
Loading...
Searching...
No Matches
iir
Types.h
1
35
36
#pragma once
37
38
#include "Common.h"
39
#include "MathSupplement.h"
40
41
namespace
Iir
42
{
43
47
struct
IIR_EXPORT ComplexPair : complex_pair_t
48
{
49
ComplexPair () =
default
;
50
51
static
constexpr
double
epsilon = 1E-10;
52
53
explicit
ComplexPair (
const
complex_t &c1) : complex_pair_t (c1, complex_t(0))
54
{
55
if
(!isReal ())
56
throw_invalid_argument (
57
"A single complex number needs to be real."
);
58
}
59
60
ComplexPair (
const
complex_t &c1,
const
complex_t &c2)
61
: complex_pair_t (c1, c2)
62
{
63
}
64
65
bool
isReal ()
const
66
{
67
return
(std::abs (first.imag ()) < epsilon)
68
&& (std::abs (second.imag ()) < epsilon);
69
}
70
75
bool
isMatchedPair
()
const
76
{
77
if
((isReal () && (std::abs (first.real ()) > epsilon))
78
&& (std::abs (second.real ()) > epsilon))
79
return
true
;
80
return
std::abs(second - std::conj (first)) < epsilon;
81
}
82
83
bool
is_nan ()
const
84
{
85
return
Iir::is_nan (first) || Iir::is_nan (second);
86
}
87
};
88
92
struct
IIR_EXPORT PoleZeroPair
93
{
94
ComplexPair
poles =
ComplexPair
();
95
ComplexPair
zeros =
ComplexPair
();
96
97
PoleZeroPair () =
default
;
98
99
static
constexpr
double
epsilon = 1E-10;
100
101
// single pole/zero
102
PoleZeroPair (
const
complex_t &p,
const
complex_t &z)
103
: poles (p), zeros (z)
104
{
105
}
106
107
// pole/zero pair
108
PoleZeroPair (
const
complex_t &p1,
const
complex_t &z1,
109
const
complex_t &p2,
const
complex_t &z2)
110
: poles (p1, p2), zeros (z1, z2)
111
{
112
}
113
114
bool
isSinglePole ()
const
115
{
116
return
(std::abs(poles.second) < epsilon) && (std::abs(zeros.second) < epsilon);
117
}
118
119
bool
is_nan ()
const
{
return
poles.is_nan () || zeros.is_nan (); }
120
};
121
122
}
Iir
Definition
Biquad.cpp:40
Iir::ComplexPair
Definition
Types.h:48
Iir::ComplexPair::isMatchedPair
bool isMatchedPair() const
Definition
Types.h:75
Generated on
for iir1 by
1.17.0