【问题标题】:Low Pass Filter Matlab低通滤波器 Matlab
【发布时间】:2013-01-12 21:58:32
【问题描述】:

matlab 中是否有办法创建低通滤波器,我知道我可以使用 filter 函数但不知道如何使用它,我的低通 H(z) = 1 给出了以下公式(1 - z^-4)^2 / 16 (1 - z^-1)^2,截止频率为 20Hz

【问题讨论】:

  • 可以,但需要 Signal Processing Toolbox。否则你必须手工设计。
  • @Phonon - 在我的回答中补充说,我已经忘记了这一点。谢谢。
  • 你确定这是正确的H(z)?这看起来更像是梳状滤波器而不是低通滤波器。
  • 是的,你知道我将如何在我的低通滤波器中使用该公式吗?

标签: matlab signal-processing smoothing


【解决方案1】:

filter 函数允许您对向量应用过滤器。您仍然需要提供滤波器系数。如果查看the documentation for filter,您会发现需要指定两个向量ba,其元素是z 的降幂系数,其中z 是z 变换中的频域变量。由于您有一个作为 z 变换的滤波器表达式,因此很容易找到系数。首先,让我们写出过滤器的分子:

(1/16)*(1 - z^-4)^2 = (1/16)*(1 - 2z^-4 + z^-16)
= (1/16)*(1 + 0z^-1 + 0z^-2 + 0z^-3 - 2z^-4 + 0z^5 + 0z^-6 ... + z^-16)

所以b 向量是b = (1/16)*[1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1]。同样,a 向量是a = [1 -2 1]。所以现在你可以过滤你的数据向量x,通过简单的y = filter(b,a,x);得到一个结果y

话虽如此,您在上面指定的 H(z) 绝对不是低通滤波器。它更像是一个带有自身的梳状滤波器的奇怪级联。

如果您想设计自己的滤波器,并且假设您有信号处理工具箱,那么最简单的做法就是使用 Matlab 的 fir1 函数设计一个滤波器:

h = fir1(N, 20/(Fs/2)); %# N is filter length, Fs is sampling frequency (Hz)

然后您可以在 filter 函数中使用它:

y = filter(h, 1, x); %# second param is 1 because this is an FIR filter

您需要自己选择 N。通常,较大的 N 值会产生更好的滤波器,其中更好 = 拒绝更多高于 20 Hz 的频率。如果您的 N 值开始变得如此之大以至于导致奇怪的行为(计算错误、缓慢的实现、结果数据中不可接受的启动/结束瞬态),您可能会考虑更复杂的滤波器设计。 Mathworks 文档中有an overview 的各种数字滤波器设计技术。

【讨论】:

  • 我是信号处理新手,我的低通 H(z) = 1 (1 - z^-4)^2 / 16 (1 - z ^-1)^2 你能告诉我如何使用它吗,我不知道我被告知我需要创建一个截止频率为 20Hz 的低通滤波器
【解决方案2】:

您给出的公式:H(z) = 1 (1 - z^-4)^2 / 16 (1 - z^-1)^2 是过滤器的 Z 变换。这是一个有理函数,这意味着您的过滤器是递归 (IIR) 过滤器。 Matlab 有一个名为filter(b,a,X) 的函数。 b 是分子的系数,z 的幂递减,即在你的情况下:(1*z^-0 + 0*z^-1 + 0*z^-2 + 0*z^-3 + 0*z^-4)^2,你可以使用conv()数量平方:

b = [1 0 0 0 -1]

b = conv(b,b)

分母的系数为:

a = [1 -1]

a = 16 * conv(a,a)

然后您调用过滤器y = filter(b,a,x),其中x 是您的输入数据。

您还可以使用freqz(b,a)检查您的滤波器的频率响应

希望有所帮助。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 2015-05-03
    • 2016-02-13
    • 1970-01-01
    • 2017-04-06
    • 2013-10-29
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多