数字信号处理实验报告
姓 名: 学 号: 课程名称: 数字信号处理 指导老师: 刘峥
用FFT作谱分析
一、实验目的:
1、在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉MATLAB中的有关函数。
2、熟悉应用FFT对典型信号进行频谱分析的方法。熟悉FFT算法原理和FFT子程序的应用。
3、学习用FFT对连续信号和时域离散信号进行谱分析的方法。了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。
二、实验原理:
1、在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散傅里叶变换(DFT)。这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n)的长度为N时,它的DFT定义为:
反变换为:
有限长序列的DFT是其Z变换在单位圆上的等距采样,或者说是序列Fourier变换的等距采样,因此可以用于序列的谱分析。
FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。它是对变换式进行一次次分解,使其成为若干小点数的组合,从而减少运算量。常用的FFT是以2为基数的,其长度
。它的效率高,程序简
单,使用非常方便,当要变换的序列长度不等于2的整数次方时,为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。 2、在运用DFT进行频谱分析的过程中可能的产生混叠误差
序列的频谱是被采样信号频谱的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。
3、用FFT计算相关函数
两个长为N的实离散时间序列x(n)与y(n)的互相关函数定义为 :
rxy(m)??x(n)y(n?m)??x(n?m)y(n)?x(?m)?y(m)
n?0m?0N?1N?1rxy(n)的离散付里叶变换为: Rxy(k)?X?(k)Y(k),当x(n)?y(n)时,得到x(n)的自相关函数为:
0?k?N?1
jkm1N?1rxx(m)??x(n)x(n?m)??X(k)eNNk?0n?0
N?122?利用FFT求两个有限长序列线性相关的步骤(设x(n)长N1,y(n)长N2): (1)为了使两个有限长序列的线性相关可用其圆周相关代替而不产生混淆,选择周期N?2L≥N1?N2?1,以便使用FFT,将x(n),y(n)补零至长为N。
(2)用FFT计算X(k),Y(k),(3)Rxy(k)?X?(k)Y(k),0?k?N?1
0?k?N?1
(4)对Rxy(k)作IFFT;取后N?1项,得rxy(m)?N?1?m??1;取前N项,得rxy(m)0?m?N?1。
三、实验步骤
1、复习DFT的定义、性质和用DFT作谱分析的有关内容;
2、复习FFT算法原理与编程思想,并对照DIT-FFT运算流图和程序流图,读懂本实验提供的FFT子程序;
3、编制信号产生子程序,产生以下典型信号供谱分析用:
x1(n)?R4(n)?n?1,?x2(n)??8?n,?0,??4?n,?x3(n)??n?3,?0,?0?n?34?n?7其它n0?n?34?n?7其它n
x4(n)?cosx5(n)?sin?4n
?n 8
选择FFT的变换区间N为8和16 两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。 (4)对模拟周期信号进行谱分析
x6(t)?cos8?t?cos16?t?cos20?t
选择 采样频率Fs?64Hz,变换区间N=16,32,64 三种情况进行谱分析。 (5)令x(n)=x4(n)+x5(n),用FFT计算8点和16点离散傅里叶变换,
X(k)=DFT[x(n)]
并根据DFT的对称性,由X(k)求出X(k)=DFT[x4(n)] 和X(k)=DFT[x5(n)],并与上面结果进行比较。
四、实验程序
figure(1);
n=[0:15];k1=[0:7];k2=[0:15]; x1=(n<=3);
xk11=fft(x1,8); xk12=fft(x1,16);
subplot(1,3,1);stem(n,x1,'.');axis([0 16 0 2]);xlabel('n');ylabel('x1(n)');grid;
subplot(1,3,2);stem(k1,abs(xk11),'.');axis([0 8 0 4]);xlabel('k');ylabel('|X1(k)|');title('N=8');grid; subplot(1,3,3);stem(k2,abs(xk12),'.');axis([0 16 0 4]);xlabel('k');ylabel('|X1(k)|');title('N=16');grid;
figure(2);
n=[0:7];k1=[0:7];k2=[0:15]; x2=[1 2 3 4 4 3 2 1]; x3=[4 3 2 1 1 2 3 4]; xk21=fft(x2,8); xk22=fft(x2,16); xk31=fft(x3,8); xk32=fft(x3,16);
subplot(2,3,1);stem(n,x2,'.');axis([0 16 0 5]);xlabel('n');ylabel('x2(n)');grid;
subplot(2,3,2);stem(k1,abs(xk21),'.');axis([0 8 0
20]);xlabel('k');ylabel('|X2(k)|');title('N=8');grid;
subplot(2,3,3);stem(k2,abs(xk22),'.');axis([0 16 0
20]);xlabel('k');ylabel('|X2(k)|');title('N=16');grid; subplot(2,3,4);stem(n,x3,'.');axis([0 16 0 5]);xlabel('n');ylabel('x3(n)');grid;
subplot(2,3,5);stem(k1,abs(xk31),'.');axis([0 8 0
20]);xlabel('k');ylabel('|X3(k)|');title('N=8');grid; subplot(2,3,6);stem(k2,abs(xk32),'.');axis([0 16 0
20]);xlabel('k');ylabel('|X3(k)|');title('N=16');grid;
figure(3);
n1=[0:7];n2=[0:15];k1=[0:7];k2=[0:15]; x41=cos(pi/4*n1); xk41=fft(x41,8); x42=cos(pi/4*n2); xk42=fft(x42,16);
subplot(2,2,1);stem(n1,x41,'.');axis([0 8 -1 1]);xlabel('n');ylabel('x4(n)');grid;
subplot(2,2,2);stem(k1,abs(xk41),'.');axis([0 8 0
4]);xlabel('k');ylabel('|X4(k)|');title('N=8,wk=2*pi/8');grid; subplot(2,2,3);stem(n2,x42,'.');axis([0 16 -1 1]);xlabel('n');ylabel('x4(n)');grid;
subplot(2,2,4);stem(k2,abs(xk42),'.');axis([0 16 0
8]);xlabel('k');ylabel('|X4(k)|');title('N=16,wk=2*pi/16');grid;
figure(4);
n1=[0:7];n2=[0:15];k1=[0:7];k2=[0:15]; x51=sin(pi/8*n1); xk51=fft(x51,8); x52=sin(pi/8*n2); xk52=fft(x52,16);
subplot(2,2,1);stem(n1,x51,'.');axis([0 8 -1 1]);xlabel('n');ylabel('x5(n)');grid;
subplot(2,2,2);stem(k1,abs(xk51),'.');axis([0 8 0
10]);xlabel('k');ylabel('|X5(k)|');title('N=8,wk=2*pi/8');grid; subplot(2,2,3);stem(n2,x52,'.');axis([0 16 -1 1]);xlabel('n');ylabel('x5(n)');grid;
subplot(2,2,4);stem(k2,abs(xk52),'.');axis([0 16 0
10]);xlabel('k');ylabel('|X5(k)|');title('N=16,wk=2*pi/16');grid;
figure(5);
n1=[0:15];n2=[0:31];n3=[0:63];k1=[0:15];k2=[0:31];k3=[0:63]; x61=cos(8*pi*n1/64)+cos(16*pi*n1/64)+cos(20*pi*n1/64); xk61=fft(x61,16);
x62=cos(8*pi*n2/64)+cos(16*pi*n2/64)+cos(20*pi*n2/64);