应用FFT实现信号频谱分析_精品文档.doc
《应用FFT实现信号频谱分析_精品文档.doc》由会员分享,可在线阅读,更多相关《应用FFT实现信号频谱分析_精品文档.doc(14页珍藏版)》请在冰豆网上搜索。
电信类课程试验报告
学院:
理学院
系别:
电子信息工程
课程名称:
数字信号处理
姓名:
05656
学号:
05698
日期:
11月28日
第:
四次实验
实验名称:
应用FFT实现信号频谱分析
一、实验目的
(1)能够熟练掌握快速离散傅里叶变换(FastFourierTransform,FFT)的原理及应用FFT进行频谱分析的基础方法。
(2)对离散傅里叶变换的主要性质及FFT在数字信号处理中的重要作用有进一步的了解。
二、主要函数简介
1.离散傅里叶变换(DFT)及其主要性质
DFT表示离散信号的离散频谱,DFT的主要性质中有奇偶对称特性`虚实特性等。
通过实验可以加深理解。
实序列的DFT具有偶对称的实部和奇对称的虚部,这可以证明如下:
由定义,可得
=
=-j
=
=
=
=-j
所以:
x[k]=
实序列DFT的这个特性,在本实验中可以通过实指数序列及三角序列看出来。
对于单一频率的三角序列来说,它的DFT谱线也是单一的,这个物理意义可以从实验中得到验证,在理论上可以推导如下:
设:
=sin
其DFT为:
=
=
=
=
从而
X(0)==0
X
(1)===-j
X(N-2)=0
……
X(N-1)=
以上这串式中反应了的支流分量,是的一次谐波,又根据虚实特性而其他分量均为零。
当周期减小时显然sinR[k]的谱只应该在k=3及k=N-3才有分量,实验者可以通过可上述相同的步骤加以理论证明。
由于及相位差,所以它的DFT只包括实部而没有虚部,以上这些性质可在本实验中得到验证。
2.利用 DFT对信号进行频谱分析
DFT的重要应用之一是对时域连续信号的频谱进行分析,称为傅里叶分析,时域连续信号离散傅里叶分析的基本步骤如图5—1所示。
图5—1时域连续信号离散傅里叶分析的处理步骤
其中消混叠低通滤波器LPF(预滤波器)的引入,是为了消除或减少时域连续信号转换成序列时可能出现的频谱混叠的影响。
实际工作中,时域离散信号的时宽是很长的甚至是无限长的(例如语言或音乐信号)。
由于DFT的需要,必须把限制在一定的时间间隔之内,即进行数据截断。
数据的截断相当于加窗处理。
因此,在计算的DFT之前,用一个时域有限的窗函数加到上是非常必要的。
Xc(t)通过A/D变换器转成取样序列进行加窗处理,即。
加窗对频域的影响,用周期卷积表示。
其中或
在实际应用中,消混叠低通滤波器的阻带不可能式无限衰减的,故由周期延拓得到的由非零混叠,即出现混叠现象。
由于进行DFT的需要,必须对序列进行加窗处理,即,加窗对频域的影响,用周期卷积表示。
=
最后是进行DFT应算。
加窗后的DFT为
V[m]=0
其中假设窗函数长L小于或等于DFT长度N。
有限长序列的DFT相当于傅里叶变换的等间隔取样。
V[m]=
便是Sc(t)的离散频率函数。
因为DFT频率间隔为,且模拟频率和数字频率间的关系为,所以离散频率点对应的模拟频率为
显然频率分辨率△f为
利用DFT计算频谱,只给出频谱或的频率分量,即频率的取样值,而不可能得到连续的频谱函数。
如果在两个离散的谱线之间有一个特别大的频谱分量,就无法检测出来了。
为了在保持原来频谱形状不变的情况下,使谱线加密,即使频域取样点数增加,从而使原来看不到的频谱分量变得可以看到,可以通过在信号数据的末端补加一些零值点,使DFT计算周期内点数增加,但又不改变原有的记录数据的方法来实现。
3.快速离散傅里叶变换(FFT)
快速离散傅里叶变换是计算离散傅立叶变换的一种快速算法,为了提高应算速度,FFT将DFT的计算逐次分解成较小点数的DFT。
按时间抽取(Decimation-In-Time,DIT)FFT算法把输入序列按起值为偶数或是奇数分解成越来越短的序列。
按频域抽取(Decimation-In-Time,DIT)FFT算法是把输出序列按其值是偶数或是奇数来分解成越来越短的序列。
具体推导过程及原理可参见《数字信号处理》教科书。
三、实验程序
指数序列程序
2.1
clearall
N=100;
n=0:
N-1;
xn=0.9.^n;
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1)
plot(n,xn)
xlabel('n');ylabel('x(n)');
title('x(n)N=100')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/100)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=100');
2.2
clearall
N=100;
n=0:
N-1;
xn=cos(2*pi*n/N);
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=100')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=100')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/100)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=100');
2.3复合函数
clearall
N=100;
n=0:
N-1;
xn=0.9*sin(2*pi*n/N)+0.6*sin(2*pi*n/(N/3));
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=100')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=100')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/100)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=100');
3.1
clearall
N=32;
n=0:
N-1;
xn=0.9.^n;
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=32')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=32')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/32)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=32');
3.2N=16
3.3N=64
4.1N=N+2=34
clearall
N=34;
n=0:
N-1;
xn=cos(2*pi*n/N);
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=34')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=34')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/34)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=34');
4.2N=32
clearall
N=32;
n=0:
N-1;
xn=cos(2*pi*n/N);
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=32')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=32')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/32)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=32');
4.3N=64
clearall
N=64;
n=0:
N-1;
xn=cos(2*pi*n/N);
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=64')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=64')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/64)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=64');
5.1N=32
clearall
N=32;
n=0:
N-1;
xn=0.9*sin(2*pi*n/N)+0.6*sin(2*pi*n/(N/3));
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=32')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('x(n)N=32')
subplot(1,2,2)
k=0:
length(magXK)-1;
k=k*(2/32)
stem(k,magXK,'.');
xlabel('k');ylabel('|X(k)|');
title('X(k)N=32');
5.2N=64
clearall
N=64;
n=0:
N-1;
xn=0.9*sin(2*pi*n/N)+0.6*sin(2*pi*n/(N/3));
XK=fft(xn,N);
magXK=abs(XK);
phaXK=angle(XK);
subplot(1,2,1);
plot(n,xn);
xlabel('n');ylabel('x(n)');
title('x(n)N=64')
subplot(1,2,2)
k=0:
length(magXK)-1;
title('