【问题标题】:function that finds the cutoff frequency for low pass filter (in matlab)查找低通滤波器截止频率的函数(在matlab中)
【发布时间】:2012-08-19 19:44:17
【问题描述】:

我想找到很多低通滤波器的截止频率。因此,我想要一个可以为我做到这一点的功能。我可以制作一个波特图并找到 -3dB 的频率,但这既无聊又耗时。有人知道我如何自动执行此过程吗?我正在尝试

[mag,phase] = bode(sys) 

但是失败了。我该怎么办?

我有可用的滤波器系数a,b。当我离散化变换函数时,我尝试使用一些不同的技术,因此我希望根据经验从 EKV 中获得截止频率:

y_k = b(1)*x_k + b(2)*x_{k-1} – a(2)*y_{k-1}

【问题讨论】:

  • 可以使用哪种形式的过滤器?转换功能?过滤系数?
  • 如果您了解滤波器设计的类型,您最好通过分析找到 -3 dB 点,而不是凭经验寻找它。请提供更多信息或一些示例代码。

标签: matlab frequency lowpass-filter


【解决方案1】:

您可以对 LTI 对象(传递函数等)使用bandwidth 命令:

G = tf(1, [1 1])
bandwidth(G)

ans =

    0.9976

【讨论】:

  • 我可以让 bandwith(G) 轻松地与 HP、BP、BS 滤波器一起工作(就像它与 LP 滤波器一样)?
  • 不是直接的,因为描述说“......增益下降到其 DC 值的 70.79% (-3 dB) 以下”。例如,HP 滤波器的 DC 值为 0,因此该命令不起作用。但是,对于 HP 过滤器,1-HP 是该命令适用的 LP 过滤器。
【解决方案2】:

如果你没有控制系统工具箱,你可以这样做:

% some filter
[b, a] = butter(5, 0.6);

% Determine frequency response
[h, w] = freqz(b, a, 2048);

% linear approximation of 3 dB cutoff frequency
ind = find(abs(h) < sqrt(1/2), 1, 'first');
slope = (abs(h(ind)) - abs(h(ind - 1))) / (w(ind) - w(ind - 1));
w_3dB = ( sqrt(1/2) - abs(h(ind - 1)) + slope * w(ind - 1) ) / slope;

% check result
figure; plot(w,abs(h))
hold on;
plot(w_3dB, sqrt(1/2), 'rx');

另外,您需要freqz() 的 DSP 工具箱。

【讨论】:

    【解决方案3】:

    matlab 中有一个函数可以给你你的截止频率,它叫做'freqz'

    如果您已经知道滤波器系数“a”和“b”。然后 freqz 提供两个变量输出。一个变量存储复数幅度增益,另一个变量存储归一化频率。基本上,您需要做的就是运行一个循环,找到最接近您的通带增益负 3dB 的增益。然后读出频率变量的相应指数,你就有答案了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 2019-02-23
      • 2017-09-22
      • 1970-01-01
      • 2014-08-29
      • 2013-10-29
      • 2013-08-22
      • 1970-01-01
      相关资源
      最近更新 更多