手写的MATLAB dir2par函数
最近在学习数字滤波器的设计,有一道题是直接型滤波器转成并联型滤波器。
查到网上的dir2par函数还需要cplxcomp函数,才能计算。我手敲了全部代码发现效果并不好,于是自己手写了一个。
由于最近课业繁重,就不详细说了,主要说一下residuesz。
这个函数很厉害,大家可以使用doc residuesz查看它的文档。
我一直不是很喜欢help,它给出的帮助很少,而且matlab交互窗就那么大,看起来也不方便。文档的话有详细的使用方法,还有部分算法说明。看的同时也能提示英语水平 hhh。
residuez函数
这个函数说白了,就是将直接型的系统函数,分解成
很多个一阶项的相加,并联型就是将这些一阶项两两合并变成二阶项。然后就没有然后了……
当然这里需要考虑奇偶的问题,如果是奇数的话,就有一个一阶项不能合并。单独处理它就好了。
贴代码
function [C,B,A]=dir2par(b,a)
% 直接型转并联型
[r,p,C]=residuez(b,a);% 直接项 常数项
% 计算r/p的长度【两者长度相同】
% 若为奇数 会留下一个一阶项(全部为实数) 不能完全两两组合
% 若为偶数 则所有项两两组合
%% 初始化
N=length(r);
% 初始化B,A
% 3列代表二阶项