2016-04-09 74 views
1

我使用MATLAB,以便设计滤波器,将获得的传递函数的系数和ab然后Matlab的IIR滤波器的传递函数

但是我已经注意到功能sos2tf是创建在不同编码C.过滤器值比预期。实际上,当使用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); 
+0

您能否给我过滤器规格和您使用的采样频率? – VMMF

回答

0

我不知道究竟是什么问题,因为它不是为我工作下去,但我想给你一个解决办法,以获得滤波器系数。在Matlab命令窗口键入fdatool,会弹出一个滤波器设计应用程序窗口,通过正确选择所需的参数来设计滤波器。完成后,在该fdatool窗口中,转到文件 - >导出 - >导出为 - >系数。从同样的工具中,您可以选择File-> generate matlab code-> Filter design function(或3个选项中的任何一个)。这样你就可以消除你在问题中发布的代码中可能存在的错误。这就是我的做法,它一直运行良好

+0

然而,这并不会生成我所要求的a和b矢量系数... – fbdg

+0

即使我应用tf来提取系数,在做了你所说的操作之后,即使滤波器是比原来好多了。令我困扰的是,如果我将fvtool应用于sos值,滤波器会按设计出来,如果我将fvtool应用于tf矢量,那么输出滤波器会有所不同。 – fbdg