实验三 离散傅里叶变换及性质
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 离散傅里叶变换及性质
1、实验目的
(1)通过本实验的练习,了解离散时间信号时域运算的基本
实现方法。
(2)了解相关函数的调用格式及作用。
(3)通过本实验,掌握离散傅里叶变换的原理及编程思想。
2、实验原理
对于离散序列,存在着两种傅里叶变换——离散时间傅里叶变换(DTFT)和离散傅里叶变换(DFT)。DTFT用以求出离散信号的连续频谱,它仅在时域上离散而在频域上是连续的;DFT用以求出连续频谱上的离散样本点,所以其在时域和频域上都是离散的。对于一个离散序列x(n),它的离散时间傅里叶变换(DTFT)的定义为:
离散时间傅里叶变换收敛的充分条件是x(n)绝对可加,即利用离散快速傅里叶变换函数计算傅里叶变换。MATLAB提供了内部函数来快速地进行离散傅里叶变换(DFT)和逆变换(IDFT)的计算,如下所列。
fft(x), fft(x,N), ifft(x), ifft(x,N)
(1) fft(x):计算L点的DFT,L为序列x的长度,
即L=length(x)。
(2) fft(x,N):计算N点的DFT。N为指定采用的点数,
当N>L,则程序会自动给x后面补N-L个零点;如果
N (3) ifft(x):计算L点的IDFT,L为序列x的长度, 即L=length(x)。 (4) ifft(x,N):计算N点的IDFT。N为指定采用的点数, 当N>L,则程序会自动给x后面补N-L个零点;如果 N 3、实验内容和方法 1. 离散时间傅里叶变换DTFT 【例3-1】求有限长序列x(n)=[1,2,3,4,5]的DTFT,画出它的幅值谱、相位谱、实部和虚部。 MATLAB程序如下: clf; x=[1,2,3,4,5];nx=[-1:3]; w=linspace(0,2*pi,512); H=x*exp(-j*nx'*w); subplot(2,2,1); plot(w,abs(H)); ylabel('幅度'); grid on;%画幅度特性曲线 subplot(2,2,2); plot(w,angle(H)); ylabel('相角'); grid on;%画相位特性曲线 subplot(2,2,3); plot(w,real(H)); ylabel('实部'); grid on;%画幅度实 部特性曲线 subplot(2,2,4); plot(w,imag(H)); ylabel('虚部'); grid on;%画幅度虚 部特性曲线 set(gcf,'color','w'); 程序运行的结果如图3.1所示。 Image 图3.1 DTFT的计算 2. 离散傅里叶变换DFT 【例3-2】对于离散序列x(n)=cos(2πn/5),求出它的20点和23点的离散傅里叶变换的幅值谱。 MATLAB程序如下: n1=[0:1:19];x1=cos(2*pi*n1/5);xk1=abs(fft(x1)); n2=[0:1:22];x2=cos(2*pi*n2/5);xk2=abs(fft(x2)); subplot(2,2,1);plot(n1,x1); xlabel('n');ylabel('x1(n)');grid on; subplot(2,2,2);stem(n1,xk1); xlabel('k');ylabel('X1(k)');grid on; subplot(2,2,3);plot(n2,x2); axis([0,22,-1,1]);xlabel('n');ylabel('x2(n)');grid on; subplot(2,2,4);stem(n2,xk2); axis([0,22,0,10]);xlabel('k');ylabel('X2(k)');grid on; set(gca,'XTickMode','manual','XTick',[0,5,10,15,22]) set(gcf,'color','w'); 离散傅里叶变换及其快速计算结果如图3.2所示。 Image 图3.2 离散傅里叶变换及其快速计算 从图3. 2中可以看出,只有序列的20点的傅里叶变换得到的频谱图是单一谱线。这是由于序列的周期是5,而20是5的整数倍,所以得到了单一谱线的频谱图,而23则选取了4个半周期,即出现了频谱的泄漏,所以得不到单一谱线的频谱图。 3. 离散傅里叶变换DFT的性质 1) 时移性质 【例3-3】将序列x(n)=[2,1,-1,8,6,-2,-4,9,-3]右移10位,观察它的幅值谱和相位谱的变化。 MATLAB程序如下: clf; w=-pi:2*pi/511:pi; d=10; x1=[2,1,-1,8,6,-2,-4,9,-3]; xk1=abs(freqz(x1,1,w)); omega1=angle(freqz(x1,1,w)); x2=[zeros(1,d),x1]; xk2=abs(freqz(x2,1,w)); omega2=angle(freqz(x2,1,w)); subplot(2,2,1);plot(w/pi,xk1); grid on;title('原始序列的幅值谱'); subplot(2,2,2);plot(w/pi,xk2); grid on;title('时移序列的幅值谱'); subplot(2,2,3);plot(w/pi,omega1); grid on;title('原始序列的相位谱'); subplot(2,2,4);plot(w/pi,omega2); grid on;title('时移序列的相位谱'); set(gcf,'color','w'); 离散傅里叶变换的时移性质如图3.3所示。