[Matlab]FIR滤波器设计:(线性相位滤波器的特性)

[Matlab]FIR滤波器设计:(线性相位FIR滤波器的特性)

​ FIR滤波器能够在保证幅度特性满足技术要求的同时,容易实现严格的线性相位特性,且FIR滤波器的单位抽样响应是有限长的,因而滤波器一定是稳定的,而且可以用快速傅里叶变换算法实现,大大提高了运算速率。

​ 同时只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,所以系统总能用因果系统来实现。但是FIR滤波器必须用很长的冲击响应滤波器才能很好的逼近瑞截至的滤波器,需要很大的运算量:而且要取得很好的衰减特性,需要较高的阶次。

线性相位FIR滤波器相位条件:
  • FIR滤波器具有第一类线性相位的充分必要条件如下:

    单位抽样响应 h ( n ) h(n) h(n)关于群延时 τ偶称对,即满足:

    h ( n ) = h ( N − 1 − n ) ( 0 < = n < = N − 1 ) h(n) = h(N-1-n) (0<=n<=N-1) h(n)=h(N1n)(0<=n<=N1)

    τ = ( N − 1 ) / 2 τ = (N-1)/2 τ=(N1)/2

​ 满足偶对称条件的FIR滤波器分别为I型线性相位滤波器和II型线性相位滤波器。

  • FIR滤波器具有第二类线性相位的充分必要条件如下:

    单位抽样响应 h ( n ) h(n) h(n)关于群延时 τ偶对称,即满足:

    h ( n ) = h ( N − 1 − n ) ( 0 < = n < = N − 1 ) h(n) = h(N-1-n) (0<=n<=N-1) h(n)=h(N1n)(0<=n<=N1)

    β = ± ( π / 2 ) β= ±(π/2) β=±(π/2)

    τ = ( N − 1 ) / 2 τ = (N-1)/2 τ=(N1)/2

    把满足奇对称条件的FIR滤波器分别为III型线性相位滤波器和IV型线性相位滤波器。

线性相位滤波器的分类:
  1. I型线性相位滤波器

    I型线性相位滤波器幅度函数和相位函数的特点:

    • 幅度函数对 τ = ( N − 1 ) / 2 τ = (N-1)/2 τ=(N1)/2偶对称,同时对 w = 0 , π , 2 π w= 0,π,2π w=0,π,2π也呈现出偶对称。
    • 相位函数为准确的线性相位。
  2. II型线性相位滤波器

    II型线性相位滤波器幅度函数和相位函数的特点:

    • w = π w= π w=π时, H ( π ) = 0 H(π)=0 H(π)=0,也就是说 H ( z ) H(z) H(z) z = − 1 z=-1 z=1处有必然一个零点。
    • H ( w ) H(w) H(w) w = π w=π w=π呈现奇对称,对 w = 0 , 2 π w= 0,2π w=0,2π成偶对称。
    • 相位函数的特点同I型线性相位滤波器
  3. III型线性相位滤波器

    III型线性相位滤波器幅度函数和相位函数的特点:

    • w = 0 , π , 2 π w= 0,π,2π w=0,π,2π时, H ( π ) = 0 H(π)=0 H(π)=0,也就是说 H ( z ) H(z) H(z) z = ± 1 z=±1 z=±1处有必然一个零点。
    • H ( w ) H(w) H(w) w = 0 , π , 2 π w= 0,π,2π w=0,π,2π呈现奇对称。
    • 相位函数的特点:既是准确的线性相位,有包括 π / 2 π/2 π/2的相移,所以又称为 π / 2 π/2 π/2移相器或者称正交变换网络。
  4. IV型线性相位滤波器

    IV型线性相位滤波器幅度函数和相位函数的特点:

    • w = 0 , π w= 0,π w=0,π时, H ( π ) = 0 H(π)=0 H(π)=0,也就是说 H ( z ) H(z) H(z) z = ± 1 z=±1 z=±1处有必然一个零点。
    • H ( w ) H(w) H(w) w = π w=π w=π呈现偶对称,对 w = 0 , 2 π w= 0,2π w=0,2π成奇对称。
    • 相位函数的特点:既是准确的线性相位,有包括 π / 2 π/2 π/2的相移,所以又称为 π / 2 π/2 π/2移相器或者称正交变换网络。
    • 相位函数的特点同III型线性相位滤波器
I型线性相位滤波器设计:

上述滤波器可以通过下面的matlab程序设计实现:

function [Hr,w,a,L]=hr_type1(h);
%计算所设计的1型滤波器的振幅响应
%Hr=振幅响应
%a=1型滤波器的系数
%L=Hr的阶次
%h=1型滤波器的单位冲击响应
M=length(h);
L=(M-1)/2;
a=[h(L+1) 2*h(L:-1:1)];
n=[0:1:L];
w=[0:1:500]'*2*pi/500;
Hr=cos(w*n)*a';

设计I型线性相位滤波器:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%I型线性相位滤波器设计:
clear;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=[-4 3 -5 -2  5 7 5 -2 -1 8 -3]
M=length(h);
n=0:M-1; 
[Hr,w,a,L]=hr_type1(h);
subplot(2,2,1);
stem(n,h); 
xlabel('n');
ylabel('h(n)');
title('脉冲响应')
grid on
subplot(2,2,3);
stem(0:L,a); 
xlabel('n');
ylabel('a(n)');
title('a(n)系数')
grid on
subplot(2,2,2); 
plot(w/pi,Hr);
xlabel('频率单位pi');ylabel('Hr');
title('I型幅度响应')
grid on
subplot(2,2,4);
pzplotz(h,1);
grid on

%在z平面上画出零极点分布图生产m文件存放当前文件夹
function pzplotz(b,a) 
%pzplotz(b,a)按给定系数向量b,a在z平面上画出零极点分布图
% b - 分子多项式系数向量
% a - 分母多项式系数向量
% a,b向量可从z的最高幂降幂排至z^0,也可由z^0开始,按z^-1的升幂排至z的最负幂.
N = length(a); 
M = length(b); 
pz = []; zz = []; 
if (N > M)      
zz = zeros((N-M),1); 
elseif (M > N)      
pz = zeros((M-N),1);  
end 
pz = [pz;roots(a)]; 
zz = [zz;roots(b)]; 
pzr = real(pz)'; 
pzi = imag(pz)'; 
zzr = real(zz)'; 
zzi = imag(zz)'; 
rzmin = min([pzr,zzr,-1])-0.5; 
rzmax = max([pzr,zzr,1])+0.5; 
izmin = min([pzi,zzi,-1])-0.5; 
izmax = max([pzi,zzi,1])+0.5; 
zmin = min([rzmin,izmin]); 
zmax = max([rzmax,izmax]); 
zmm=max(abs([zmin,zmax])); 
uc=exp(j*2*pi*[0:1:500]/500);
plot(real(uc),imag(uc),'b',[-zmm,zmm],[0,0],'b',[0,0],[-zmm,zmm],'b'); 
axis([-zmm,zmm,-zmm,zmm]);
axis('square');
hold on
plot(zzr,zzi,'bo',pzr,pzi,'rx');
hold on
text(zmm*1.1,zmm*0.95,'z-平面') 
xlabel('实轴');ylabel('虚轴');title('零极点图')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Kvvp70J-1573810752846)(G:\研究生\项目小组任务\笔记\第四周和第五周笔记\hr_tyoe1.bmp)]

II型线性相位滤波器设计:

上述滤波器可以通过下面的matlab程序设计实现:

function [Hr,w,b,L]=hr_type2(h)
%计算所设计的2型滤波器的振幅响应
%Hr=振幅响应
%b=2型滤波器的系数
%L=Hr的阶次
%h=2型滤波器的单位冲击响应
M=length(h);
L=M/2;
b= 2*h(L:-1:1);
n=[1:1:L];
n=n-0.5;
w=[0:1:500]'*2*pi/500;
Hr=cos(w*n)*b';


设计II型线性相位滤波器:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2型线性相位滤波器设计:
clear;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=[-3 2 -1 -2  5 6 5 -2 -1 1 -3]
M=length(h);
n=0:M-1; 
[Hr,w,b,L]=hr_type2(h);
subplot(2,2,1);
stem(n,h); 
xlabel('n');
ylabel('h(n)');
title('脉冲响应')
grid on
subplot(2,2,3);
stem(1:L,b); 
xlabel('n');
ylabel('a(n)');
title('a(n)系数')
grid on
subplot(2,2,2); 
plot(w/pi,Hr);
xlabel('频率单位pi');ylabel('Hr');
title('II型幅度响应')
grid on
subplot(2,2,4);
pzplotz(h,1);
grid on

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zLE7jQSZ-1573810752848)(G:\研究生\项目小组任务\笔记\第四周和第五周笔记\hr_type2.bmp)]

III型线性相位滤波器设计:

上述滤波器可以通过下面的matlab程序设计实现:

function [Hr,w,c,L]=hr_type3(h);
%计算所设计的3型滤波器的振幅响应
%Hr=振幅响应
%b=3型滤波器的系数
%L=Hr的阶次
%h=3型滤波器的单位冲击响应
M=length(h);
L=(M-1)/2;
c= [2*h(L+1:-1:1)];
n=[0:1:L];
w=[0:1:500]'*2*pi/500;
Hr=sin(w*n)*c';

设计III型线性相位滤波器:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%3型线性相位滤波器设计:
clear;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=[-3 1 -1 -2  5 6 5 -2 -1 1 -3]
M=length(h);
n=0:M-1; 
[Hr,w,c,L]=hr_type3(h);
subplot(2,2,1);
stem(n,h); 
xlabel('n');
ylabel('h(n)');
title('脉冲响应')
grid on
subplot(2,2,3);
stem(0:L,c); 
xlabel('n');
ylabel('c(n)');
title('c(n)系数')
grid on
subplot(2,2,2); 
plot(w/pi,Hr);
xlabel('频率单位pi');ylabel('Hr');
title('Ⅲ 型幅度响应')
grid on
subplot(2,2,4);
pzplotz(h,1);
grid on

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bP86rRzB-1573810752850)(G:\研究生\项目小组任务\笔记\第四周和第五周笔记\hr_type3.bmp)]

IV型线性相位滤波器设计:

上述滤波器可以通过下面的matlab程序设计实现:

function [Hr,w,d,L]=hr_type4(h); 
%计算所设计的4型滤波器的振幅响应
%Hr=振幅响应
%b=4型滤波器的系数
%L=Hr的阶次
%h=4型滤波器的单位冲击响应
M=length(h);
L=M/2;
d= 2*[h(L:-1:1)];
n=[1:1:L];
n=n-0.5;
w=[0:1:500]'*2*pi/500;
Hr=sin(w*n)*d';

设计IV型线性相位滤波器:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%4型线性相位滤波器设计:
clear;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=[-3 1 -1 -2  5 6 5 -2 -1 1 -3]
M=length(h);
n=0:M-1; 
[Hr,w,d,L]=hr_type4(h);
subplot(2,2,1);
stem(n,h); 
xlabel('n');
ylabel('h(n)');
title('脉冲响应')
grid on
subplot(2,2,3);
stem(1:L,d); 
xlabel('n');
ylabel('d(n)');
title('d(n)系数')
grid on
subplot(2,2,2); 
plot(w/pi,Hr);
xlabel('频率单位pi');ylabel('Hr');
title('Ⅳ型幅度响应')
grid on
subplot(2,2,4);
pzplotz(h,1);
grid on

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9TeMCcA-1573810752852)(G:\研究生\项目小组任务\笔记\第四周和第五周笔记\hr_type4.bmp)]

线性相位滤波器的零点特性:

线性相位滤波器的零点有以下四种结构:

  • 零点既不在实轴,也不在单位圆,四组零点是两种互为倒数的共轭对。
  • 零点在单位圆,但不在实轴,零点的共轭值就是其倒数。
  • 零点在实轴,但不在单位圆,此时零点是实数,它没有负共轭部分,只有倒数,倒数也在实轴上。
  • 零点既在实轴,也在单位圆,此时零点就有两种情况,即 z = 1 , z = − 1 z=1,z=-1 z=1,z=1,这时零点即是自己的负共轭,又是自己的倒数。
FIR线性相位滤波器设计程序 FIR Linear Phase Filter Design Program ============================================= 编译命令: gfortran *.for (i1mach.for中定义了4个标准输入输设备号:1输入:键盘;2输:显示;3打印;4信息:显示) 编译输: a.out/a.exe : 编译过程中会报告“警告”信息,可不理会 运行文件: a.out/a.exe < input.txt 输入采用归一化滤波器参数来设计滤波器。 编译环境: 在Windows中,程序使用MinGW环境编译。 在ubuntu linux中,程序使用build-essential环境编译,需要下载gfortran。 f2c是一个开源的fortran到c的转换软件,如果不想混合编程的话,可以用它。 ============================================= 这是1976年IEEE组织编辑版的《IEEE电气工程师 数字信号处理 FORTRAN程序库》的FORTRAN源码之一。整个程序库总计33个源码文件,将陆续上传。 在上传之前,我对程序的执行结果做了初步校对。感兴趣的朋友可以参照程序库的影印版进行全面校对,并欢迎反馈结果。 该程序库的影印版参见http://download.csdn.net/download/wuyijun2010/2718795。 一些程序跟程序库的打印稿略有入,主要是使用了一些小的函数,如i1mach.for等,并不对程序的完整性产生影响。 Fortran语言已经比较古老了。许多人不屑于使用它,认为不如C/C++好用。 其实,Fortran语言非常经典。使用Fortran编程,你大可不必关心诸如“指针、内存分配、数组越界”等等易错的问题。 学好Fortran编程,并不比学好C花更多时间,甚至更短。 最主要的,它是科学计算的主要程序语言。你不会拿一个算法的C程序去发表吧。 ============================================= 该书版后的三十五年后的今天,这些算法仍然占据着数字信号处理领域的重要位置。即使今天的处理器速度已经今非昔比,这些精炼高效的程序仍然非常有效,因为算法的实现方式直接关系到系统成本。 同期还版了由奥本海姆和谢弗合著的《数字信号处理》一书。今天这仍是一本关于数字信号处理方法的经典著作。作者在绪论中提到的应用几乎包括了现代信息处理的各个领域。一些领域的信号处理依靠传统模拟设备是不可能实现的。由于器件速度限制,当时的数字信号处理大多还不能实时实现。尽管如此,抱着数字化系统终将付诸现实的信念,人们积极地开始了对各种数字系统的研究工作。 今天,越来越多的数字信号处理系统不仅能够实时实现,而且已经成为了各种设备的核心。很多设备,只有在输入输端口,才进行数字到模拟之间的转换,内部则完全是数字处理系统。 因此,掌握数字信号处理知识和方法,应该是每个电子工程师必备的。 ============================================= 摘录前言 <1976年版> 在过去的十五年里,数字信号处理已极其活跃。 数字信号处理进展的重要方面是算法和这些算法程序的具体化。 本程序分为八章,每章部有专门的提要。 第一章中重点叙述了离散付里叶变换(DFT)并且给了各种快速付里叶变换(FFT)及其有关的算法。 第二章中包括了功率谱估计的周期图和相关法算法以及相关谱估计和互谱估计的算法。 第三章中是以快速FFT为基础的卷积程序。 第四章中给了有关线性预测信号处理技术的几种算法,包括自相关法,协方差法和格点法。 第五章中主要阐述了有限冲激响应(FIR)数字滤波器设计与综合。 第六章中给了有关无限冲激响应(IIR)数字滤波器设计程序的综合资料。 第七章里叙述了倒谱和同态算法,侧重于同态系统相位计算的难点。 第八章里给了有关内插和抽取的几个程序。 本书是在1976年初,由IEEE声学、语言学以及信号处理学会所组成的数字信号处理委员会,着手进行的一项计划的结晶。 本书所有程序符合下列要求: (1)必须包括全部用户文件。 (2)程序必须用FORTRAN语言,并且符合ANSI FORTRAN标准。 (3)编码应全部注释并已经排除错误,尽可能地清晰,明撩。 (4)编码应能传送,并且与机器无关。 (5)应提供有关输入,输综合调试实例。 程序的可移植性在这项计划里是很重要的目的。 特别注意了保证精度,明撩以及材料的一致性。 所有程序编码的列表,直接从中央收集计算机可读源材料中打印。 作者的文件手稿打入计算机系统之后,迸行最后的编辑和校正。 书中全部打印材料由计算机带动的照相排版机得到。 =============================================
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泸州月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值