2019/5/11 实验三 线性相位FIR滤波器的特性 05:31:30
一、实验目的 1. 进一步熟悉 MATLAB 编程; 2. 熟悉线性相位FIR滤波器的特性。 05:31:30
二、实验要求 1. 分析FIR滤波器的线性相位特性的优点; 2. 测试线性相位FIR滤波器的滤波特性; 05:31:30
三、实验内容 1. 分析FIR滤波器的线性相位特性的优点: 自己构造一个离散信号y(n); 计算其DFT频谱; 保持幅度谱信息不变,改造其相位信息: (1)原相位谱加上任意相位 (2)原相位谱加上线性相位 对改造后的频谱做IDFT,得到yy1(n)和yy2(n); 比较y(n)和yy1(n)、yy2(n),分析讨论结果。 05:31:30
通带 滤波器特性 任意相位谱 线性相位谱 05:31:30
filterPha = ??; %1)自己构造一个任意序列代表某个滤波器的相位谱 phaNew = pha + filterPha; y = ??; %自己构造离散信号y ffty = fft(y); amp = abs(ffty); pha = angle(ffty); filterPha = ??; %1)自己构造一个任意序列代表某个滤波器的相位谱 phaNew = pha + filterPha; cc = amp.*exp(i*phaNew); yy1 = ifft(cc); filterPha = ??; %2)自己构造一个线性序列代表某个滤波器的相位谱 yy2 = ifft(cc); %用plot(…)画图对比显示y,yy1,yy2; 序列的值在 [-pi,pi]之间 05:31:30
2. 测试线性相位FIR滤波器的滤波特性 四种类型的线性相位FIR传输函数 H(z): 1型:冲激响应h(n)长度为奇数,且偶对称 05:31:30
05:31:30
线性相位FIR传输函数 H(z)的零点分布: 1型: 在z=1和z=-1处有偶数个零点或没有零点; 2型: 在z=1处有偶数个零点或没有零点, 在z=-1处有奇数个零点; 3型: 在z=1和z=-1处有奇数个零点; 4型: 在z=1处有奇数个零点, 在z=-1处有偶数个零点或没有零点。 05:31:30
1型: 均可 2型: 不能设计高通F 3型: 不能设计低通、高通、带阻F 4型: 不能设计低通F 05:31:30
具体要求(分3步): 第1步: h=[-1 2 -3 6 -3 2 -1]; %自己构造h(n)序列 自己分别构造一个1,2,3,4型线性相位FIR滤波器的传输函数(序列)h(n),参照下面的程序,利用zplane()函数画出其对应的零点、极点分布图: h=[-1 2 -3 6 -3 2 -1]; %自己构造h(n)序列 a=[1,-0.5]; %当为FIR滤波器时,取a=1; zplane(h,a); 05:31:30
第2步: 参照下面的程序,利用freqz()函数画出滤波器传输函数的幅度谱和相位谱: M = 100; [H,w] = freqz(h,a,M); figure(1); plot(w,abs(H)); xlabel('\omega'); ylabel('Amplitude'); figure(2); plot(w,unwrap(angle(H))); xlabel('\omega');ylabel('Phase'); 05:31:30
第3步: 针对自己构造的1,2,3,4型线性相位FIR滤波器的滤波特性(低通/高通?),分别构造信号序列x(n)(有用信号+噪声),利用filter()函数测试滤波效果: y = filter(h, a, x); %滤波 05:31:30
nx = 100; x1 = [1:nx]; y1 = sin(x1*0.3); y2 y2 = 2.0*sin(x1*2.5); y = y1 + y2; z = fft(y); xcord = (2*pi/nx)*x1; plot(xcord, abs(z)); xlabel('\omega'); ylabel('Amplitude'); y2 y1 [H,w] = freqz(h,a,M); plot(w,abs(H)); (见第12页的程序) 05:31:30
05:31:30
yfiltered = filter(h, a, y); plot(x1,yfiltered/max(abs(H)),'g', x1,y2,'b:'); [H,w] = freqz(h,a,M); (见第12页的程序) 05:31:30