离散傅里叶变换和快速傅里叶变换.docx
《离散傅里叶变换和快速傅里叶变换.docx》由会员分享,可在线阅读,更多相关《离散傅里叶变换和快速傅里叶变换.docx(26页珍藏版)》请在冰点文库上搜索。
离散傅里叶变换和快速傅里叶变换
戶幵,戈丿、弟实验报告
课程名称:
彳指导老师成绩:
实验名称:
离散傅里叶变换和快速傅里叶变换实验类型:
同组学生姓名:
一、实验目的和要求(必填)二、实验内容和原理(必填)
三、主要仪器设备(必填)四、操作方法和实验步骤
五、实验数据记录和处理六、实验结果与分析(必填)
七、讨论、心得
一、实验目的和要求
1.掌握DFT的原理和实现
2.掌握FFT的原理和实现,掌握用FFT对连续信号和离散信号进行谱分析的方法。
二、实验内容和原理
2.1DTFT和DFT
N1
如果x(n)为因果有限长序列,n=0,1,...,N-1,则x(n)的DTFT表示为:
X(ej)x(n)e
n0
序列的N点DFT是DTFT在[0,2n上的N点等间隔采样,采样间隔为2dN。
通过DFT,可以完成由一组有限个信号采样值x(n)直接计算得到一组有限个频谱采样值X(k)。
X(k)的幅
度谱为X(k)v'xR(k)X|2(k),XR(k)和Xi(k)分别为X(k)的实部和虚部。
X(k)的相位谱
为(k)列吩
离散傅里叶反变换
IDFT)定义为x(n)丄N\(k)ej_Nnk(n0,1,…,N1)
Nn0
2.2FFT
快速傅里叶变换(FFT)是DFT的快速算法,它减少了DFT的运算量,使数字信号的处理
速度大大提高。
三、主要仪器设备
PC一台,matlab软件
四、实验内容
4.1第一题
求有限长离散时间信号
x(n)的离散时间傅里叶变换(DTFT)X(ejQ)并绘图。
(1)已知x(n)
0其2他n2;
(2)已知x(n)2n0n10。
0其他
4.1.1理论分析
1)
由DTFT计算式,
X(Q)是实数,可以直接作出它的图像。
Figure1X(Q)曲线
2)由DTFT计算式:
X(
x(n)ej
io
2nej
n0
1夕1©11」
12ej
z11。
11」
12ej
X(
211
12ej
可以发现
(Q)周期为2n
;而X(Q)
的相位在2n周期内有约十次振荡。
4.1.2编程计算作图
编写一个计算DTFT的函数。
functionDTFT(x,n1,n2)w=-2*pi:
2*pi/1000:
2*pi;%X=zeros(size(w));
fori=n1:
n2%DTFT
表示Q
计算式
X=X+x(i-n1+1)*exp((-1)*j*w*i);
end
angle(X);
subplot(2,1,1);
plot(w,abs(X),'r');
xlabel('\Omega');ylabel(subplot(2,1,2);
plot(w,angle(X),'b');
xlabel('\Omega');ylabel(end
'|X(\Omega)|');holdon;%作幅频图
'\angle(\Omega)');%作相频图
输入序列x,和n的取值范围,即可计算其DTFT。
1)输入:
x=[11111];
DTFT(x,-2,2);
(因为X(Q)是实数,所以实际计算过程中对相频曲线取了绝对值)结果:
Figure2X(Q)的频谱
可以看出,X(Q)的相位只有0和n两种取值,X(Q)是实函数,而且其幅度频谱与理论计算得到的相同。
2)输入:
n=0:
10;x=2.An;
DTFT(x,0,10)
结果:
2500
2000
1500
1000
-10
-5
0
5
0
Figure3第1题
(2)中X(Q)的频谱
500
-1
4.2第二题
已知有限长序列x(n)={色7,9,5,1,7,9,5},试分别采用DFT和FFT求其离散傅里叶变换X(k)的幅度、相位图。
4.2.1理论分析
由FFT蝶形运算得到,X(k)=51,7,-9-j4,7,3,7,-9+j4,7
4.2.2编程计算作图
1.DFT
编写一个计算DTFT的函数。
DFT(序列x,长度N)
functionDFT(x,N)
k=0:
N-1;
X=zeros(size(k));
forn=0:
N-1
X=X+x(n+1)*exp((-1)*j*2*pi/N*n*k);%DFT计算式
end
subplot(2,1,1);
stem(k,abs(X),'.');xlabel('k');ylabel('|X(k)|');holdon;%幅频图
subplot(2,1,2);
stem(k,angle(X),'*');xlabel('k');ylabel('Angle(k)');%相频图
end
输入:
x=[87951795];
DFT(x,8);
结果:
Figure4第2题DFT结果
2.FFT
编写一个利用matlab自带函数计算FFT并绘图的函数FFT1(序列x,长度N)
functionFFT1(x,N)
X=fft(x,8);%用自带的fft函数计算
k=0:
N-1;
subplot(2,1,1);
stem(k,abs(X),'.');xlabel('k');ylabel('|X(k)|');holdon;%幅频图
subplot(2,1,2);
stem(k,angle(X),'*');xlabel('k');ylabel('Angle(k)');%相目频图
end
输入:
x=[87951795];
FFT1(x,8);
结果:
Figure5第2题FFT结果
因为FFT只是DFT的一种快速算法,所以FFT的结果与DFT结果相同。
DFT和FFT的结果,符合理论计算得到的,X(k)=51,7,-9-j4,7,3,7,-9+j4,7
4.3第三题
已知连续时间信号x(t)=3cos8nt,X(3)=3[(8)(8)],该信号从t=0开始
以采样周期Ts=0.1s进行采样得到序列x(n),试选择合适的采样点数,分别采用DFT和FFT求其离散傅里叶变换X(k)的幅度、相位图,并将结果与X(k)的幅度、相位图,并将结果与
X(3)相比较。
4.3.1理论分析
1.原信号的频谱:
X(3)=3[(8)(8)],只在土8n不为0.且在土8n处相
2.采样角频率QS=20n>2X8n,满足采样定理。
3.采样后的信号,为X(3)以20n为周期的延拓。
所以只在(土8+20k)n(k为任意整
数)处不为0.如取区间[0,20n]内,只有8n和16n处不为0。
进行N点DFT后,将
812
20n的区间映射为[0,N]区间。
理想情况下仅在n=N和N两处不为0。
2020
4.x(n)cos(8nTs)cos(0.8n),周期为5,所以取采样点数为5的倍数时,不会发
生泄漏;而采样点数不是5的倍数时,则会发生泄漏。
10
1
3
3111131
9
-
8
7
6
■
)
X5
4
3
1
040
1
Figure6原始信号的频谱X(Q)
4.3.2编程计算作图
编写一个获得信号的N点样本的函数sample(点数N)
functionx=sample(N)
t=0:
0.1:
(N-1)*0.1;%0.1s为间隔
x=3*cos(8*pi*t);%x即采样结果
End
输入:
X=sample(N);
FFT1(X,N);
即可获得采样N点的频谱图。
因为DFT结果与FFT是完全一样的,所以这里只使用FFT
作图。
取采样点数N=51620104获得以下频谱图:
•••
■
■
■
-
-
.o51J
\2.51
33.5
Figure7N=5
Figure8N=16
Figure9N=20
80
Figure10N=104
可以看出,N=5和20时,由于是周期的整数倍,频谱只有两条谱线,且满足前面
812
理论计算得出的公式n=—N和宜N,没有发生泄漏,且这两条谱线对应
2020
的相位是0.所以频谱与原信号频谱在形式上时相同的。
而N=16和N=54时,则都
发生了频谱泄漏,频谱与原信号频谱就很不同了。
但相比之下N=54时谱线更加
接近原谱线。
验证了“为减小泄漏误差,如果待分析的信号实现不知道确切周期,
则截取较长时间长度的样点进行分析”这个说法。
同时也可以发现,虽然幅频图中显示幅值为0,但相频图中相应的位置仍有谱线。
这可能是matlab浮点运算造成的误差,即本来为0处其实是一个非常小的复数,所以仍有一定相位。
4.4第四题
4.4.1理论分析
若噪声信号较小,则采样后的频谱仍能较准确地反映原信号的特征。
4.4.2编程计算
对原采样程序稍加改编,加入一个噪声信号p*randn(1,N)。
p表示噪声信号的强度。
functionx=samplenoise(N,p)
t=0:
0.1:
(N-1)*0.1;
x=3*cos(8*pi*t)+p*randn(1,N);
end
取采样点数N=20进行分析。
输入:
X=samplenoise(20,p);%取P=1和10两种情况。
FFT1(X,20);
Figure11N=20噪声较小(p=1)
Figure12N=20噪声较大(p=10)
难准确获得原信号的频谱。
4.5第五题
3.5已知序列x(n)4(n)3(n1)2(n2)
(n3),X(k)是x(n)的6点DFT,设
(1)若有限长序列y(n)的6点DFT是Y(k)W64kX(k),求y(n)。
(2)若有限长序列w(n)的6点DFTW(k)是X(k)的实部,求w(n)。
(3)若有限长序列q(n)的3点DFT是Q(k)X(2k),k=0,1,2,求q(n)。
由题意得到:
x(n)=4,3,2,1,0,0n=(0,1,2,3,4,5)
4.5.1理论分析
1)由DFT的性质可以得到,如果y(n)的DFT为Y(k)W64kX(k),那么y(n)就是x(n)
圆周左移4位得到的。
所以y(n)=0,0,4,3,2,1
由题意,X(k)=103.5-j4.33012.5-8.66j22.5+j0.866
取实部,则W(k)=103.52.52.523.5
按照IDFT计算式x(n)
-N1X(k)ej^nk(n0,1,...,N1)计算得到
Nn0
w(n)=41.5111.5
由DFT的性质,因为W(k)是实数,所以对应的w(n)也是实数。
3)
由题意,Q(k)=102.5-8.66j2.5+j0.866
q(n)=532
4.5.2编程计算
1)
x=[432100];
X=fft(x,6);%求DFT
k=0:
5;
ifft(exp(j*4*pi/3*k).*X)%求IFFT
结果:
arts=
Calumns1Throueh5
D.QOOO呻O.ODOOiChOODQ+OcQOOOi4.C0Q0-0.OOOOi3.(WOO-0.OOQOi2.QD0D-GQQMH
Colunn0
LOOOO+0.00001
y(n)=0,0,4,3,2,1即x(n)圆周左移4位,与理论值相同。
2)
%接第
(1)题的程序
W=real(X);%取实部
ifft(W)
结果:
ans=
4.0000l-oOOO1.0000L00001,00001-5000
w(n)=41.5111.5与理论计算值相同。
3)%接第
(1)题的程序
Q=[X
(1)X(3)X(5)];%Q是X(2k),由于matlab的矩阵是从X
(1)开始,ifft(Q)%所以对应的应该是第1、3、5个元素
结果:
305=
□32
q(n)=532,与理论值相同。
4.6第六题
已知信号x(t)
sin(2f1t)sin(2f2t)sin(2f3t),其中f1=4Hz、f2=4.02Hz、f3=5Hz,采
用采样频率为20Hz进行采样,求:
(1)当采样长度N分别为512和2048情况下x(t)的幅度频谱;
(2)当采样长度N为32,且增补N个零点、4N个零点、8N个零点、16N个零点情况下
x(t)的幅度频谱。
461理论分析
1.首先20Hz的采样频率是满足采样定理的。
2.频率分辨率是DFT中谱线间的最小间隔,单位是Hz。
对于长度为N的序列,频率分辨
率为fs/N,为采样频率。
3.因为采样点数N不是周期的整数倍,所以一定会存在频谱泄露情况。
4.fs=20Hz时,N=512,则分辨率20/512疋0.039Hz>0.02Hz所以不能区分开信号中频率为4Hz禾口4.02Hz的两个分量。
5.N=2048,则分辨率20/2048~0.01Hz<0.02Hz可以区分开4Hz和4.02Hz的这两个分量。
4.6.2编程作图
编写一个取N个点并补充t*N个0的函数sample2(取样点数N,补零t)
functionx=sample2(N,t)
n=0:
0.02:
0.02*(N-1);%N个点
x=sin(2*pi*4*n)+sin(2*pi*4.02*n)+sin(2*pi*5*n);%取样过程
x(N+1:
N*(t+1))=0;%补零
end
1)输入:
x=sample2(N,0);%N=512,4096
FFT1(x,N);
结果:
300
250
200
150
100
50
0
Figure13N=512幅频图
N=512时,可以看到对4Hz和5Hz的分量是明显区分开来的。
对峰值附近放大来看:
300
Figure14N=512幅频图放大
看到k=103和104处有峰值。
4402
理论计算中,512102.4512102.9
2020
由于频谱泄露,在k=103和104处出现峰值,实际上并没有将4Hz和4.02Hz的两个分量区
分开来。
k
Figure15N=2048幅频图
N=2048时,显然区分开了4Hz和5Hz的分量。
峰值附近放大看:
在k=409、410和k=412有峰值。
4402
理论上2048409.62048411.6
2020
由于频谱泄露,在409.6附近的409和410处同时出现峰值,在411.6附近的412出现峰值。
所以采样点数N=2048时一定程度上区分开了4Hz和4.02Hz的分量。
2)输入
x=sample2(32,t);%t=取1,4,8,16
FFT1(x,N);%N=32*(t+1)
结果:
Figure16补32个0
Figure17补128个0
Figure18补256个0
Figure19补512个0
可以发现,采样点数相同,都是32。
20/32=0.6<1Hz,频谱图可以区分4Hz和5Hz分量,但
不可以区分4Hz和4.02Hz的分量。
2
补不同个数的0,幅频图的总体形状基本上是不变的。
只是谱线间隔0Ts越来越小,
N
谱线更加接近于N=32时的离散时间傅里叶变换DTFT的结果。
但是有效的数据点数只有32,
所以这些补0以后的幅频图都是不能区别开4Hz和4.02Hz的分量的,因为含有信息的点数
始终是32没有增加。
五、心得体会
1.通过本次虚拟实验,我对DFT、DTFT、FFT的公式更加熟悉了。
也从解题目中对采样定理、频谱泄露、频率分辨率等有了更加深的理解。
2.通过编写、调试程序,学习了一些matlab编程和绘图的方法。
3.matlab中元素下标是从1开始的,而信号描述中一般是从0开始的,编程时要要注意这
一点。