实验二(3) 快速傅立叶变换FFT及其应用
一、实验目的
1. 利用MATLAB的快速傅立叶变换来计算信号的离散傅立叶变换。 2. 利用MATLAB程序,理解进一步离散傅立叶变换的物理意义。 3. 利用MATLAB程序,理解快速卷积算法。
二、实验原理
在MATLAB中,使用函数fft可以很容易地计算有限长序列x(n)的离散傅立叶变换X[k]。此函数有两种形式,fft(x)计算序列x(n) 的离散傅立叶变换X(k),这里X(k)的长度与x(n)的长度相等。fft(x,L)计算序列x(n) 的L点离散傅立叶变换,其中L≥N。若L>N,在计算离散傅立叶变换之前,对x(n)尾部的L-N个值进行补零。同样,离散傅立叶变换序列X(k)的离散傅立叶逆变换x(n)用函数ifft计算,它也有两种形式。 (一)、基本序列的离散傅立叶变换计算
N点离散傅立叶变换的一种物理解释就是,X[k]是x(n)以N为周期的周期延拓序列的离散傅立叶级数系数X(k)的主值区间序列,即X(k)?X(k)RN(k)。例如序列
~~cos(n)RN(n),当N=16时,cos(n)RN(n)正好是cos(n)的一个周期,所以
888cos(n)RN(n)的周期延拓序列就是这种单一频率的正弦序列。而当N=8时,8cos(n)RN(n)正好是cos(n)的半个周期,cos(n)RN(n)的周期延拓就不再是单一频
888率的正弦序列,而是含有丰富的谐波成分,其离散傅立叶级数的系数与N=16时的差别很大,因此对信号进行谱分析时,一定要截取整个周期,否则得到错误的频谱。
???????
(二)、验证N点DFT的物理意义
假如x(n)非周期、有限长,则傅立叶变换存在,那么对X(ej?)在N个等间隔频率
?k=2πk/N, k=0,1,…,,N-1取样,则可得X(k)。 X(k)?X(?)??2?k/N?n????x(n)e??j2?kn/N 0?k?N?1
序列x(n)的N点DFT的物理意义是对X(ω)在[0,2π]上进行N点的等间隔采样。
(三)、利用FFT计算序列的线性卷积 直接计算线性卷积计算量大,并且计算机无法判断y(n)的长度,需要计算多少的y(n)值,若输入为无限长,就更无法计算,其运算量随长度成级数增长。由于可以利用FFT对DFT进行有效的计算,我们希望能够利用DFT来计算线性卷积。 设 x(n) 和 h(n) 是长度分别为M和N的有限长序列, 令 L=M+N-1,定义两个长度L的有限长序列:
x'(n)??
?x(n),0?n?M?1 (3.4.8)
M?n?L?1?0,?h(n),0?n?N?1 h'(n)?? (3.4.9)
0,N?n?L?1?通过对x(n) 和 h(n)补充零样本值得到上面两个序列。那么:
yl(n)?x(n)?h(n)?yc(n)?x'(n) h'(n) (3.4.10) 上面的过程如下图所示:
计算线性卷积也可以直接调用函数con来计算,因为MATLAB中的计时比较粗糙,所以只有M和N较大的时候,才能比较两种方法的执行时间快慢。
三、实验内容与步骤(选做一个)
1. 对复正弦序列x(n)?ejn8?RN(n),利用MATLAB程序求当N=16和N=8时的离散傅
立叶变换,并显示其图形。
1?e?j4?2.已知x(n)?R4(n),X(?)?, 绘制相应的幅频和相频曲线,并计算N=8和
1?e?j?N=16时的DFT。
四、实验仪器设备
计算机,MATLAB软件
五、实验注意事项
课前预先阅读并理解实验程序;
六、实验结果
k1=16; %序列长 N1=16;?t点数 n1=[0:1:15];
xn1=exp(j*pi/8*n1/k1); %抽样信号 xk1=dft(xn1,N1);
subplot(2,2,1); stem(n1,xn1); xlabel('t/T'); ylabel('x(n)'); subplot(2,2,2); stem(n1,xk1); grid;
xlabel('k'); ylabel('x(k)');
k2=8; %序列长 N2=8;?t点数 n2=[0:1:7];
xn2=exp(j*pi/8*n2/k2); %抽样信号 xk2=dft(xn2,N2); subplot(2,2,3); stem(n2,xn2); xlabel('t/T'); ylabel('x(n)'); subplot(2,2,4); stem(n2,xk2); grid;
xlabel('k'); ylabel('x(k)');
实验三 基于MATLAB的IIR数字滤波器设计
一、实验目的
1. 进一步熟悉IIR数字滤波器的理论知识。
2. 熟悉与IIR数字滤波器设计有关的MATLAB函数。
3 . 学会通过MATLAB,利用脉冲响应不变法和双线性变换法设计IIR数字滤波器,加深对数字滤波器的常用指标和设计过程的理解。
二、实验原理
(一)、低通滤波器的常用指标:
1??P?G(ej?)?1??P,for???P
G(ej?)??S,for?S????
通带边缘频率:?p,阻带边缘频率:?s ,
通带起伏:?p,通带峰值起伏: ?p??20log10(1??p)[dB],阻带起伏:?s 最小阻带衰减:?S??20log10(?s)[dB]。
(二)、IIR数字滤波器设计
目前,设计IIR数字滤波器的通用方法是先设计相应的低通滤波器,然后再通过双线性变换法和频率变换得到所需要的数字滤波器。模拟滤波器从功能上分有低通、高通、带通及带阻四种,从类型上分有巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器以及贝塞尔滤波器等。 1、利用模拟滤波器设计IIR数字低通滤波器的步骤。
(1)确定数字低通滤波器的技术指标:通带截止频率ωp、通带衰减αp、阻带截止频率ωs、阻带衰减αs。
(2)将数字低通滤波器的技术指标转换成模拟低通滤波器的技术指标。
脉冲响应不变法: ???T
21双线性变换法:
??tan(?)T2
(3)按照模拟低通滤波器的技术指标设计模拟低通滤波器。
(4)将模拟滤波器Ha(s),从s平面转换到z平面,得到数字低通滤波器系统函数H(z)。
2、下面给出与IIR数字滤波器设计有关的MATLAB文件。
(1)buttord.m
用来确定数字低通或模拟低通滤波器的阶次,其调用格式分别是 a. [N,Wn]=buttord(Wp,Ws,Rp,Rs) b. [N,Wn]=buttord(Wp,Ws,Rp,Rs,’s’)
格式a对应数字滤波器,式中Wp,Ws分别是通带和阻带的截止频率,实际上它们是归一化频率,其值在0-1之间,1对应π(即对π的归一化)。Rp,Rs分别是通带和阻带衰减,单位为dB。N是求出的相应低通滤波器的阶次,Wn是求出的3dB频率。
格式b对应模拟滤波器,式中各个变量的含义和格式a相同,但Wp,Ws及Wn是模拟角频率,单位为rad/s。
(2)buttap.m
用来设计模拟低通原型(归一化)滤波器Ha(p),其调用的格式为 [z , p, k]=buttap(N)
N是欲设计的低通原型(归一化)滤波器的阶次,z, p和k分别是设计出Ha(p)的极点、零点及增益。
(3)lp2lp.m
将模拟低通原型(归一化)滤波器Ha(p)转换为实际的低通滤波器Ha(s)。(去归一化),其调用格式为:
[B,A]=lp2lp(b,a,Wn)
b,a分别是模拟低通原型滤波器Ha(p)的分子、分母多项式的系数向量,其中B,A是去归一化后Ha(s) 的分子、分母多项式的系数向量, Wn为截止频率。
(4)bilinear.m
实现双线性变换,即由模拟滤波器Ha(s)得到数字滤波器H(z)。其调用格式是: [Bz,Az]=bilinear(B,A,Fs)
B,A是去归一化后Ha(s) 的分子、分母多项式的系数向量,Bz,Az是H (z) 的分子、分母多项式的系数向量, Fs是抽样频率。 (4)impinvar.m
由脉冲响应不变法将模拟滤波器Ha(s)转换为数字滤波器H(z)。其调用格式是: [Bz,Az]= impinvar(B,A,Fs)
B,A是去归一化后Ha(s) 的分子、分母多项式的系数向量,Bz,Az是H (z) 的分子、分母多项式的系数向量, Fs是抽样频率。
(5) butter.m
用来直接设计巴特沃斯数字滤波器(双线性变换法),实际上它把buttord.m,buttap.m,lp2lp.m及bilinear.m等文件都包含进去,从而使设计过程更简捷,其调用格式为: a. [B,A]=butter(N, Wn)
b. [B,A]=butter(N,Wn,‘s’)
格式a是设计低通数字滤波器,格式b是设计低通模拟滤波器。B,A是H (z) 的分子、分母多项式的系数向量,Wn是截止频率。
三、实验内容与步骤 以下选做一个
1. 设计MATLAB程序,采用脉冲响应不变法设计一个巴特沃斯低通数字滤波器,其通带
上限临界频率为400Hz,阻带临界频率为600Hz,抽样频率是1000Hz,在通带内的最大衰减为0.3dB, 阻带内的最小衰减为60dB,并绘出幅频特性曲线。
2. 设计MATLAB程序,采用双线性变换法设计一个巴特沃斯低通数字滤波器,要求在通
带[0,0.2π]内衰减不大于3dB, 在阻带[0.6π,π]内衰减不小于40dB,并绘出幅频特性曲线。
四、实验仪器设备
计算机,MATLAB软件
五、实验要求
根据要求独立编程设计,并根据程序运行结果写出滤波器的系统函数
六、实验结果