实验二 利用DFT分析离散信号频谱

  • 格式:docx
  • 大小:142.25 KB
  • 文档页数:11

实验二 利用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)31,1,0 ),8π3cos(][ ==k k k x幅度谱m相位谱mylabel('傅里叶变换前的时域波形') 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('幅度谱')傅里叶变换前的时域波形k傅里叶反变换后的时域波形k][)(][21k u k x k计算结果:3. 有限长脉冲序列,利用FFT 分析其频谱,并绘出其幅度谱与相位谱。

答:计算程序:k=0:5;x=[2 3 3 1 0 5]; 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')计算结果:-5-4-3-2-1012345幅度谱w]5,4,3,2,1,0;5,0,1,3,3,2[][==k k x4. 某周期序列由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 ’)分析结果:幅度谱w相位谱w)2πcos()16π9cos()167πcos(][k k k k x ++=信号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,则可以得到另外不同的幅度谱和相位谱,这里不再详细画出。

幅度谱m-20-15-10-5051015相位谱m幅度谱m相位谱m5. 某离散序列由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]中的两个频率。

630),15π3.2cos(75.0)152πcos(][≤≤+=k k k k x -40-30-20-10010203040051015202530幅度谱m-40-30-20-10010203040-2-1012相位谱m(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:127stem(n,abs(fftshift(X)))运行结果如下:根据上面的幅度谱不能分辨出信号x[k]的两个频率。

(3)选用非矩形窗(主要有汉宁窗、哈明窗、布拉克曼窗和凯塞窗)计算fft ,能够分辨其中的两个频率,具体实现过程我将在下学期和数字信号处理这门课一起学习。

6. 已知序列利用FFT 分析下列信号的幅频特性,频率范围为,N =500点。

(1) (2)(3) 若将上述x [k ]乘以cos(p k /2) ,重做(1)和(2)。

答:序列x[k]是关于原点左右对称的,因此我只考虑原点右侧信号的幅频特性。

程序如下: k=0:50;⎪⎩⎪⎨⎧≤=-others,050,e][2)1.0(2k k x k )π,π[-∈Ω]2[][k x k y =]4[][k x k g =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(p k /2),取p=3,则与前问相同进行频谱分析,程序如下: syms pp=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')x [k ]的傅里叶变换nx [2k ]的傅里叶变换nx [4k ]的傅里叶变换nk=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 ,只能在 范围内 把w 赋值为很密的、长度很长的向量k*dw 来近似连续变量。

也就是说,能够用计算机以很 高效率计算的,只有离散傅里叶变换DFT,所以利用DFT 分析序列的频谱。

2. 若序列持续时间无限长,且无解析表达式,如何利用DFT 分析其频谱?答:当序列为无限长时,需要根据能量分布,进行截短。

确定作FFT 的点数N ,然后使用fft 函数作N 点FFT 计算X [m ]。

3. 在利用DFT 分析离散信号频谱时,会出现哪些误差?如何克服或改善?答:DFT 是DTFT 在主值区间的等间隔采样,DTFT 则是DFT 在密集的频点上的插值,并作周x [k ]的傅里叶变换nx [2k ]的傅里叶变换nx [4k ]的傅里叶变换n期延拓。