【问题标题】:Matlab IIR Filter transfer functionMatlab IIR滤波器传递函数
【发布时间】:2016-07-30 18:23:25
【问题描述】:

我正在使用 MATLAB 设计一个滤波器并获得传递函数系数ab,然后用 C 语言编写滤波器。

但是我注意到函数sos2tf 正在创建与预期不同的值。事实上,当使用fvtool 使用ba 系数查看过滤器时,过滤器看起来与我使用sos 矩阵或实际过滤器f 绘制的过滤器不同。

如果您尝试以下代码,您可以更好地理解我在说什么。这是来自 MATLAB 的函数问题吗?我可以使用 sos2tf 的替代品来获得所需的滤波器系数吗?或者我可以不先使用sos 直接检索它们吗?

请注意,我已经尝试使用designfilt,然后使用tf 函数,得到的系数与使用下面的代码获得的系数完全相同。感谢您的帮助

H = fdesign.lowpass('Fp,Fst,Ap,Ast',60,75,1,60,10000);
f = design(H,'butter','MatchExactly','passband');  % Design an FIR BW filt
info(f)                   % View information about filter
fvtool(f);
[b,a] =  sos2tf(f.sosMatrix);
fvtool(b,a);

【问题讨论】:

  • 能否请您给我您正在使用的过滤器规格和采样频率?

标签: matlab filtering signal-processing matlab-deployment


【解决方案1】:

我不知道到底是什么问题,因为它对我也不起作用,但我会给你一个解决方法来获取滤波器系数。在 Matlab 命令行窗口类型 fdatool 中,将弹出一个滤波器设计应用程序窗口,通过正确选择所需的参数在那里设计您的滤波器。完成后,在 fdatool 窗口中转到 File->Export->Export As-> Coefficients。从同一个工具中,您可以选择文件-> 生成 matlab 代码-> 过滤器设计函数(或 3 个选项中的任何一个)。这样您就可以消除您在问题中发布的代码中可能存在的错误。我就是这样做的,而且效果一直很好

【讨论】:

  • 即使我应用 tf 来提取系数,在按照您所说的操作之后,即使滤波器比原始滤波器好得多,我也会在通带 f 内得到很多噪声。困扰我的是,如果我将 fvtool 应用于 sos 值,则过滤器会按设计出现,如果我将 fvtool 应用于 tf 向量,则输出过滤器会有所不同..这很奇怪..
  • 我也有同样的问题:如果使用 [b,a] 语法设计过滤器,可能会遇到数值问题。这些问题是由于舍入误差造成的,并且可能在 n 低至 4 时发生。并且每个高于 4 阶的滤波器都会破坏信号。
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 2013-12-05
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多