1、实验一 序列的离散傅立叶变换一、 实验目的1、 1.在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉FFT子程序;2、 熟悉应用FFT对典型信号进行频谱分析的方法;3、 了解应用FFT进行信号频谱分析过程中可能出现的问题以便在实际中正确应用FFT;4、 熟悉应用FFT实现两个序列的线性卷积的方法。5、 初步了解用周期图法作随机信号谱分析的方法。二、 实验原理:1、在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散Fouier变换(DFT)。 这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n)的长度为N时,它的DFT
2、定义为:反变换为ie:有限长序列的DFT是其Z变换在单位圆上的等距采样,或者是序列Fourier变换的等距采样,因此可以用于序列的谱分析。FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。它是对变换式进行一次次分解,使其成为若干小点数的组合,从而减少运算量。常用的FFT是以2为基数的,其长度 N=2L,它的效率高,程序简单使用非常方便,当要变换的序列长度不等于2的整数次方时,为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。2、FFT算法调用格式是X= fft(x)或 X=fft(x,N)对前者,若x的长度是2的整数次幂,则按该长度实现
3、x的快速变换,否则,实现的是慢速的非2的整数次幂的变换;对后者,N应为2的整数次幂,若x的长度小于N,则补零,若超过N,则舍弃N以后的数据。Ifft的调用格式与之相同。3、窗函数加窗的目的:用有限长序列的频谱来逼近无限长序列的频谱加窗的影响:1. 分辨率下降:加窗使能量扩散开来,大部分能量集中在主瓣,而旁瓣能量较小2. 频谱泄露:若信号x(n)具有能量较强的频率分量,那么由它所产生的旁瓣可能会掩盖能量较弱的频率分量窗函数的选择原则:1. 主瓣带宽要尽可能小,以获得较陡的过渡带2. 与主瓣的幅度相比,旁瓣应尽可能的小,以减少通带内、阻带内波动的最大振幅常用的窗函数:窗口函数主瓣宽度第一旁瓣比主瓣
4、低(dB)矩形窗4/N13三角形窗8/N27汉宁窗8/N32哈明窗8/N43布莱克曼窗12/N58三、实验内容有限长序列x(n)的DFT,利用FFT进行谱分析。已知:1. 取x(n)(n=0:511)矩形窗时,画出x(n)的频谱X(k)的幅度;2. 取x(n)(n=0:511)汉明窗时,画出x(n)的频谱X(k)的幅度;3. 取x(n)(n:02047)汉明窗时,画出x(n)的频谱X(k)的幅度。四、实验步骤1. 复习 DFT的定义,性质和应用2. 熟悉MATLAB语言的命令窗口、编程窗口和图形窗口的使用3. 编写实验所用程序4. 按实验内容上机实验,并进行实验结果分析5. 写出完整的实验报告
5、,并将程序附在后面五、实验源代码:序列x(n)的时域波形源代码:clc;N=512;n=0:N-1;xn=(0.001*cos(0.45*pi*n)+sin(0.3*pi*n)-cos(0.302*pi*n-pi/4);plot(n,xn)xlabel(n); ylabel(x(n); title(x(n)序列);题1源代码:clc;N=512;n=0:N-1;rw=boxcar(N);x=(0.001*cos(0.45*pi*n)+sin(0.3*pi*n)-cos(0.302*pi*n-pi/4);xn=x.*rw;y=fft(xn);stem(n,abs(y),.);xlabel(k);
6、 ylabel(|X(k)|); title(x(n)取矩形窗512点FFT);题2源代码:clc;N=512;n=0:N-1;ham=hamming(N);x=(0.001*cos(0.45*pi*n)+sin(0.3*pi*n)-cos(0.302*pi*n-pi/4);xn=x.*ham;y=fft(xn);stem(n,abs(y),.)xlabel(k); ylabel(|X(k)|); title(x(n)取汉明窗512点FFT);题3源代码:clc;N=2048;n=0:N-1;ham=hamming(N);x=(0.001*cos(0.45*pi*n)+sin(0.3*pi*n
7、)-cos(0.302*pi*n-pi/4);xn=x.*ham;y=fft(xn);stem(n,abs(y),.)xlabel(k); ylabel(|X(k)|); title(x(n)取汉明窗2048点FFT);六、实验结果图X(n)的时域波形:题1图:题2图:题3图: 七、实验心得通过这次实验,我对离散序列的傅里叶变换特别是MATLAB的使用有了更深一步的了解,以前对绘图很不熟悉,因此对实验的实现很困难,通过查资料,掌握了基本方法,当然,FFT算法的原理本身也很重要,这才是本次实验的灵魂,但是,老师平时在这方面投入较大,因此问题不大。实验二 用双线性变换法设计IIR数字滤波器一、实验
8、目的(1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法;(2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。(3)掌握IIR数字滤波器的MATLAB实现方法。(4) 通过观察滤波器输入输出信号的时域波形及其频谱,建立数字滤波的概念。二、实验内容及步骤内容:1. 产生三路抑制载波调幅复合信号,绘出时域波形和幅频特性曲线: 三路的指标如下: 第一路:载波频率fc=250Hz,单频信号频率fo=25Hz; 第二路:载波频率fc=500Hz,单频信号频率fo=100Hz; 第三路:载波频率fc
9、=1000Hz,单频信号频率fo=200Hz; 采样频率Fs=1/Ts =10kHz.信号长度N=1600.2. 用双线性变换法设计一个椭圆低通IIR滤波器,滤波器设计指标参数为: 通带截止频率fp=280Hz,通带最大波动Rp=0.1dB 阻带截止频率fs=450Hz,阻带最小衰减As=60dB 采样频率Fs=1/Ts=10kHz. 信号长度N=1600.3. 以0.05为采样间隔,绘出数字滤波器在频率区间0,上的幅值响应曲线。4. 应用所设计的椭圆低通IIR滤波器滤波分离出第一路抑制载波调幅信号。绘出滤波器分离出的第一路抑制载波调幅信号的时域波形和幅频特性曲线。观察总结滤波作用与效果。 步
10、骤:1参见教材实验四2用MATLAB语言编写仿真滤波程序,完成实验内容143写出完整的实验报告三、实验源代码题1源代码:N=1600;Fs=10000;T=1/Fs;Tp=N*T;t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;fc1=250;fo1=25;fc2=500;fo2=100;fc3=1000;fo3=200;xt1=cos(2*pi*t*fc1).*cos(2*pi*t*fo1);xt2=cos(2*pi*t*fc2).*cos(2*pi*t*fo2);xt3=cos(2*pi*t*fc3).*cos(2*pi*t*fo3);st=xt1+xt2+xt3;fxt=fft
11、(st,N);%以下为绘图部分subplot(2,1,1)plot(t,st);grid;xlabel(t/s);ylabel(s(t);axis(0,Tp/8,min(st),max(st);title(a) s(t)的波形)subplot(2,1,2)stem(f,abs(fxt)/max(abs(fxt),.);grid;title(b) s(t)的频谱)axis(0,Fs/5,0,1.2);xlabel(f/Hz);ylabel(幅度)题2、3源代码:Fs=10000;Ts=1/Fs;fp=280;fs=450;wpz=fp*2*pi/Fs; wsz=fs*2*pi/Fs;wp=2/T
12、s*tan(wpz/2);ws=2/Ts*tan(wsz/2);rp=0.1;as=60;N,wc=ellipord(wp,ws,rp,as,s)B,A=ellip(N,rp,as,wc,s);Bz,Az=bilinear(B,A,Fs)H,w=freqz(Bz,Az,1000);plot(w,20*log(abs(H)/max(abs(H)xlabel(w/pi);ylabel(幅度/dB);title(椭圆低通IIR滤波器幅值响应曲线);axis(0,1,-250,5)grid题4源代码:%产生信号N=1600;Fs=10000;T=1/Fs;Tp=N*T;t=0:T:(N-1)*T;k=
13、0:N-1;f=k/Tp;fc1=250;fo1=25;fc2=500;fo2=100;fc3=1000;fo3=200;xt1=cos(2*pi*t*fc1).*cos(2*pi*t*fo1);xt2=cos(2*pi*t*fc2).*cos(2*pi*t*fo2);xt3=cos(2*pi*t*fc3).*cos(2*pi*t*fo3);st=xt1+xt2+xt3;%实现滤波Fs=10000;Ts=1/Fs;fp=280;fs=450;wpz=fp*2*pi/Fs; wsz=fs*2*pi/Fs;wp=2/Ts*tan(wpz/2);ws=2/Ts*tan(wsz/2);rp=0.1;a
14、s=60;N,wc=ellipord(wp,ws,rp,as,s)B,A=ellip(N,rp,as,wc,s);Bz,Az=bilinear(B,A,Fs);H,w=freqz(Bz,Az,1000);y1t=filter(Bz,Az,st);subplot(2,1,1);plot(t,y1t)grid;xlabel(t/s);ylabel(y1t(t);title(a) y1t(t)的波形)subplot(2,1,2);fxt=fft(y1t,1600);stem(f,abs(fxt)/max(abs(fxt),.);grid;title(b) y1t(t)的频谱)axis(0,Fs/5,0,1.2);xlabel(f/Hz);ylabel(幅度)三、 实验结果图题1图题2、3图:题4图:四、 实验心得通过这次实验,我对IIR数字滤波器设计特别是MATLAB的使用有了更深一步的了解,以前对绘图很不熟悉,因此对实验的实现很困难,通过查资料,掌握了基本方法,当然,滤波器的设计也很重要,这才是本次实验的灵魂,平时关于滤波器的设计理论及实现方法老师讲的比较透彻,因此,所学知识在实验中得到了很好的运用。