Filters
1.0
LPF, HPF, BPF, BSF, SRL
Toggle main menu visibility
Loading...
Searching...
No Matches
lpf_2.tpp
Go to the documentation of this file.
1
#include "
../../include/low_pass/lpf_2.h
"
2
3
template
<
typename
T>
4
filter::low_pass::LPF_2<T>::LPF_2
()
5
{
6
reset();
7
}
8
9
template
<
typename
T>
10
void
filter::low_pass::LPF_2<T>::config
(T fc_, T dt_)
11
{
12
set_param(fc_, dt_);
13
}
14
15
template
<
typename
T>
16
void
filter::low_pass::LPF_2<T>::set_param
(T fc_, T dt_)
17
{
18
fc = fc_;
19
dt = dt_;
20
T wc = 6.28318530717958647692528676655900576 * fc;
21
wc = prewarp_freq(wc, dt);
22
T b0 = dt * dt * wc * wc;
23
T b1 = 2.0 * b0;
24
T b2 = b0;
25
T a0 = b0 + 2.0 * 1.414213562373095048801688724209698 * dt * wc + 4.0;
26
T a1 = b1 - 8.0;
27
T a2 = b0 - 2.0 * 1.414213562373095048801688724209698 * dt * wc + 4.0;
28
29
lambda_1 = b0 / a0;
30
lambda_2 = b1 / a0;
31
lambda_3 = b2 / a0;
32
lambda_4 = -a1 / a0;
33
lambda_5 = -a2 / a0;
34
}
35
36
template
<
typename
T>
37
T
filter::low_pass::LPF_2<T>::update
(T x_k)
38
{
39
T y_k = 0.0;
40
41
if
(start_counter <= 1)
42
{
43
y_k = x_k;
44
start_counter++;
45
}
46
else
47
{
48
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;
49
}
50
y_k_2 = y_k_1;
51
y_k_1 = y_k;
52
x_k_2 = x_k_1;
53
x_k_1 = x_k;
54
55
return
y_k;
56
}
57
58
template
<
typename
T>
59
void
filter::low_pass::LPF_2<T>::reset
()
60
{
61
start_counter = 0;
62
y_k_1 = 0.0;
63
y_k_2 = 0.0;
64
x_k_1 = 0.0;
65
x_k_2 = 0.0;
66
}
67
68
template
<
typename
T>
69
void
filter::low_pass::LPF_2<T>::set_fc
(T fc_)
70
{
71
set_param(fc_, dt);
72
}
73
74
template
<
typename
T>
75
void
filter::low_pass::LPF_2<T>::set_dt
(T dt_)
76
{
77
set_param(fc, dt_);
78
}
79
80
template
<
typename
T>
81
T
filter::low_pass::LPF_2<T>::get_fc
()
82
{
83
return
fc;
84
}
85
86
template
<
typename
T>
87
T
filter::low_pass::LPF_2<T>::get_dt
()
88
{
89
return
dt;
90
}
91
92
template
<
typename
T>
93
T
filter::low_pass::LPF_2<T>::get_fs
()
94
{
95
return
1.0 / dt;
96
}
97
98
template
<
typename
T>
99
T
filter::low_pass::LPF_2<T>::prewarp_freq
(T wc_, T dt_)
100
{
101
return
(2.0 * std::tan(0.5 * wc_ * dt_)) / dt_;
102
}
filter::low_pass::LPF_2::prewarp_freq
T prewarp_freq(T wc_, T dt_)
Prewarps an angular cutoff frequency.
Definition
lpf_2.h:100
filter::low_pass::LPF_2::update
T update(T x_k)
Processes a new input sample.
Definition
lpf_2.h:38
filter::low_pass::LPF_2::config
void config(T fc_, T dt_)
Configures the low-pass filter.
Definition
lpf_2.h:11
filter::low_pass::LPF_2::get_dt
T get_dt()
Gets the sampling time.
Definition
lpf_2.h:88
filter::low_pass::LPF_2::set_fc
void set_fc(T fc_)
Sets the cutoff frequency.
Definition
lpf_2.h:70
filter::low_pass::LPF_2::LPF_2
LPF_2()
Constructs a second-order low-pass filter.
Definition
lpf_2.h:5
filter::low_pass::LPF_2::set_dt
void set_dt(T dt_)
Sets the sampling time.
Definition
lpf_2.h:76
filter::low_pass::LPF_2::reset
void reset()
Resets the filter state.
Definition
lpf_2.h:60
filter::low_pass::LPF_2::get_fc
T get_fc()
Gets the cutoff frequency.
Definition
lpf_2.h:82
filter::low_pass::LPF_2::get_fs
T get_fs()
Gets the sampling frequency.
Definition
lpf_2.h:94
filter::low_pass::LPF_2::set_param
void set_param(T fc_, T dt_)
Sets the filter parameters.
Definition
lpf_2.h:17
lpf_2.h
Second-order low-pass filter.
src
low_pass
lpf_2.tpp
Generated by
1.17.0