IIR级联型结构实现

IIR级联型结构实现


区别

级联型结构与直接型结构相比:
1.每一个级联部分中的反馈网络很少,易于控制有限字长效应带来的影响,且IIR滤波器的阶数一般较小。
2.便于准确实现数字滤波器的零/极点,每一级分开调整。
3.运算速度快;占用资源少(除法采用移位)。
4.若除法采用移位,每一级都需要用近似移位实现除法运算,与理想误差较大。


级联系数的求取

function [b0,B,A]=E5_51_dir2cas(b,a);
%变直接型IIR滤波器结构为级联形式
%b0=增益系数
%B=包含因子系数bk的K行3列矩阵
%A=包含因子系数ak的K行3列矩阵
%a=直接型分母多项式系数
%b=直接型分子多项式系数
%计算增益系数
bb=b;aa=a;

b0=b(1);b=b/b0;
a0=a(1);a=a/a0;
b0=b0/a0;
%将分子、分母多项式系数的长度补齐进行计算
M=length(b);N=length(a);
if N>M
    b=[b zeros(1,N-M)];
elseif M>N
    a=[a zeros(1,M-N)]; N=M;
else
    N=M;
end
%级联型系数矩阵初始化
K=floor(N/2);B=zeros(K,3);A=zeros(K,3);
if K*2==N
    b=[b 0];
    a=[a 0];
end
%根据多项式系数利用函数roots求出所有的根
%利用cplxpair进行按实部从小到大的成对排序
broots=cplxpair(roots(b));
aroots=cplxpair(roots(a));
%取出复共轭对的根变换成多项式系数即为所求
for i=1:2:2*K
    Brow=broots(i:1:i+1,:);
    Brow=real(poly(Brow));
    B(fix(i+1)/2,:)=Brow;
    
	Arow=aroots(i:1:i+1,:);
    Arow=real(poly(Arow));
    A(fix(i+1)/2,:)=Arow;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%滤波器级数为8的时候
%测试转换后前后的滤波器幅频响应
delta=[1,zeros(1,31)];
F1=filter(bb,aa,delta);
figure(1);plot(abs(fft(F1)));
% F21=filter(B(1,:),A(1,:),delta);
% F22=filter(B(2,:),A(2,:),F21);
% F23=filter(B(3,:),A(3,:),F22);
% F2=filter(b0*B(4,:),A(4,:),F23)
%测试量化前后的滤波器幅频响应
% [Qb1,Qa1]=E5_52_Qcoe(B(1,:),A(1,:),12)
% [Qb2,Qa2]=E5_52_Qcoe(B(2,:),A(2,:),12)
% [Qb3,Qa3]=E5_52_Qcoe(B(3,:),A(3,:),12)
% [Qb4,Qa4]=E5_52_Qcoe(b0*B(4,:),A(4,:),12)
% QF21=filter(B(1,:),A(1,:),delta);
% QF22=filter(B(2,:),A(2,:),QF21);
% QF23=filter(B(3,:),A(3,:),QF22);
% QF2=filter(B(4,:),A(4,:),QF23);
% figure(2);plot(abs(fft(QF2)));
%%%%%%%%%%%%%%%%%%%%%%比较F1、F2的值即可

为了避免字长效应的影响,一样需要先仿真,看每一级所需要的宽度。

实现时,每一级的实现和直接型一样,然后级联起来。

这里仅为参考学习记录,实际使用时不一定,matlab里面可以直接生成二阶结的级联型系数,具体还没实践过。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值