MATLAB 数字滤波器 直接型转并联型 | 您所在的位置:网站首页 › matlab传函串联 › MATLAB 数字滤波器 直接型转并联型 |
手写的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列代表二阶项 A=zeros(ceil(N/2),3);B=A; %% 求解B,A k=1;% 遍历过程中R和P的下标 if mod(N,2)==1 % 为奇数 for i=1:2:N-1 % 将零点和极点分别两两组合,最后剩一个 % r(1)和r(2),r(3)和r(4)……以此类推 r(N-2)和r(N-1) [B(k,:),A(k,:)]=residuez([r(i),r(i+1)],[p(i),p(i+1)],0); % 上一行代码的目的就是两两合并,然后分子存B,分母存A(注意是三个参数) k=k+1; end % 注意一阶项的处理,doc residuez可以看到极点 z^-1项的系数带负号 % 要把这个负号重新添上 % 补最后一项 一阶项 B(end,:)=[r(end),0,0]; A(end,:)=[1,-p(end),0]; else for i=1:2:N % 将零点和极点分别两两组合,最后剩一个 % r(1)和r(2),r(3)和r(4)……以此类推 r(N-2)和r(N-1) [B(k,:),A(k,:)]=residuez([r(i),r(i+1)],[p(i),p(i+1)],0); k=k+1; end end end中间那个三参数的使用可以看文档。 Best wishes! Happy everyday~ |
CopyRight 2018-2019 实验室设备网 版权所有 |