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