Filters
1.0
LPF, HPF, BPF, BSF, SRL
Toggle main menu visibility
Loading...
Searching...
No Matches
bsf_2.tpp
Go to the documentation of this file.
1
#include "
../../include/band_stop/bsf_2.h
"
2
3
template
<
typename
T>
4
filter::band_stop::BSF_2<T>::BSF_2
()
5
{
6
reset();
7
}
8
9
template
<
typename
T>
10
void
filter::band_stop::BSF_2<T>::config
(T f0_, T B_, T dt_)
11
{
12
set_param(f0_, B_, dt_);
13
}
14
15
template
<
typename
T>
16
void
filter::band_stop::BSF_2<T>::set_param
(T f0_, T B_, T dt_)
17
{
18
f0 = f0_;
19
B = B_;
20
dt = dt_;
21
Q = f0 / B;
22
T wc = 6.28318530717958647692528676655900576 * f0;
23
24
T w1 = 0.5 * (std::sqrt(B * B + 4.0 * wc * wc) - B);
25
if
(w1 < 0)
26
{
27
w1 = 0;
28
}
29
30
T w2 = 0.5 * (std::sqrt(B * B + 4.0 * wc * wc) + B);
31
32
T w1_n = prewarp_freq(w1, dt);
33
T w2_n = prewarp_freq(w2, dt);
34
35
T wc_n = std::sqrt(w1_n * w2_n);
36
T B_n = w2_n - w1_n;
37
38
T Q_n = (wc_n / 6.28318530717958647692528676655900576) / B_n;
39
40
T b0 = 4.0 + wc_n * wc_n * dt * dt;
41
T b1 = -8.0 + 2.0 * wc_n * wc_n * dt * dt;
42
T b2 = b0;
43
T a0 = dt * dt * wc_n * wc_n + (2.0 * dt * wc_n) / Q_n + 4.0;
44
T a1 = b1;
45
T a2 = dt * dt * wc_n * wc_n - (2.0 * dt * wc_n) / Q_n + 4.0;
46
47
lambda_1 = b0 / a0;
48
lambda_2 = b1 / a0;
49
lambda_3 = b2 / a0;
50
lambda_4 = -a1 / a0;
51
lambda_5 = -a2 / a0;
52
}
53
54
template
<
typename
T>
55
T
filter::band_stop::BSF_2<T>::update
(T x_k)
56
{
57
T y_k = 0.0;
58
59
if
(start_counter <= 1)
60
{
61
y_k = x_k;
62
start_counter++;
63
}
64
else
65
{
66
y_k = lambda_1 * x_k + lambda_2 * x_k_1 + lambda_3 * x_k_2 + lambda_4 * y_k_1 + lambda_5 * y_k_2;
67
}
68
y_k_2 = y_k_1;
69
y_k_1 = y_k;
70
x_k_2 = x_k_1;
71
x_k_1 = x_k;
72
73
return
y_k;
74
}
75
76
template
<
typename
T>
77
void
filter::band_stop::BSF_2<T>::reset
()
78
{
79
start_counter = 0;
80
y_k_1 = 0.0;
81
y_k_2 = 0.0;
82
x_k_1 = 0.0;
83
x_k_2 = 0.0;
84
}
85
86
template
<
typename
T>
87
void
filter::band_stop::BSF_2<T>::set_f0
(T f0_)
88
{
89
set_param(f0_, B, dt);
90
}
91
92
template
<
typename
T>
93
void
filter::band_stop::BSF_2<T>::set_B
(T B_)
94
{
95
set_param(f0, B_, dt);
96
}
97
98
template
<
typename
T>
99
void
filter::band_stop::BSF_2<T>::set_dt
(T dt_)
100
{
101
set_param(f0, B, dt_);
102
}
103
104
template
<
typename
T>
105
T
filter::band_stop::BSF_2<T>::get_f0
()
106
{
107
return
f0;
108
}
109
110
template
<
typename
T>
111
T
filter::band_stop::BSF_2<T>::get_B
()
112
{
113
return
B;
114
}
115
116
template
<
typename
T>
117
T
filter::band_stop::BSF_2<T>::get_dt
()
118
{
119
return
dt;
120
}
121
122
template
<
typename
T>
123
T
filter::band_stop::BSF_2<T>::get_Q
()
124
{
125
return
Q;
126
}
127
128
template
<
typename
T>
129
T
filter::band_stop::BSF_2<T>::get_fs
()
130
{
131
return
1.0 / dt;
132
}
133
134
template
<
typename
T>
135
T
filter::band_stop::BSF_2<T>::prewarp_freq
(T wc_, T dt_)
136
{
137
return
(2.0 * std::tan(0.5 * wc_ * dt_)) / dt_;
138
}
bsf_2.h
Second-order band-stop filter.
filter::band_stop::BSF_2::update
T update(T x_k)
Processes a new input sample.
Definition
bsf_2.h:56
filter::band_stop::BSF_2::set_B
void set_B(T B_)
Sets the bandwidth.
Definition
bsf_2.h:94
filter::band_stop::BSF_2::reset
void reset()
Resets the filter state.
Definition
bsf_2.h:78
filter::band_stop::BSF_2::BSF_2
BSF_2()
Constructs a second-order band-stop filter.
Definition
bsf_2.h:5
filter::band_stop::BSF_2::get_Q
T get_Q()
Gets the quality factor.
Definition
bsf_2.h:124
filter::band_stop::BSF_2::get_dt
T get_dt()
Gets the sampling time.
Definition
bsf_2.h:118
filter::band_stop::BSF_2::prewarp_freq
T prewarp_freq(T wc_, T dt_)
Prewarps an angular cutoff frequency.
Definition
bsf_2.h:136
filter::band_stop::BSF_2::get_B
T get_B()
Gets the bandwidth.
Definition
bsf_2.h:112
filter::band_stop::BSF_2::config
void config(T f0_, T B_, T dt_)
Configures the band-stop filter.
Definition
bsf_2.h:11
filter::band_stop::BSF_2::set_param
void set_param(T f0_, T B_, T dt_)
Sets the filter parameters.
Definition
bsf_2.h:17
filter::band_stop::BSF_2::set_dt
void set_dt(T dt_)
Sets the sampling time.
Definition
bsf_2.h:100
filter::band_stop::BSF_2::get_fs
T get_fs()
Gets the sampling frequency.
Definition
bsf_2.h:130
filter::band_stop::BSF_2::set_f0
void set_f0(T f0_)
Sets the center frequency.
Definition
bsf_2.h:88
filter::band_stop::BSF_2::get_f0
T get_f0()
Gets the center frequency.
Definition
bsf_2.h:106
src
band_stop
bsf_2.tpp
Generated by
1.17.0