我通过获取信号数据的移动平均值在matlab中创建了自己的低通滤波器。但是,如果移动平均线会产生低通滤波器,那么设计高通滤波器的等式究竟是如何设计的呢?我理解使用低通平均值的直觉(高频将平均为零,但低频将平均到接近信号值的数字)。
但是有没有用于高通滤波器的公式?
答案 0 :(得分:8)
有很多方程式!也许最简单的是单样本延迟差函数,
y[n] = x[n] - x[n-1]
或采取其Z变换
H(z) = 1 - z^-1
其中H(z) = Y(z) / X(z)
是过滤器的系统方程式。
将AudioLazy与MatPlotLib(Python)一起使用,您可以通过键入来查看此高通滤波器的频率响应图。 (披露:我是AudioLazy的作者)
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)
导致前7个样本:
[1.0, 2, -2, -2, -2, 2, 2]
在GNU Octave(或MatLab)中也可以这样做:
filter([1, -1], [1], [1, 3, 1, -1, -3, -1, 1])
返回
[1, 2, -2, -2, -2, 2, 2]
这是6样本周期信号中的FIR滤波器,在此示例中从[-3;3]
幅度范围衰减到[-2;2]
范围。如果您尝试使用12样本信号(较低频率):
filt = 1 - z ** -1
sig = Stream(1, 2, 3, 2, 1, 0, -1, -2, -3, -2, -1, 0)
filt(sig).take(13)
现在结果是另一个方波,但在[-1;1]
范围内。你应该尝试使用正弦波,它对频率响应有意义,并应保持另一个正弦波作为滤波器的输出,频率相同。
您也可以使用奈奎斯特频率的谐振器,为您提供IIR滤波器。有几种其他滤波器设计可以做到(例如Butterworth,Chebyshev,Elliptical),以满足不同的需求。最小相位,线性相位,滤波器稳定性和最小化纹波幅度是设计滤波器时可能遇到的一些设计目标(或约束)。
答案 1 :(得分:8)
可以通过从原始数据中减去低通滤波器来构造非常简单的高通滤波器。通过减去低能量含量,您可以获得高能量含量,从而创建高通滤波器。希望这很直观。
data = %some data here
low_pass_data = %calc low pass here
high_pass_data = data - low_pass_data
请注意@ H.D。有一个更广泛的答案,但认为它可能太复杂的OP。