数字信号处理实验二用FFT作谱分析.docx
《数字信号处理实验二用FFT作谱分析.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验二用FFT作谱分析.docx(19页珍藏版)》请在冰豆网上搜索。
数字信号处理实验二用FFT作谱分析
西安郵電學院
数字信号处理课内实验
报告书
系部名称
:
计算机系
学生姓名
:
常成娟
专业名称
:
电子信息科学与技术
班级
:
0603
学号
:
时间
:
2008-11-23
实验二:
用FFT作谱分析
一、实验目的:
(1)进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质)。
(2)熟悉FFT算法原理和FFT子程序的应用。
(3)学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二、实验步骤:
(1)复习DFT的定义、性质和用DFT作谱分析的有关内容。
(2)复习FFT算法原理与编程思想,并对照DIT—FFT运算流图和程序框图,读懂本实验提供的FFT子程序。
(3)编制信号产生子程序,产生以下典型信号供谱分析用:
=R4(n)
=cos(pi/4*n)
=sin(pi/8*n)
=cos(pi*8*t)+sin(pi*16*t)+cos(20*pi*t)
应当注意,如果给出的是连续信号xa(t),则首先要根据其最高频率确定采样速率fs以及由频率选择采样点数N,然后对其进行软件采样(即计算x(n)=xa(nT),0<=n<=N-1),产生对应序列x(n)。
对信号x6(t),频率分辨率的选择要以能分辨开其中的三个频率对应的谱线为准则。
对周期序列,最好截取周期的整数倍进行分析,否则有可能产生较大的分析误差。
请实验者根据DFT的隐含周期性思考这个问题。
(4)编写主程序。
下图给出了主程序框图,供参考。
本实验提供FFT子程序和通用绘图子程序。
三、上机实验内容
(1)对2中所给出的信号逐个进行谱分析。
下面给出针对各信号的FFT变换区间N以及对连续信号
的采样频率fs。
:
N=8,16
:
fs=64(hz),N=16,32,64
实验结果:
1.
=R4(n)
原程序:
n=[0:
7];
x=[11110000]
f1=fft(x,8)
f2=fft(x,16)
subplot(2,2,1)
stem(n,x);
axis([0802])
xlabel('n')
ylabel('x1(n)')
title('x1的波形')
subplot(2,2,4)
k=[0:
15]
stem(k,abs(f2));
axis([01605])
xlabel('k')
ylabel('|x1(k)|')
title('x1(n)的8点fft')
subplot(2,2,3)
k=[0:
7]
stem(k,abs(f1));
axis([01005])
xlabel('k')
ylabel('|x1(k)|')
title('x1(n)的8点fft')
得到的波形图如下:
2.
原程序:
n=[0:
7];
x=[12344321]
f1=fft(x,8)
f2=fft(x,16)
subplot(2,2,1)
stem(n,x);
axis([0804])
xlabel('n')
ylabel('x2(n)')
title('x2的波形')
subplot(2,2,4)
k=[0:
15]
stem(k,abs(f2));
axis([016020])
xlabel('k')
ylabel('|x2(k)|')
title('x2(n)的8点fft')
subplot(2,2,3)
k=[0:
7]
stem(k,abs(f1));
axis([010020])
xlabel('k')
ylabel('|x2(k)|')
title('x2(n)的8点fft')
波形图:
3.
原程序:
n=[0:
7];
x=[43211234]
f1=fft(x,8)
f2=fft(x,16)
subplot(2,2,1)
stem(n,x);
axis([0804])
xlabel('n')
ylabel('x3(n)')
title('x3的波形')
subplot(2,2,4)
k=[0:
15]
stem(k,abs(f2));
axis([016020])
xlabel('k')
ylabel('|x3(k)|')
title('x3(n)的8点fft')
subplot(2,2,3)
k=[0:
7]
stem(k,abs(f1));
axis([08020])
xlabel('k')
ylabel('|x3(k)|')
title('x3(n)的8点fft')
4.
=cos(pi/4*n)
原程序:
n=[0:
7];
x=cos(0.25*pi*n)
f1=fft(x,8)
subplot(2,2,1)
stem(n,x);
axis([08-44])
xlabel('n')
ylabel('x4(n)')
title('x4的波形')
n=[0:
15]
x=cos(0.25*pi*n)
f2=fft(x,16)
subplot(2,2,2)
stem(n,x);
axis([016-44])
xlabel('n')
ylabel('x4(n)')
title('x4的波形')
subplot(2,2,4)
k=[0:
15]
stem(k,abs(f2));
axis([016020])
xlabel('k')
ylabel('|x4(k)|')
title('x4(n)的16点fft')
subplot(2,2,3)
k=[0:
7]
stem(k,abs(f1));
axis([08020])
xlabel('k')
ylabel('|x4(k)|')
title('x4(n)的8点fft')
波形图:
5.
=sin(pi/8*n)
原程序:
n=[0:
7];
x=sin((pi*n)/8)
f1=fft(x,8)
subplot(2,2,1)
stem(n,x);
axis([08-44])
xlabel('n')
ylabel('x5(n)')
title('x5的波形')
n=[0:
15]
x=sin(0.125*pi*n)
f2=fft(x,16)
subplot(2,2,2)
stem(n,x);
axis([016-44])
xlabel('n')
ylabel('x5(n)')
title('x5的波形')
subplot(2,2,4)
k=[0:
15]
stem(k,abs(f2));
axis([016020])
xlabel('k')
ylabel('|x5(k)|')
title('x5(n)的16点fft')
subplot(2,2,3)
k=[0:
7]
stem(k,abs(f1));
axis([08020])
xlabel('k')
ylabel('|x5(k)|')
title('x5(n)的8点fft')
波形图:
6.
=cos(pi*8*t)+sin(pi*16*t)+cos(20*pi*t)
原程序:
Ts=1/64;
n=0:
15;
Xa=cos(8*n*Ts*pi)+cos(16*n*Ts*pi)+cos(20*n*Ts*pi);
f1=fft(Xa,16);
subplot(3,2,1);
stem(n,Xa);
axis([015-23]);
xlabel('n');
ylabel('X6(n)');
title('X6(n)N=16');%显示x6(n)N=16
k=0:
15
subplot(3,2,2);
stem(k,abs(f1));
axis([016015]);
xlabel('k');
ylabel('|X6(k)|');
title('X6(n)N=16的16点FFT');%显示X6(n)的16点FFT
n=0:
31;
Xb=cos(8*n*Ts*pi)+cos(16*n*Ts*pi)+cos(20*n*Ts*pi);
f2=fft(Xb,32);
subplot(3,2,3);
stem(n,Xb);
axis([032-23]);
xlabel('n');
ylabel('X6(n)');
title('X6(n)N=32');%显示x6(n)N=32
subplot(3,2,4);
stem(abs(f2));
axis([032020]);
xlabel('k');
ylabel('|X6(k)|');
title('X6(n)N=32的32点FFT');%显示X6(n)的32点FFT
n=0:
63;
Xc=cos(8*n*Ts*pi)+cos(16*n*Ts*pi)+cos(20*n*Ts*pi);
f3=fft(Xc,64);
subplot(3,2,5);
stem(n,Xc);
axis([064-23]);
xlabel('n');
ylabel('X6(n)');
title('X6(n)N=64');%显示x6(n)N=64
subplot(3,2,6);
stem(abs(f3));
axis([064040]);
xlabel('k');
ylabel('|X6(k)|');
title('X6(n)N=64的64点FFT');%显示X6(n)的64点FFT
波形图:
(2)令
,用FFT计算8点和16点离散傅立叶变换,
,并根据DFT的对称性,由
求出
和
并与
(1)中所得结果比较。
提示(取N=16时,
,
)
实验结果:
n=[0:
7];
x=cos(0.25*pi*n)+sin(0.125*pi*n)
f1=fft(x,8)
subplot(2,2,1)
stem(n,x);
axis([08-44])
xlabel('n')
ylabel('x7(n)')
title('x7的波形')
n=[0:
15]
x=cos(0.25*pi*n)+sin(0.125*pi*n)
f2=fft(x,16)
subplot(2,2,2)
stem(n,x);
axis([016-44])
xlabel('n')
ylabel('x7(n)')
title('x7的波形')
subplot(2,2,4)
k=[0:
15]
stem(k,abs(f2));
axis([016020])
xlabel('k')
ylabel('|x7(k)|')
title('x7(n)的16点fft')
subplot(2,2,3)
k=[0:
7]
stem(k,abs(f1));
axis([08020])
xlabel('k')
ylabel('|x7(k)|')
title('x7(n)的8点fft')
波形图:
n=[0:
15];
x=cos(0.25*pi*n)+sin(0.125*pi*n)
f1=fft(x,16)
Re=(f1+conj(f1))/2
Im=(f1-conj(f1))/2
subplot(2,2,1)
stem(n,abs(Re));
axis([016020])
xlabel('k')
ylabel('|Re(x7(k))|')
title('恢复后的x4(k)')
subplot(2,2,2)
stem(abs(Im));
axis([016020])
xlabel('k')
ylabel('|Im(x7(k))|')
title('恢复后的x5(k)')
(3)令
,重复
(2)
n=[0:
15];
x=cos(0.25*pi*n)+j*sin(0.125*pi*n)
f1=fft(x,16)
subplot(2,2,2)
stem(n,abs(f1));
axis([016010])
xlabel('k')
ylabel('|x8(k)|')
title('x8(n)的16点fft')
subplot(2,2,1)
k=0:
7
f2=fft(x,8)
stem(k,abs(f2));
axis([08010])
xlabel('k')
ylabel('|x8(k)|')
title('x8(n)的8点fft')
n=[0:
15];
x=cos(0.25*pi*n)+j*sin(0.125*pi*n)
f=fft(x,16)
k
(1)=conj(f
(1))
m=2:
16
k(m)=conj(f(16-m+2))
fe=(f+k)/2
fo=(f-k)/2
xr=ifft(fe,16)
xo=ifft(fo,16)/j
subplot(2,2,1)
stem(n,xr);
axis([016-11])
xlabel('n')
ylabel('|x4(n)|')
title('x4(n)的波形')
subplot(2,2,2)
stem(n,abs(fe));
axis([016010])
xlabel('k')
ylabel('|x8e(k)|')
title('x4(n)的16点fft')
subplot(2,2,3)
stem(n,xo);
axis([016-11])
xlabel('n')
ylabel('|x5(n)|')
title('x5(n)的波形')
subplot(2,2,4)
stem(n,abs(fo));
axis([016010])
xlabel('k')
ylabel('|x8o(k)|')
title('x5(n)的16点fft')
三、实验心得体会
通过本次实验,我进一步加深了对DFT的算法原理和基本性质的理解,FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质。
进一步熟悉了FFT算法原理和FFT子程序的应用,学会了用FFT对连续信号和时域离散信号进行谱分析的方法,了解了可能出现的分析误差及其原因,以便在实际中正确应用FFT。
本次实验运用到了以前所学的数字信号处理知识,使我对DFT的定义、性质和用DFT作谱分析有了更深的理解。
本次实验还运用了FFT的算法原理与编程思想。
根据主程序给出的DIT-FFT运算流图和程序框图编写了MATLAB程序。
总之,通过本次实验,使我熟悉了MATLAB的上机环境,也使我的实践动手能力有了更进一步的提高。