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