我使用matlab制作了自己的低通滤波器,通过对信号数据进行移动平均来实现。但是如果移动平均创建了一个低通滤波器,那么如何设计高通滤波器的方程呢?我理解使用平均值作为低通滤波器的基础(高频将平均为零,但低频将平均为接近信号值的数字)。
但是是否有任何用于高通滤波器的方程式呢?
我使用matlab制作了自己的低通滤波器,通过对信号数据进行移动平均来实现。但是如果移动平均创建了一个低通滤波器,那么如何设计高通滤波器的方程呢?我理解使用平均值作为低通滤波器的基础(高频将平均为零,但低频将平均为接近信号值的数字)。
但是是否有任何用于高通滤波器的方程式呢?
y[n] = x[n] - x[n-1]
H(z) = 1 - z^-1
H(z) = Y(z) / X(z)
是该滤波器的系统方程式。from audiolazy import z
(1 - z ** -1).plot().show()
from audiolazy import z, Stream
filt = 1 - z ** -1
sig = Stream(1, 3, 1, -1, -3, -1) # Periodic signal
filt(sig).take(7)
[1.0, 2, -2, -2, -2, 2, 2]
filter([1, -1], [1], [1, 3, 1, -1, -3, -1, 1])
[1, 2, -2, -2, -2, 2, 2]
filt = 1 - z ** -1
sig = Stream(1, 2, 3, 2, 1, 0, -1, -2, -3, -2, -1, 0)
filt(sig).take(13)
diff
去除了直流基线! - Buck Thorn一个非常简单的高通滤波器可以通过从原始数据中减去低通滤波器来构建。通过减去低能量内容,您将得到高能量内容,从而创建一个高通滤波器。希望这很直观。
data = %some data here
low_pass_data = %calc low pass here
high_pass_data = data - low_pass_data
(1 + z^-1 + ... + z^-(M-1))/M
需要知道它正在取平均值的 M
个样本的“前半部分”和“后半部分”,因此我们需要 M/2
个样本的滞后,使其成为因果性且居中于其正在计算平均值的位置,并需要延迟达到 z^-(M-1)
。 - H.D.