数字信号处理实验报告实验一:用 FFT 做谱分析 一、 实验目的1、进一步加深 DFT 算法原理和基本性质的理解。
2、熟悉 FFT 算法原理和 FFT 子程序的应用。
3、学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用 FFT 。
二、实验原理用FFT 对信号作频谱分析是学习数字信号处理的重要内容。
经常需要进行谱分析的信号是模拟信号和时域离散信号。
对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。
频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是2π/N ≤D 。
可以根据此时选择FFT 的变换区间N 。
误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。
如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号的频谱时,首先要按照采样定理将其变成时域离散信号。
如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
三、实验内容和步骤对以下典型信号进行谱分析:⎪⎩⎪⎨⎧≤≤-≤≤-=⎪⎩⎪⎨⎧≤≤-≤≤+==其它nn n n n n x 其它nn n n n n x n R n x ,074,330,4)(,074,830,1)()()(32414()cos4x n n π=5()cos(/4)cos(/8)x n n n ππ=+6()cos8cos16cos20x t t t t πππ=++对于以上信号,x1(n)~x5(n) 选择FFT 的变换区间N 为8和16 两种情况进行频谱分析。
分别打印其幅频特性曲线。
并进行对比、分析和讨论;;x6(t)为模拟周期信号,选择 采样频率Hz F s 64 ,变换区间N=16,32,64 三种情况进行谱分析。
分别打印其幅频特性,并进行分析和讨论。
四、实验代码如下所示:clear; %清除变量close all; %关闭全部绘图窗口b=menu('请选择信号x1(n)--x6(n)','x1(n)=R4(n)','x2(n)=[1 2 3 4 4 3 2 1]',... 'x3(n)=[4 3 2 1 1 2 3 4]','x4(n)=cos(npi/4)','x5(n)=sin(npi/8)',... 'x6(n)=cos(8pit)+cos(16pit)+cos(20pit)','Exit'); i=0; A=[8,16,32,64];while(b~=7) %当选择EXIT 时,返回值7,则退出循环 if b==6m=menu('请选择FFT 变换区间长度N','N=16','N=32','N=64'); N=A(m+1); fs=64; n=0:(N-1);x=cos(8*pi*n/fs)+cos(16*pi*n/fs)+cos(20*pi*n/fs); elsem=menu('请选择FFT 变换区间长度N','N=8','N=16','N=32'); N=A(m); n=0:(N-1); if b==1x=[1,1,1,1,0,0,0,0,zeros(1,N-8)]; elseif b==2x=[1,2,3,4,4,3,2,1,zeros(1,N-8)]; elseif b==3x=[4,3,2,1,1,2,3,4,zeros(1,N-8)]; elseif b==4x=cos(n*pi/4); elseif b==5x=sin(n*pi/8); end end%先画出信号源图 i=i+1;figure(i); %创建绘图窗口 subplot(2,2,1); %指定1号子图 xlabel('n'); %标记X 坐标 stem(n,x,'.r'); ylabel('x(n)');title(['x',num2str(b),'(n)的波形']);%进行FFTf=fft(x,N);%再画出FFT波形subplot(2,2,3);stem(n,abs(f),'.b');xlabel('k');ylabel('|X(k)|');title(['x',num2str(b),'(n)的N=',num2str(N),'点FFT']);b=menu('请选择信号x1(n)--x6(n)','x1(n)=R4(n)','x2(n)=[1 2 3 4 4 3 2 1]',...'x3(n)=[4 3 2 1 1 2 3 4]','x4(n)=cos(npi/4)','x5(n)=sin(npi/8)',...'x6(n)=cos(8pit)+cos(16pit)+cos(20pit)','Exit');endclose all;五、实验结果图及分析1、实验结果图分析:(1)x1(n)的波形如图1-1、图1-2和图1-3所示,由3张图可知道,N值越大,频率分辨率越高。
(2)x2(n)的波形如图1-4、图1-5和图1-6所示,由3张图可知道,N值越大,频率分辨率越高。
(3)x3(n)的波形如图1-7、图1-8和图1-9所示,由3张图可知道,N值越大,频率分辨率越高。
(4)x4(n)的波形如图1-10、图1-11和图1-12所示。
根据参数可得出X4(t)的频率 f=8Hz,当N=8、16、32时,频率分辨率为F=f s/N=8Hz、4Hz、2Hz,因此在FFT图里分别在N=1、2、4有高幅值,因为截取的为周期序列的整数倍,所以所得出的谱正确。
(5)x5(n)的波形如图1-13、图1-14和图1-15所示。
根据参数可得出X5(t)的频率 f=4Hz。
当N=8时,频率分辨率F0=f s/N=8Hz,因为截取的不是为周期序列的整数倍,而且频率分辨率不够,所得出的谱有较大的误差,所以FFT图包含一些频率分量,不能清楚看清原信号的频率f。
当N=16及32时,频率分辨率F0=f s/N=4Hz、2Hz,因此在FFT图里在N=1、2有高幅值,因为截取的为周期序列的整数倍,所以所得出的谱正确。
(6) x6(n)的波形如图1-16、图1-17和图1-18所示。
根据参数可得出X6(t)里包含3个频率,分别为f1=4,f2=8,f3=10。
当N=16,频率分辨率F0=f s/N=4Hz,因为截取的不是x6里各周期序列的整数倍,所得出的谱有频谱泄漏,FFT图里可以看出信号cos(8pit)和cos(16pit)的频率f1=4,f2=8(在点N=1,2处有较大的幅值),而且频率分辨率不够高,不能分辨开第三个信号cos(20pit)的频率f3。
当N=32,频率分辨率F=f s/N=2Hz,因此在FFT图里的点N=2有高幅值,在N=4有高幅值 N=5也有高幅值。
因为截取的为周期序列的整数倍,所以所得出的谱正确。
当N=64,频率分辨率F=f s/N=1Hz,因此在FFT图里的点N=4有高幅值,在N=8有高幅值 N=10也有高幅值。
因为截取的为周期序列的整数倍,所以所得出的谱正确。
变换区间N=64 时频谱幅度是变换区间N=32 时2倍,这种结果正好验证了用FFT 对中期序列谱分析的理论。
2、误差分析误差产生的原因:(1)对周期序列的截取不当,造成频谱泄漏(2)抽样点数N太少,频率分辨率不够用FFT做谱分析时参数的选择:(1)抽样频率要满足奈奎斯特准则,不小于信号最高频率的2倍(2)在抽样频率一定的情况下,抽样点数N要适当。
太小会造成频率分辨力不够,太大会造成数据冗余。
对周期序列,最好截取周期的整数倍进行谱分析图1-1:x1(n)的波形:N=8图1-2:x1(n)的波形N=16图1-3:x1(n)的波形N=32图1-4:x2(n)的波形N=8图1-5:x2(n)的波形:N=16图1-6:x2(n)的波形N=32图1-7:x 3(n)的波形N=8图1-8:x 3(n)的波形N=16图1-9:x 3(n)的波形N=32图1-10:x 4(n)的波形N=8图1-11:x 4(n)的波形N=16图1-12:x 4(n)的波形N=32图1-13:x 5(n)的波形N=8图1-14:x 5(n)的波形N=16图1-15:x 5(n)的波形N=32图1-16: x 6(n)的波形N=16图1-17: x 6(n)的波形N=32图1-18: x 6(n)的波形N=64实验二:用双线性变换法设计 IIR 数字滤波器一、实验目的1、熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。
2、掌握数字滤波器的计算机仿真方法。
二、实验内容及步骤1、用双线性变换法设计一个butterworth 低通IIR 数字滤波器。
设计指标参数为:在通带内频率低于0.2π时,最大衰减小于1dB ,在阻带内[0.3π,π]频率区间上,最小衰减大于15dB 。
2、打印出数字滤波器在频率区间[0,π]上的幅频响应特性曲线。
3、运用MATLAB 产生两个正弦信号,信号频率为50Hz 和400Hz ,采样频率为1000Hz 。
两个正弦信号相叠加为输入信号y(t)。
设计一滤波器,保留源信号中50Hz 的低频信号,对y(t)信号进行滤波。
观察滤波前后信号的频谱特性,评价滤波器效果。
三、实验步骤1、双线性变换法设计 butterworth 低通 IIR 数字滤波器复习有关butterworth 模拟滤波器设计和用双线性变换法设计IIR 数字滤波器的内容,用双线性变换法设计数字滤波器系统函数()z H 。
其中满足本实验要求的数字滤波器系统函数为:()()()()()212121612155.09044.013583.00106.117051.02686.1110007378.0-------+-+-+-+=zz z z z zz z H ()z H k k ∏==31(2.1)式中: ()()3211212121,,,k zC z B z z A z H k k k =--++=---- (2.2)2155.09044.03583.00106.17051.02686.109036.0332211-==-==-===C B C B C B A ,,,根据设计指标,调用MATLAB 信号处理工具箱buttord 和butter ,也可以得到()z H 。