MATLAB实验傅里叶分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB实验傅里叶分析

实验七 傅里叶变换

一、实验目的

傅里叶变换是通信系统、图像处理、数字信号处理以及物理学等领域内的一种重要的数学分析工具。通过傅里叶变换技术可以将时域上的波形分 布变换为频域上的分布,从而获得信号的频谱特性。MATLAB 提供了专门的函数fft 、ifft 、fft2(即2维快速傅里叶变换)、ifft2以及fftshift 用于实现对信号的傅里叶变换。本次实验的目的就是练习使用fft 、ifft 以及fftshift 函数,对一些简单的信号处理问题能够获取其频谱特性(包括幅频和相频特性)。

二、实验预备知识

1. 离散傅里叶变换(DFT)以及快速傅里叶变换(FFT)简介

设x (t )是给定的时域上的一个波形,则其傅里叶变换为

2()() (1)j ft X f x t e dt π∞--∞=⎰

显然X ( f )代表频域上的一种分布(波形),一般来说X ( f )是复数。而傅里叶逆变换定义为:

2()() (2)j ft

x t X f e df π∞-∞

=⎰

因此傅里叶变换将时域上的波形变换为频域上的波形,反之,傅里叶逆变换则将频域上的波形变换为时域上的波形。

由于傅里叶变换的广泛应用,人们自然希望能够使用计算机实现傅里叶变换,这就需要对傅里叶变换(即(1)式)做离散化处理,使

之符合电脑计算的特征。另外,当

把傅里叶变换应用于实验数据的分

析和处理时,由于处理的对象具有

离散性,因此也需要对傅里叶变换

进行离散化处理。而要想将傅里叶

变换离散化,首先要对时域上的波

形x (t )进行离散化处理。采用一个

时域上的采样脉冲序列: δ (t -nT ), n = 0, 1, 2, …, N -1;

可以实现上述目的,如图所示。其中N 为采样点数,T 为采样周期;f s = 1/T 是采样频率。注意采样时,采样频率f s 必须大于两倍的信号频率(实际是截止频率),才能避免混迭效应。 接下来对离散后的时域波形()()()(x t x t t n T x n T δ=

-=的傅里叶变换()X f 进行离散处理。与上述做法类

似,采用频域上的δ脉冲序列: x (t δ x (t )δ t t t

δ ( f -n/T 0), n = 0, 1, 2, …, N -1;T 0= NT 为总采样时间

可以实现傅里叶变换()X f 的离散化,如下图示。不难看出,离散后的傅里叶变换其频率间隔(频率轴上离散点的间隔,即频域分辨

率)

011 (3)s f f T NT N ∆===

因此要增加分辨率须增加采样

点数目N 。频域上每个离散点对

应的频率为:

0; 0,1,2,...,-1 (4)s n f n n f n n N T NT N ====显然n = 0的点对应于直流成分。

经过以上离散化处理之后,连续积分的傅里叶变换(1)式转变为如下离散形式:

12/0()(), 0,1,2,..., 1 (5)

N j nk N n k k X f x t e n N π--===-∑其中t k = kT

(k =0,1,2,…,N-1)代表采样点时刻。X ( f n )一般是复数,因此离散傅里叶变换(DFT)后变成一个N 点(采样点数)的复数序列。X ( f n )绝对值代表振幅,其幅角代表相位,因此由(5)式可以给出DFT 的振幅频谱和相位频谱。(5)式通常又简写f f f ()X f δ (f -X

(混

成如下形式:

10()(), 0,1,2,..., 1 (6)

N nk N k X n x k W n N -===-∑

其中 2/ j N N W e π-=,x 是采样点数据,它是一个N 个点的向量,DFT 的结果X 是N 个点的复数向量。(5)式或(6)式就是对傅里叶变换进行数值计算的基础。

一般采样点数N 越大,DFT 的结果越接近真实的情况,但是当N 较大时,(6)式的计算量很大,因为使用计算机求解(6)式时,总共要执行N 2次复数乘法和N×(N-1)次复数加法。所以直接用DFT 算法(即(5)式)进行谱分析和信号的实时处理是不切实际的。为了减轻计算的压力,人们提出了一种所谓快速傅里叶变换(FFT )的思想:

取N =2m ,首先将N 个点的采样数据011[,,...,]N x x x x -=分成两个N /2点的序列:

1022[,,...,]N x x x x -= (偶数序列)

2131[,,...,]N x x x x -= (奇数序列)

这样处理的好处是可以把(6)式分解为两个N/2点的DFT ,使计算量降下来。接下来再将N/2点的序列x 1仿照上述做法进一步分裂成2个N/4

点的序列x3和x4,另一序列x2亦做如此处理,分裂成2个N/4点的序列x5和x6。这样两个N/2点的序列分成了更短的4个N/4点的序列,依次类推,最后的结果是将一个N点的序列x裂成了N个点的单点序列:x0, x1, x2, …, x N-1。这样做可以将DFT的运算效率提高1-2个数量级,为数字信号处理技术应用于各种信号的实时处理创造了条件,从而推动数字处理技术的发展。由此可见FFT的思想实质是不断地把长序列的DFT计算分解成若干短序列的DFT,并利用旋转因子(即W N )的周期性和对称性来减少DFT 的运算次数。所以FFT就是DFT的快速算法。

有关FFT算法的详细介绍和理论推导参见有关的书籍,这里不做进一步介绍。

2. FFT的MATLAB实现

为了实现快速傅里叶变换,MATLAB提供了fft、ifft、fft2、ifft2以及fftshift函数,分别用于一维和二维离散傅里叶变换(DFT)及其逆变换。借助这些函数可以完成很多信号处理任务。考虑到信号处理包含的领域很广泛,这里只介绍一维傅里叶变换及其逆变换函数。

相关文档
最新文档