实验二利用DFT分析报告离散信号频谱.docx
《实验二利用DFT分析报告离散信号频谱.docx》由会员分享,可在线阅读,更多相关《实验二利用DFT分析报告离散信号频谱.docx(14页珍藏版)》请在冰豆网上搜索。
实验二利用DFT分析报告离散信号频谱
实验二利用DFT分析离散信号频谱
1.利用FFT分析信号
的频谱;
(1)确定DFT计算的参数;
(2)进展理论值与计算值比拟,讨论信号频谱分析过程中误差原因与改善方法。
答:
〔1〕信号x[k]的周期N=16,角频率w0=2*pi/N=pi/8;作fft的点数N=16。
〔2〕计算程序:
N=16;k=0:
N-1;
x=cos(3*pi/8*k);
X=fft(x,N);
subplot(2,1,1);
stem(k-N/2,abs(fftshift(X)));
ylabel('幅度谱')
xlabel('m')
subplot(2,1,2);
stem(k-N/2,angle(fftshift(X)));
ylabel('相位谱')
xlabel('m')
计算结果:
我们还可以利用ifft函数进展相应的傅里叶反变换,以得到时域上的x[k],分析程序如下:
N=16;k=0:
N-1;
x1=cos(3*pi/8*k);
X=fft(x1,N);
subplot(2,1,1)
stem(k,x1)
ylabel('傅里叶变换前的时域波形')
xlabel('k')
x2=ifft(X,N);
subplot(2,1,2)
stem(k,x2)
ylabel('傅里叶反变换后的时域波形')
xlabel('k')
结果如下:
可以看出:
经过傅里叶变换和相应反变换后的信号与原信号的时域波形完全一样。
2.利用FFT分析信号
的频谱;
(1)确定DFT计算的参数;
(2)进展理论值与计算值比拟,讨论信号频谱分析过程中误差原因与改善方法。
答:
〔1〕信号无限长,因此需要对其进展截短。
该序列单调衰减,当k>=10时,序列已几乎衰减为0,因此只取序列在区间[0,10]上的数值进展分析。
〔2〕计算程序:
k=0:
10;
x=(1/2).^k;
subplot(2,1,1);
stem(k,x);
subplot(2,1,2);
w=k-5;
plot(w,abs(fftshift(fft(x))));
ylabel('幅度谱')
xlabel('w')
计算结果:
3.有限长脉冲序列
,利用FFT分析其频谱,并绘出其幅度谱与相位谱。
答:
计算程序:
k=0:
5;
x=[233105];
w=k-3;
subplot(2,1,1);
stem(w,abs(fftshift(fft(x,6))));
ylabel('幅度谱')
xlabel('w')
subplot(2,1,2);
stem(w,angle(fftshift(fft(x,6))));
ylabel('相位谱')
xlabel('w')
计算结果:
4.某周期序列由3个频率组成:
,
利用FFT分析其频谱。
如何选取FFT的点数N?
此3个频率分别对应FFT计算结果X[m]中的哪些点?
假如选取的N不适宜,FFT计算出的频谱X[m]会出现什么情况?
答:
序列x[k]的周期为N=32,取FFT的点数N=32进展频谱分析,程序如下:
N=32;k=0:
N-1;
x=cos(7*pi/16*k)+cos(9*pi/16*k)+cos(pi/2*k);
X=fft(x,N);
subplot(2,1,1);
stem(k-N/2,abs(fftshift(X)));
ylabel('幅度谱')
xlabel('m')
subplot(2,1,2);
stem(k-N/2,angle(fftshift(X)));
ylabel('相位谱')
xlabel('m’)
分析结果:
信号x[k]的三个频率分别对应FFT计算结果X[m]中的m=7,m=9,m=8
对于离散周期序列进展FFT频谱分析时取计算的点数为序列的周期N,如果计算的点数不是此
离散周期序列的周期时,X[m]会发生变化,此时并不表示序列x[k]的频谱,而相当于将序列
x[k]的周期扩大或者缩减后得到新信号的频谱。
在本例中,假如取N=20<32,如此可得到如下图所
示的幅度谱和相位谱:
同理,假如取N=40>32,如此可以得到另外不同的幅度谱和相位谱,这里不再详细画出。
5.某离散序列由3个频率组成:
利用FFT分析其频谱。
(1)对x[k]做64点FFT,绘出信号频谱,能分辨出其中的两个频率吗?
(2)对x[k]补零到256点后计算FFT,能分辨出其中的两个频率吗?
(3)选用非矩形窗计算FFT,能够分辨出其中的两个频率吗?
(4)假如不能够很好地分辨出其中的两个频谱,应采取哪些措施?
答:
〔1〕对x[k]做64点FFT,程序如下:
k=0:
63;
x=cos(2*pi/15*k)+0.75*cos(2.3*pi/15*k);
X=fft(x,64);
stem(k-32,abs(fftshift(X)))
ylabel('幅度谱')
xlabel('m')
可以得到幅度谱和相位谱如下:
很明显,根据上面的幅度谱不能分辨出信号x[k]中的两个频率。
〔2〕对x[k]补零后做256点FFT:
k=0:
63;
x=cos(2*pi/15*k)+0.75*cos(2.3*pi/15*k);
X=fft(x,256);
n=-128:
127
stem(n,abs(fftshift(X)))
运行结果如下:
根据上面的幅度谱不能分辨出信号x[k]的两个频率。
〔3〕选用非矩形窗(主要有汉宁窗、哈明窗、布拉克曼窗和凯塞窗)计算fft,能够分辨其中的两个频率,具体实现过程我将在下学期和数字信号处理这门课一起学习。
6.序列
利用FFT分析如下信号的幅频特性,频率X围为
,N=500点。
(1)
(2)
(3)假如将上述x[k]乘以cos(pk/2),重做
(1)和
(2)。
答:
序列x[k]是关于原点左右对称的,因此我只考虑原点右侧信号的幅频特性。
程序如下:
k=0:
50;
x=exp(-0.5*(0.1*k).^2);
X=fft(x,500);
n=-250:
249;
subplot(3,1,1)
stem(n,abs(fftshift(X)))
ylabel('x[k]的傅里叶变换')
xlabel('n')
k=0:
25;
x=exp(-0.5*(0.2*k).^2);
X=fft(x,500);
n=-250:
249;
subplot(3,1,2)
stem(n,abs(fftshift(X)))
ylabel('x[2k]的傅里叶变换')
xlabel('n')
k=0:
12;
x=exp(-0.5*(0.4*k).^2);
X=fft(x,500);
n=-250:
249;
subplot(3,1,3)
stem(n,abs(fftshift(X)))
ylabel('x[4k]的傅里叶变换')
xlabel('n')
根据上述程序,我得到的上述三个信号的幅频特性如如下图所示:
可以看出:
信号在时域上进展压缩,对应如此在频域上进展扩展,时域和频域上的变换存在着一种相反的关系。
〔3〕假如将上述x[k]乘以cos(pk/2),取p=3,如此与前问一样进展频谱分析,程序如下:
symsp
p=3;
k=0:
50;
x=exp(-0.5*(0.1*k).^2).*cos(0.5*p*k);
X=fft(x,500);
n=-250:
249;
subplot(3,1,1)
stem(n,abs(fftshift(X)))
ylabel('x[k]的傅里叶变换')
xlabel('n')
k=0:
25;
x=exp(-0.5*(0.2*k).^2).*cos(p*k);
X=fft(x,500);
n=-250:
249;
subplot(3,1,2)
stem(n,abs(fftshift(X)))
ylabel('x[2k]的傅里叶变换')
xlabel('n')
k=0:
12;
x=exp(-0.5*(0.4*k).^2).*cos(2*p*k);
X=fft(x,500);
n=-250:
249;
subplot(3,1,3)
stem(n,abs(fftshift(X)))
ylabel('x[4k]的傅里叶变换')
xlabel('n')
运行结果如如下图:
四.实验思考题
1.既然可直接由DTFT定义计算序列DTFT,为何利用DFT分析序列的频谱?
答:
在时域,两者都是离散时间序列,在频域,DTFT是连续周期曲线X(jw),而DFT如此是与
时间序列同长的离散序列频谱X(k)。
matlab无法计算连续变量w,只能在X围内
把w赋值为很密的、长度很长的向量k*dw来近似连续变量。
也就是说,能够用计算机以很
高效率计算的,只有离散傅里叶变换DFT,所以利用DFT分析序列的频谱。
2.假如序列持续时间无限长,且无解析表达式,如何利用DFT分析其频谱?
答:
当序列为无限长时,需要根据能量分布,进展截短。
确定作FFT的点数N,然后使用fft函数作N点FFT计算X[m]。
3.在利用DFT分析离散信号频谱时,会出现哪些误差?
如何克制或改善?
答:
DFT是DTFT在主值区间的等间隔采样,DTFT如此是DFT在密集的频点上的插值,并作周期延拓。
插值肯定存在精度的问题,因此用DFT分析离散信号频谱时会产生误差,我认为可以通过增加作fft的点数N来减小插值间隔,从而克制或改善因插值带来的误差。
4.在利用DFT分析离散信号频谱时,如何选择窗函数?
答:
(1)假如序列为离散周期序列,如此先确定离散周期序列x[k]的根本周期N,然后利用fft函数求其一个周期的DFT,得到X[m];
(2)假如序列为离散非周期序列,当序列为无限长时,需要根据能量分布,首先进展截短。
然后确定fft的点数N,使用fft函数作N点FFT计算X[m];
(3)如果序列中有两个非常接近的频率,用矩形窗进展fft计算难以分辨时,可以通过选择适宜的非矩形窗〔汉宁窗、哈明窗、布拉克曼窗和凯塞窗〕进展计算,从而进展频率的分辨。
5.序列补零和增加序列长度都可以提高频谱分辨率吗?
两者有何本质区别?
答:
序列补零和增加序列长度都可以提高频谱分辨率,因为二者都可以增加作fft的点数N,N增大,ω就减小,所以频谱被更加的细分,分辨率提高;
两者的本质区别:
序列补零后用fft计算得到的是补零后序列的频谱,而增加序列长度后用fft计算得到的是长度增加后序列的频谱,即二者表示的是不同序列的频谱。