今天检查了以往设计的滤波器,可是发现只有程序中保留的滤波器系数,而没有了原先设计时的滤波器频率指标。看着测试结果,老大怀疑滤波做的不对,所以检查了下。
重新用MATLAB设计滤波器的时候,发现IIR要比FIR的频率响应好很多,所以干脆换成IIR得了。可是IIR设计出的系数总是一个SOS matrix,在网上找了半天也没查出它究竟是什么意思。后来在老大的提示下利用convert to single section,终于出现了我熟悉的num和den,带入程序实验,发现数据慢慢增长,以致最后出现
1.#
INF0000 (顺便说一个这个
1.#
INF0000 ,网上的提示大都是说你除了0,而实际上是,当你的数据大得超过你的变量类型的范围时,也出现这种情况。我刚开始float出现
1.#
INF0000 ,后来把float改为double,结果解决了暂时问题,最终还是会出现
1.#
INF0000 ,因为滤波器的错误,使得我的数值不断的增长。)。
最终还是向别人请教解决了IIR滤波器的设计问题。也就是利用matlab的fdatool设计之后,不能直接看filter coefficients,而是通过realise model ,出现了一个simulink类似的滤波器model块,打开该model后,可以看到滤波器的结构,而且每个系数都可以打开来查看,然后根据该滤波器的结构,就可以来实现filter的编程了。
唉,现在网上书上好多IIR滤波器的设计问题,可是鲜有文章提到这最后关键的一步,不知道是它太简单了还是大家都没有用到过它。总之我的教训时,直接用filter coefficients设计的滤波器是不正确的,因为我的数据说明这个问题。