实验三 离散傅里叶变换及性质
- 格式:pdf
- 大小:153.26 KB
- 文档页数:8
一,实验名称: DFT 的频谱分析 二,实验目的:1. 加深对 DFT 原理的理解,熟悉DFT 的性质。
2. 掌握离散傅里叶变换的有关性质,利用Matlab 实现DFT 变换3. 深刻理解利用 DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法三,实验原理:所谓信号的频谱分析就是计算信号的傅里叶变换。
连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT 是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。
工程实际中,经常遇到的连续信号Xa(t),其频谱函数Xa(jW)也是连续函数。
数字计算机难于处理,因而我们采用DFT 来对连续时间信号的傅里叶变换进行逼近,进而分析连续时间信号的频谱。
离散傅里叶变换是有限长序列的傅里叶变换,它相当于把信号的傅里叶变换进行等频率间隔采样,并且有限长序列的离散傅里叶变换和周期序列的离散傅里叶级数本质是一样的。
快速傅里叶变换(FFT )并不是一种新的变换,它是离散傅里叶变换的一种快速算法,并且主要是基于这样的思路而发展起来的:(1)把长度为N 的序列的DFT 逐次分解成长度较短的序列的DFT 来计算。
(2)利用WN(nk)的周期性和对称性,在DFT 运算中适当的分类,以提高运算速度。
(对称性nkNnk NW W N-=+2,12-=NN W ;周期性nk N nk N nrN N k rN n N W W W W ---==)(,r 为任意整数,1=nrNNW ) 离散傅里叶变换的推导:离散傅里叶级数定义为 nk j N k p p ek x Nn x N21)(1)(π∑-== (1-1) 将上式两端乘以nm j Ne π2-并对n 在0~N-1求和可得 ⎥⎦⎤⎢⎣⎡==∑∑∑∑∑-=---=-=-=---=-10)(110101)(10N2N2N2)()(1)(N n m k n j N N k p N n N k m k n j pN n nm j p e k X ek XNen x πππ 因为{m k 1mk 0)(N )(1)(N 2N2N2-1-1N 11=≠---=-==∑m k j m k j N n m k n je eeNπππ所以∑∑-=-=--=11)()()(N2N k p N n nm j p m k k X en x δπ 这样∑-=-=10N2)()(N n nm j p p en x m X π用k代替m 得 ∑-=-=10N2)()(N n nk j p P e n x k X π (1-2)令N2πj N eW -=,则(1-2)成为DFS []∑-===10)()()(N n nk N p p p W n x k X n x (1-3)(1-1)成为 IDFS []∑-=-==1)(1)()(N n nkNpp p W k XNn x k X (1-4) 式(1-3)、(1-4)式构成周期序列傅里叶级数变换关系。
第三章离散傅里叶变换DFT: Discrete Fourier Transform第三章学习目标z理解傅里叶变换的几种形式z掌握离散傅里叶变换(DFT)及性质,圆周移位、共轭对称性,掌握圆周卷积、线性卷积及两者之间的关系z掌握频域抽样理论z掌握DFT的应用引言DFT要解决两个问题:一是频谱的离散化;二是算法的快速计算(FFT)。
这两个问题都是为了使计算机能够实时处理信号。
Fourier变换的几种可能形式时间函数频率函数连续时间、连续频率—傅里叶变换连续时间、离散频率—傅里叶级数离散时间、连续频率—序列的傅里叶变换可以得出一般的规律:一个域的离散对应另一个域的周期延拓;一个域的连续必定对应另一个域的非周期。
−jwndw e jwn 时域离散、非周期频域连续、周期z 时域周期化→频域离散化z 时域离散化→频域周期化离散连续周期性非周期性引言Fourier变换的几种可能形式时间函数频率函数连续时间、连续频率—傅里叶变换连续时间、离散频率—傅里叶级数离散时间、连续频率—序列的傅里叶变换离散时间、离散频率—周期序列的傅里叶级数由DTFT到DFS离散时间、离散频率的傅立叶级数(DFS)由上述分析可知,对DTFT,要想在频域上离散化,那么在时域上必须作周期延拓。
对长度为M的有限长序列x(n),以N为周期延拓(N≥M)。
注意:周期序列的离散傅里叶级数(DFS)只对有限长序列作周期延拓或周期序列成立。
……四种傅里叶变换形式的归纳时间函数频率函数连续和非周期非周期和连续连续和周期(T0)非周期和离散(Ω=2π/T)离散(T)和非周期周期(Ωs=2π/T)和连续离散(T)和周期(T0)周期(Ωs=2π/T)和离散(Ω=2π/T)在进行DFS 分析时,时域、频域序列都是无限长的周期序列周期序列实际上只有有限个序列值有意义长度为N 的有限长序列可以看成周期为N 的周期序列的一个周期(主值序列)借助DFS 变换对,取时域、频域的主值序列可以得到一个新的变换—DFT ,即有限长序列的离散傅里叶变换3.1 离散傅里叶变换(DFT )的定义及物理意义——有限长序列的离散频域表示x(n)的N 点DFT 是¾x(n)的z 变换在单位圆上的N 点等间隔抽样;¾x(n)的DTFT 在区间[0,2π)上的N 点等间隔抽样。
实验三用FFT对信号进行频谱分析和MATLAB程序实验三中使用FFT对信号进行频谱分析的目的是通过将时域信号转换为频域信号,来获取信号的频谱信息。
MATLAB提供了方便易用的函数来实现FFT。
首先,我们需要了解FFT的原理。
FFT(快速傅里叶变换)是一种快速计算离散傅里叶变换(DFT)的算法,用于将离散的时间域信号转换为连续的频域信号。
FFT算法的主要思想是将问题划分为多个规模较小的子问题,并利用DFT的对称性质进行递归计算。
FFT算法能够帮助我们高效地进行频谱分析。
下面是一个使用MATLAB进行频谱分析的示例程序:```matlab%生成一个10秒钟的正弦波信号,频率为1Hz,采样率为100Hzfs = 100; % 采样率t = 0:1/fs:10-1/fs; % 时间范围f=1;%正弦波频率x = sin(2*pi*f*t);%进行FFT计算N = length(x); % 信号长度X = fft(x); % FFT计算magX = abs(X)/N; % 幅值谱frequencies = (0:N-1)*(fs/N); % 频率范围%绘制频谱图figure;plot(frequencies, magX);xlabel('频率(Hz)');ylabel('振幅');title('信号频谱');```上述代码生成了一个10秒钟的正弦波信号,频率为1 Hz,采样率为100 Hz。
通过调用MATLAB的fft函数计算信号的FFT,然后计算每个频率分量的幅值谱,并绘制出信号频谱图。
在频谱图中,横轴表示频率,纵轴表示振幅。
该实验需要注意以下几点:1.信号的采样率要与信号中最高频率成一定比例,以避免采样率不足导致的伪频谱。
2.FFT计算结果是一个复数数组,我们一般只关注其幅值谱。
3.频率范围是0到采样率之间的频率。
实验三的报告可以包含以下内容:1.实验目的和背景介绍。
实验三 z 变换及分析、DTFT 实验一、 实验目的(1) 学会运用MATLAB 求离散时间信号的z 变换和z 反变换; (2) 学会运用MATLAB 分析离散时间系统的系统函数的零极点;(3) 学会运用MATLAB 分析系统函数的零极点分布与其时域特性的关系; (4) 学会运用MATLAB 进行离散时间系统的频率特性分析。
二、实验原理及实例分析2.1 z 正反变换序列()n x 的z 变换定义为()()[]()∑∞-∞=-==n nzn x n x z X Z (1)其中,符号Z 表示取z 变换,z 是复变量。
相应地,单边z 变换定义为()()[]()∑∞=-==0n n z n x n x z X Z (2)MATLAB 符号数学工具箱提供了计算离散时间信号单边z 变换的函数ztrans 和z 反变换函数iztrans ,其语句格式分别为Z=ztrans(x) x=iztrans(z)上式中的x 和Z 分别为时域表达式和z 域表达式的符号表示,可通过sym :函数来定义。
【实例1】 试用ztrans 函数求下列函数的z 变换。
(1))()cos()(n u n a n x nπ=; (2))(])2(2[)(11n u n x n n ----=。
解:(1)z 变换MATLAB 源程序为 >>x=sym('a^n*cos(pi*n)'); >>Z=ztrans(x);>>simplify(Z) ans=z/(z+a)(2)z 变换MATLAB 源程序为 >>x=sym('2^(n-1)-(-2)^(n-1)'); >>Z=ztrans(x); >>simplify(Z) ans=z^2/(z-2)/(z+2)【实例2】 试用iztrans 函数求下列函数的z 反变换。
(1)65198)(2+--=z z z z X (2)32)2)(1()12112()(--+-=z z z z z z X解:(1)z 反变换MATLAB 源程序为 >>Z=sym('(8*z-19)/(z^2-5*z+6)'); >>x=iztrans(Z); >>simplify(x) ans=-19/6*charfcn[0](n)+5*3^(n-1)+3*2^(n-1)其中,charfcn[0](n)是)(n δ函数在MATLAB 符号工具箱中的表示,反变换后的函数形式为)()2335()(619)(11n u n n x n n --⨯+⨯+-=δ。
FFT算法分析实验实验报告一、实验目的快速傅里叶变换(Fast Fourier Transform,FFT)是数字信号处理中一种非常重要的算法。
本次实验的目的在于深入理解 FFT 算法的基本原理、性能特点,并通过实际编程实现和实验数据分析,掌握 FFT 算法在频谱分析中的应用。
二、实验原理FFT 算法是离散傅里叶变换(Discrete Fourier Transform,DFT)的快速计算方法。
DFT 的定义为:对于长度为 N 的序列 x(n),其 DFT 为X(k) =∑n=0 到 N-1 x(n) e^(j 2π k n / N) ,其中 j 为虚数单位。
FFT 算法基于分治法的思想,将 N 点 DFT 分解为多个较小规模的DFT,从而大大减少了计算量。
常见的 FFT 算法有基 2 算法、基 4 算法等。
三、实验环境本次实验使用的编程语言为 Python,主要依赖 numpy 库来实现 FFT 计算和相关的数据处理。
四、实验步骤1、生成测试信号首先,生成一个包含不同频率成分的正弦波叠加信号,例如100Hz、200Hz 和 300Hz 的正弦波。
设定采样频率为 1000Hz,采样时间为 1 秒,以获取足够的采样点进行分析。
2、进行 FFT 计算使用 numpy 库中的 fft 函数对生成的测试信号进行 FFT 变换。
3、频谱分析计算 FFT 结果的幅度谱和相位谱。
通过幅度谱确定信号中各个频率成分的强度。
4、误差分析与理论上的频率成分进行对比,计算误差。
五、实验结果与分析1、幅度谱分析观察到在 100Hz、200Hz 和 300Hz 附近出现明显的峰值,对应于生成信号中的频率成分。
峰值的大小反映了相应频率成分的强度。
2、相位谱分析相位谱显示了各个频率成分的相位信息。
3、误差分析计算得到的频率与理论值相比,存在一定的误差,但在可接受范围内。
误差主要来源于采样过程中的量化误差以及 FFT 算法本身的近似处理。
信号实验一离散傅里叶变换及其快速算法一、实验目的1、掌握计算序列的离散傅里叶变换(FFT)的方法;2、掌握实现时间抽取快速傅里叶变换(FFT)编程方法;3、加深对DFT与序列的傅里叶变换和Z变换之间的关系的理解;4、复习复数序列的运算方法。
二、程序设计框图1.码位倒置程序框图2.蝶形图运算程序框图三、实验程序实验程序的源代码如下:#include"math.h"#include"stdio.h"/*------------------------------------------------------------------------------------------子函数部分------------------------------------------------------------------------------------------*/ void swap(float *a,float *b)//交换变量子函数{float T;T=*a;*a=*b;*b=T;}void fft (float A [],float B [],unsigned M)//数组A为序列的实部, 数组B为序列的虚部{unsigned long N,I,J,K,L,LE,LE1,P,Q,R;float Wr,Wi,W1r,W1i,WTr,WTi,theta,Tr,Ti;N=1<<M;J=0;for(I=0;I<N-1;I++){if(J>I){swap(&A [I],&A [J]);swap(&B [I],&B [J]);}K=N>>1;while(K>=2&&J>=K){J-=K;K>>=1;}J+=K;}for(L=1;L<=M;L++){LE=1<<L;LE1=LE/2;Wr=1.0;Wi=0.0;theta=(-1)*3.1415926536/LE1;W1r=cos (theta);W1i=sin (theta);for(R=0;R<LE1;R++){for(P=R;P<N-1;P+=LE){Q=P+LE1;//基本蝶形图的复数运算Tr=Wr*A[Q]-Wi*B[Q];Ti=Wr*B[Q]+Wi*A[Q];A[Q]=A[P]-Tr;B[Q]=B[P]-Ti;A[P]+=Tr;B[P]+=Ti;}WTr=Wr;WTi=Wi;Wr=WTr*W1r-WTi*W1i;Wi=WTr*W1i+WTi*W1r;}}return;}/*------------------------------------------------------------------------------------------主函数部分------------------------------------------------------------------------------------------*/ void main(){float A[20],B[20];char t1,t2,file_name[20];int M,N,i,iiff;FILE *fp;/*************************************数据读取部分************************************/ printf("请输入文件名:");//输入数据文件名scanf("%s",file_name);printf("FFT变换还是IFFT变换?(FFT:1,IFFT:-1):");//输入变换方式, 1为FFT, -1为IFFTscanf("%d",&iiff);while(iiff!=1&&iiff!=-1)//检错: 检验上一步的输入是否有错, 有错则重新输入{printf("输入错误, 请重新输入! ");printf("FFT or IFFT?(FFT:1,IFFT:-1):");scanf("%d",&iiff);}fp=fopen(file_name,"r");//打开文件并读入数据fscanf(fp,"%d",&M);N=pow(2,M);//计算序列总数for(i=0;i<N;i++)//读取文件中的数据{fscanf(fp,"%f%c%c%f",&A[i],&t1,&t2,&B[i]);if(iiff==-1)//根据FFT或IFFT修正BB[i]=B[i]*-1;if(t2!='j')//检错: 检验读取格式是否有错{printf("输入格式错误\n");break;}if(t1=='+')//判断虚部的正负号B[i]=B[i];else if(t1=='-')B[i]=-B[i];}/****************************************变换部分****************************************/ fft(A,B,M);//FFT变换/**************************************数据输出部分**************************************/ fp=fopen("fft_result.txt","w"); //输出结果if(iiff==-1)fprintf(fp,"IFFT变换的输出结果是: \n");elsefprintf(fp,"FFT变换的输出结果是: \n");for(i=0;i<N;i++){if(iiff==-1) //根据FFT或IFFT修正B{B[i]=B[i]*-1/N;A[i]=A[i]/N;}if(B[i]>=0)//修正虚部的输出格式fprintf(fp,"%f+j%f\n",A[i],B[i]);else if(B[i]<0)fprintf(fp,"%f-j%f\n",A[i],-B[i]);else if(B[i]==0)fprintf(fp,"%f\n",A[i]);}fclose(fp);}四、程序运行结果检验(1) 1.对序列进行FFT变换输入文件fft_input.txt:21+j02+j0-1+j04+j0控制台输入:请输入文件名: fft_input.txtFFT变换还是IFFT变换?(FFT:1,IFFT:-1): 1输出文件fft_result.txt:FFT变换的输出结果是:6.00000+j0.000002.00000+j2.00000-6.00000+j0.000002.00000+j-2.00000运行结果分析:程序运行输出结果与计算结果相同, 表示傅里叶正变换(FFT)成功。
实验二
连续非周期信号的傅里叶变换(FT)及其性质一、实验目的
在理论学习的基础上,通过本实验熟悉常见信号的傅里叶变换及掌握连续时间傅里叶变换的性质。
二、相关知识
常见信号的傅里叶变换和连续时间傅里叶变换(CTFT)的性质
1、常见连续时间非周期信号及其傅里叶变换列表如下:
在本实验中可以可以对以上信号采取以下常见运算,运算结果表达式列表如下:
三、思考问题
1、X(w)和C k在量纲上分别有什么区别?
2、C k和X(w)是否分别代表周期信号和非周期信号各频率分量的振幅?
3、如果对X(w)在频域进行抽样,即令X(w)用X(KW0)代替,那么在时域对信号会产生什么影响?。
第1篇实验目的1. 理解并掌握信号变换的基本原理和方法,包括傅里叶变换、拉普拉斯变换和Z 变换。
2. 通过实验,加深对信号变换在实际应用中的理解,如信号处理、系统分析等。
3. 学习使用MATLAB等工具进行信号变换的计算和分析。
实验原理信号变换是信号处理领域的重要工具,它可以将信号从时域转换为频域或其他域,便于分析、处理和设计。
本实验主要涉及以下几种信号变换:1. 傅里叶变换(FT):将时域信号转换为频域信号,揭示信号的频率成分。
2. 拉普拉斯变换(LT):将时域信号转换为复频域信号,适用于分析线性时不变系统。
3. Z变换(ZT):将离散时间信号转换为Z域信号,适用于分析离散时间系统。
实验器材1. MATLAB软件2. 示波器3. 信号发生器4. 连接线实验步骤1. 傅里叶变换实验- 使用MATLAB生成一个正弦波信号,采样频率为1000Hz,采样点数为1024。
- 对该信号进行傅里叶变换,观察频谱图。
- 改变采样频率和采样点数,观察频谱图的变化。
2. 拉普拉斯变换实验- 使用MATLAB生成一个指数衰减信号。
- 对该信号进行拉普拉斯变换,观察复频域图。
- 分析拉普拉斯变换的结果,解释信号的特性。
3. Z变换实验- 使用MATLAB生成一个离散时间信号。
- 对该信号进行Z变换,观察Z域图。
- 分析Z变换的结果,解释信号的特性。
4. 信号变换在系统分析中的应用- 使用MATLAB设计一个简单的模拟滤波器。
- 对滤波器进行傅里叶变换,观察滤波器的频率响应。
- 分析滤波器的性能,如通带、阻带、截止频率等。
实验结果与分析1. 傅里叶变换实验- 频谱图显示正弦波的频率成分与采样频率有关。
- 改变采样频率和采样点数,频谱图发生相应的变化。
2. 拉普拉斯变换实验- 复频域图显示指数衰减信号的极点和零点。
- 分析结果,可以确定信号的衰减速度和稳态值。
3. Z变换实验- Z域图显示离散时间信号的极点和零点。
- 分析结果,可以确定信号的稳定性、收敛速度等特性。
实验一时域离散信号的产生及时域处理实验目的:了解Matlab软件数字信号处理工具箱的初步使用方法。
掌握其简单的Matlab语言进行简单的时域信号分析。
实验内容:[1.1]已知两序列x1=[0,1,2,3,4,3,2,1,0];n1=[-2:6];x2=[2,2,0,0,0,-2,-2],n2=[2:8].求他们的和ya及乘积yp. 程序如下:x1=[0,1,2,3,4,3,2,1,0];ns1=-2;x2=[2,2,0,0,0,-2,-2];ns2=2;nf1=ns1+length(x1)-1;nf2=ns2+length(x2)-1;ny=min(ns1,ns2):max(nf1,nf2);xa1=zeros(1,length(ny));xa2=xa1;xa1(find((ny>=ns1)&(ny<=nf1)==1))=x1;xa2(find((ny>=ns2)&(ny<=nf2)==1))=x2;ya=xa1+xa2yp=xa1.*xa2subplot(4,4,1),stem(ny,xa1,'.')subplot(4,1,2),stem(ny,xa2,'.')line([ny(1),ny(end)],[0,0])subplot(4,1,3),stem(ny,ya,'.')line([ny(1),ny(end)],[0,0])subplot(4,1,4),stem(ny,yp,'.')line([ny(1),ny(end)],[0,0])[1.2]编写产生矩形序列的程序。
并用它截取一个复正弦序列,最后画出波形。
程序如下:clear;close alln0=input('输入序列起点:n0=');N=input('输入序列长度:N=');n1=input('输入位移:n1=');n=n0:n1+N+5;u=[(n-n1)>=0];x1=[(n-n1)>=0]-[(n-n1-N)>=0];x2=[(n>=n1)&(n<(N+n1))];x3=exp(j*n*pi/8).*x2;subplot(2,2,1);stem(n,x1,'.');xlabel('n');ylabel('x1(n)');axis([n0,max(n),0,1]);subplot(2,2,3);stem(n,x2,'.');xlabel('n');ylabel('x2(n)');axis([n0,max(n),0,1]);subplot(2,2,2);stem(n,real(x3),'.'); xlabel('n');ylabel('x3(n)的实部');line([n0,max(n)],[0,0]);axis([n0,max(n),-1,1]);subplot(2,2,4);stem(n,imag(x3),'.'); xlabel('n');ylabel('x3(n)的虚部');line([n0,max(n)],[0,0]);axis([n0,max(n),-1,1]);[1.3]利用已知条件,利用MATLAB生成图形。
傅里叶光学实验傅里叶光学原理的发明最早可以追溯到1893年阿贝(Abbe )为了提高显微镜的分辨本领所做的努力。
他提出一种新的相干成象的原理,以波动光学衍射和干涉的原理来解释显微镜的成像的过程,解决了提高成像质量的理论问题。
1906年波特(Porter )用实验验证了阿贝的理论。
1948年全息术提出,1955年光学传递函数作为像质评价兴起,1960年由于激光器的出现使相干光学的实验得到重新装备,因此从上世纪四十年代起古老的光学进入了“现代光学”的阶段,而现代光学的蓬勃发展阶段是从上世纪六十年代起开始。
由于阿贝理论的启发,人们开始考虑到光学成像系统与电子通讯系统都是用来收集、传递或者处理信息的,因此上世纪三十年代后期起电子信息理论的结果被大量应用于光学系统分析中。
两者一个为时间信号,一个是空间信号,但都具有线性性和不变性,所以数学上都可以用傅立叶变换的方法。
将光学衍射现象和傅立叶变换频谱分析对应起来,进而应用于光学成像系统的分析中,不仅是以新的概念来理解熟知的物理光学现象,而且使近代光学技术得到了许多重大的发展,例如泽尼克相衬显微镜,光学匹配滤波器等等,因此形成了现代光学中一门技术性很强的分支学科—傅里叶光学。
实验原理:我们知道一个复变函数f(x,y)的傅立叶变换为⎰⎰+-=ℑ=dxdy vy ux 2i y x f y x f v u F )](exp[),()},({),(π ( 1 )F (u,v)叫作f(x,y)的变换函数或频谱函数。
它一般也为复变函数,f(x,y)叫做原函数,也可以通过求F(u,v)逆傅立叶变换得到原函数f(x,y), ⎰⎰+=ℑ=-dudv vy ux 2i v u F v u F y x f 1)](exp[),()},({),(π (2)在光学系统中处理的是平面图形,当光波照明图形时从图形反射或透射出来的光波可用空间两维复变函数(简称空间函数)来表示。
在这些情况下一般都可以进行傅里叶变换或广义的傅里叶变换。
实验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个零点;如果N3、 实验内容和方法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所示。Image图3.3 离散傅里叶变换的时移特性2) 频移特性【例3-4】将序列x(n)=[2,1,-1,8,6,-2,-4,9,-3]的频谱向右移9位,观察它的频移序列的幅值谱和相位谱。MATLAB程序如下:
clf;w=-pi:2*pi/511:pi;deltaw=0.4*pi;x1=[2,1,-1,8,6,-2,-4,9,-3];xk1=abs(freqz(x1,1,w));omega1=angle(freqz(x1,1,w));L=length(x1);n=0:L-1;x2=exp(deltaw*i*n).*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.4所示。Image
图3.4 离散傅里叶变换的频移特性3) 循环卷积性质【例3-5】 已知序列x(n)=[1,3,7,-3,-4,5,-2,6,1],h(n)=[1,-2,3,-2,1],求解x(n)和h(n)的13点循环卷积序列y(n),对比循环卷积序列y(n)与积序列y1(n)=x(n)*h(n)的幅值谱和相位谱。
MATLAB程序如下:clf;w=-pi:2*pi/512;pi;N=13;x=[1,3,7,-3,-4,5,-2,6,1];x=[x,zeros(1,N-length(x))]; %将x的长度扩展至Nh=[1,-2,3,-2,1];h=[h,zeros(1,N-length(h))]; %将h的长度扩展至Nm=[0:N-1];hm=h(mod(-m,N)+1); %将h循环折叠H=toeplitz(hm,[0,h(2:N)]); %用toeplitz函数产生循环卷积矩阵y=x*H; %用向量-矩阵乘法求卷积[xk,w]=freqz(x,1,512,'whole');[hk,w]=freqz(h,1,512,'whole');[yk,w]=freqz(y,1,'whole');yk1=xk.*hk;subplot(2,2,1);plot(w/pi,abs(yk));grid on;title('卷积序列的幅值谱');subplot(2,2,2);plot(w/pi,abs(yk1));grid on;title('序列积的幅值谱');subplot(2,2,3);plot(w/pi,angle(yk));grid on;title('卷积序列的相位谱');subplot(2,2,4);plot(w/pi,angle(yk1));grid on;title('序列积的相位谱');set(gcf,'color','w');离散傅里叶变换的循环卷积性质如图3.5所示。Image
图3.5 离散傅里叶变换的循环卷积性质 4、 程序设计实验