高通滤波器的方程? [关闭]
Posted
技术标签:
【中文标题】高通滤波器的方程? [关闭]【英文标题】:Equations for high pass filter? [closed] 【发布时间】:2013-08-30 21:32:37 【问题描述】:我通过对信号数据进行移动平均,在 matlab 中制作了自己的低通滤波器。但是,如果移动平均线创建了一个低通滤波器,那么究竟如何设计一个高通滤波器的方程呢?我理解对低通使用平均值的直觉(高频将平均为零,但低频将平均为接近信号值的数字)。
但是有没有用于高通滤波器的公式?
【问题讨论】:
我在这里给出了一些比简单的移动平均类型滤波器更具选择性的低通和高通滤波器示例:blog.bjornroche.com/2012/08/basic-audio-eqs.html 【参考方案1】:有很多方程式!也许最简单的就是单样本延迟差分函数,
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),以满足不同的需求。最小相位、线性相位、滤波器稳定性和最小化纹波幅度是您在设计滤波器时可以实现的一些可能的设计目标(或约束)。
【讨论】:
很好的描述...diff
删除了 DC 基线!【参考方案2】:
可以通过从原始数据中减去低通滤波器来构造一个非常简单的高通滤波器。通过减去低能量含量,您就得到了高能量含量,从而创建了一个高通滤波器。希望这是直观的。
data = %some data here
low_pass_data = %calc low pass here
high_pass_data = data - low_pass_data
请注意@H.D.有一个更广泛的答案,但认为它可能对 OP 来说太复杂了。
【讨论】:
如果 lp 滤波器没有延迟信号,这会很好。 @BjornRoche 完全正确,OP 提到使用不会引入延迟的移动平均 LFP 滤波器。 移动平均过滤器(1 + z^-1 + ... + z^-(M-1))/M
需要知道它从中获取平均值的M
样本的“前半部分”和“后半部分”,所以我们需要延迟M/2
样本使其具有因果关系,并以它的平均值为中心,除了需要延迟到 z^-(M-1)
。以上是关于高通滤波器的方程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
滤波器基于matlab GUI高通+低通+带通+带阻FIR滤波器设计含Matlab源码 1346期