采用iirgrpdelay函数设计全通滤波器校正系统相位

函数目标:根据描述的群延时设计全通滤波器对指定区间的相位进行校正。
iirgrpdelay函数共有以下7种用法:
1、[num,den] = iirgrpdelay(n,f,edges,a)
2、[num,den] = iirgrpdelay(n,f,edges,a,w)
3、[num,den] = iirgrpdelay(n,f,edges,a,w,radius)
4、[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p)
5、[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens)
6、[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden)
7、[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden,tau)
拿第2个[num,den] = iirgrpdelay(n,f,edges,a) 来说:
输出:num是IIR滤波器分子,den是IIR滤波器分母
输入:
n是滤波器阶数,f是角频率范围矢量如0.3:0.001:0.6
edges是通带范围如[0.3,0.6],a是描述的群延迟差如max(g)-g
下面是例子:

clc;clear all;close all;
load B_S;S=B_S;
load B_G;G=B_G;
H = dfilt.df2sos(B_S,B_G);
F=0.2:0.001:0.9;
g = grpdelay(H,F,2);   % Equalize the passband(g给0.2~0.9的群时延)
Gd = max(g)-g;          %Gd为需要补偿的群时延量
% Design the allpass delay equalizer
[num,den] = iirgrpdelay(20, F,[0.2 0.9], Gd);      %返回20阶全通滤波器,num和den是系数。
[GdA,w] = grpdelay(num,den);                    %计算全通滤波器的群时延
% 画图
He1=dfilt.df2(num,den);
He_all=dfilt.cascade(H,He1);
grpdelay(H)
grpdelay(He1)
grpdelay(He_all)  

实验结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看见校正后的系统相频响应接近一条直线,近似线性,校正效果非常好。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值