傅里叶变换算法详细介绍

合集下载

傅里叶变换实验的算法原理

傅里叶变换实验的算法原理

傅里叶变换实验的算法原理引言傅里叶变换是一种数学工具,用于将一个函数从时间域转换到频率域。

它在信号处理、图像处理、通信等领域中得到广泛应用。

傅里叶变换实验是通过计算机程序模拟傅里叶变换的过程,以便更好地理解其基本原理。

基本概念在介绍傅里叶变换的具体算法之前,我们先了解一些基本概念。

时域和频域时域是指信号在时间上的变化情况,例如音频信号的波形图就是时域表示。

频域是指信号在频率上的分布情况,可以通过傅里叶变换将时域信号转换为频域信号。

周期信号和非周期信号周期信号是指具有重复性质的信号,例如正弦波、方波等。

非周期信号则没有明显的重复性质。

频谱频谱表示了一个信号在不同频率上的能量分布情况。

对于周期信号,它的频谱是离散的;对于非周期信号,它的频谱是连续的。

傅里叶变换的基本原理傅里叶变换的基本原理是将一个函数表示为一系列正弦和余弦函数的叠加。

具体而言,傅里叶变换将一个函数f(t)分解为不同频率的正弦和余弦函数的叠加,得到该函数在频域上的表示。

傅里叶级数展开对于周期信号f(t),可以使用傅里叶级数展开来表示。

傅里叶级数展开将周期信号表示为一系列正弦和余弦函数的线性组合。

傅里叶级数展开公式如下:f(t) = a0 + Σ(an*cos(nωt) + bn*sin(nωt))其中,a0是直流分量,an和bn是信号在频率为nω处的幅度,ω是基频(最低频率)。

连续傅里叶变换对于非周期信号f(t),可以使用连续傅里叶变换来表示。

连续傅里叶变换将非周期信号表示为一个连续的频谱。

连续傅里叶变换公式如下:F(ω) = ∫[f(t)*e^(-jωt)]dt其中,F(ω)是信号在频率为ω处的幅度。

离散傅里叶变换实际应用中,我们通常处理的是离散的信号序列。

离散傅里叶变换可以将离散信号表示为一个离散的频谱。

离散傅里叶变换公式如下:X[k] = Σ[x[n]*e^(-j2πnk/N)]其中,X[k]是信号在频率为k/N处的幅度,x[n]是输入信号的离散采样值,N是采样点数。

FFT的算法原理应用

FFT的算法原理应用

FFT的算法原理应用FFT(快速傅里叶变换)是一种用于计算傅里叶变换的算法,它通过分治法和迭代的方式,将O(n^2)时间复杂度的离散傅里叶变换(DFT)算法优化到O(nlogn)的时间复杂度。

FFT算法在信号处理、图像处理、通信系统等领域应用广泛。

1.算法原理:FFT算法的核心思想是将一个长度为n的序列分解为两个长度为n/2的子序列,然后通过递归的方式对子序列进行FFT计算。

在将子序列的FFT结果合并时,利用了傅里叶变换的对称性质,即可以通过递归的方式高效地计算出整个序列的FFT结果。

具体来说,FFT算法可以分为升序计算和降序计算两个过程。

升序计算是将原始序列转换为频域序列的过程,而降序计算则是将频域序列转换回原始序列的过程。

在升序计算中,序列的奇数项和偶数项被分开计算,而在降序计算中,FFT结果被奇数项和偶数项的和和差重新组合成原始序列。

2.算法应用:2.1信号处理:FFT算法在数字信号处理中广泛应用,可以将信号从时域转换为频域,从而实现滤波、降噪、频谱分析等操作。

例如,在音频处理中,可以利用FFT算法对音频信号进行频谱分析,从而实现声音的等化处理或实时频谱显示。

2.2图像处理:FFT算法在图像处理中也有重要的应用。

图像的二维傅里叶变换可以将图像从空间域转换为频域,从而实现图像的频域滤波、频域增强等操作。

例如,可以通过对图像进行傅里叶变换,找到图像中的频域特征,进而实现图像的降噪、边缘检测等功能。

2.3通信系统:FFT算法在通信系统中也有广泛应用,特别是在OFDM (正交频分复用)系统中。

OFDM系统可以将高速数据流分成多个低速子流,然后利用FFT对每一个子流进行频域调制,再通过并行传输的方式将它们叠加在一起。

这样可以提高信号的传输效率和容量,降低频率的干扰。

2.4数据压缩:FFT算法在数据压缩领域也得到了广泛应用。

例如,在JPEG图像压缩算法中,就使用了离散余弦变换(DCT),它可看做是FFT的一种变种。

迭代傅里叶变换算法

迭代傅里叶变换算法

迭代傅里叶变换算法引言傅里叶变换是一种重要的信号处理技术,可以将时域信号转换为频域信号,广泛应用于图像处理、音频处理、通信系统等领域。

传统的傅里叶变换算法需要对整个信号进行一次性计算,计算复杂度较高。

为了提高计算效率,迭代傅里叶变换算法被提出并广泛应用。

什么是迭代傅里叶变换算法迭代傅里叶变换算法(Iterative Fourier Transform Algorithm,简称IFTA)是一种将傅里叶变换分解为多个迭代步骤的算法。

通过多次迭代计算,逐渐逼近傅里叶变换的结果,从而降低计算复杂度。

迭代傅里叶变换算法的原理迭代傅里叶变换算法的原理可以分为以下几个步骤:步骤一:初始化首先,对输入信号进行初始化处理。

将时域信号分成若干个小块,每个小块的长度为N,其中N为2的幂次方。

对于不满足N长度的信号,可以进行填充或截断操作。

步骤二:迭代计算接下来,进行迭代计算。

首先,将每个小块的时域信号进行傅里叶变换,得到频域信号。

然后,根据频域信号计算每个小块的相位信息。

利用相位信息,可以根据傅里叶变换的性质得到下一次迭代的输入信号。

步骤三:迭代终止条件判断在每次迭代计算后,需要判断是否满足终止条件。

终止条件可以是迭代次数达到预定值,或者达到预定的误差范围。

如果满足终止条件,则停止迭代计算,得到最终的频域信号。

步骤四:逆傅里叶变换最后,对得到的频域信号进行逆傅里叶变换,得到最终的时域信号。

迭代傅里叶变换算法的优缺点迭代傅里叶变换算法相比传统的傅里叶变换算法具有以下优点:1.计算效率高:由于将傅里叶变换分解为多次迭代计算,每次迭代的计算复杂度较低,因此整体计算效率较高。

2.内存占用低:迭代傅里叶变换算法只需要保存每次迭代的输入信号和相位信息,不需要同时保存全部的时域信号和频域信号,因此内存占用较低。

3.适用于大数据处理:迭代傅里叶变换算法可以对大数据进行分块处理,适用于处理大规模的信号数据。

然而,迭代傅里叶变换算法也存在一些缺点:1.精度受限:迭代傅里叶变换算法在每次迭代中都会引入一定的误差,因此最终得到的频域信号可能与传统傅里叶变换结果存在一定差异。

FFT算法详解

FFT算法详解

FFT算法详解FFT (Fast Fourier Transform) 是一种高效的离散傅里叶变换算法,用于将时域信号转换为频域信号。

它在信号处理、图像处理、通信领域等具有广泛的应用。

本文将详细介绍FFT算法的原理和实现。

一、傅里叶变换的基本原理傅里叶变换是一种将信号从时域转换到频域的方法。

它将时域信号分解成多个不同频率的正弦和余弦函数的叠加。

傅里叶变换的基本公式为:F(k) = Σ_{n=0}^{N-1} f(n)e^{-2πikn/N}其中,F(k)是频域信号的复数表示,f(n)是时域信号的复数表示,N是信号长度,k是频率。

二、傅里叶变换的问题传统的傅里叶变换算法的时间复杂度为O(N^2),计算量较大,不适用于实时处理大型信号。

FFT算法通过分治的思想,将DFT(Digital Fourier Transform)问题转化为多个子问题,从而降低了计算复杂度。

三、蝶形运算蝶形运算的公式为:y_0=x_0+W_N^k*x_1y_1=x_0-W_N^k*x_1其中,x_0、x_1是输入,y_0、y_1是输出,W_N^k是旋转因子,N是信号长度,k是频率。

四、FFT算法的步骤1.将输入信号分成偶数下标和奇数下标的两个子序列。

2.对两个子序列分别进行FFT变换,得到两个子序列的频域表示。

3.将两个子序列的频域表示合并成完整的频域信号。

4.重复上述步骤,直到得到最终的频域信号。

五、FFT算法的实现1.初始化输入信号和旋转因子。

2.将输入信号按照偶数下标和奇数下标分成两个子序列。

3.对两个子序列分别进行FFT变换,递归调用FFT函数。

4.将两个子序列的频域表示合并成完整的频域信号。

5.返回最终的频域信号。

总结:FFT算法是一种高效的离散傅里叶变换算法,通过分治的思想将DFT问题分解为多个子问题,从而降低了计算复杂度。

它在信号处理、图像处理、通信领域等有着广泛的应用。

掌握FFT算法的原理和实现对于理解信号处理技术和提高算法效率具有重要意义。

fft算法原理

fft算法原理

FFT算法原理一、简介傅里叶变换(Fourier Transform)是数字信号处理领域中一种重要的数学变换方法,常用于信号频谱分析、滤波器设计和图像处理等方面。

快速傅里叶变换(Fast Fourier Transform, FFT)是一种高效的傅里叶变换算法,能够在时间复杂度为O(N log N)的情况下进行离散傅里叶变换(Discrete Fourier Transform, DFT)计算。

本文将介绍FFT算法的原理及其应用。

二、傅里叶变换概述傅里叶变换是一种将一个连续时间域上的信号转换到频域上的数学变换。

对于连续信号f(t),其傅里叶变换F(ω)定义如下:傅里叶变换公式傅里叶变换公式其中,F(ω)表示信号在频率域上的表示,ω是频率参数。

三、离散傅里叶变换(DFT)离散傅里叶变换是对离散信号进行傅里叶变换的方法。

对于离散信号f(n),其中n为整数,其离散傅里叶变换F(k)定义如下:离散傅里叶变换公式离散傅里叶变换公式其中,N是信号的长度,k为频率参数。

DFT的计算复杂度为O(N^2),当信号长度N较大时,计算量会很大。

为了解决这个问题,FFTs算法应运而生。

四、快速傅里叶变换(FFT)快速傅里叶变换是一种分治算法,其思想是将一个N点DFT计算分解为多个较小规模的DFT计算,并利用它们之间的关系加速计算。

FFT算法基于下面的重要性质:一个N点DFT可以分解为两个N/2点DFT的和与差。

具体实现可以采用迭代方式或递归方式。

1. 迭代实现迭代实现FFT算法的步骤如下:1.将N点输入信号重新排列为位逆序(bit-reversal)的顺序;2.将长度为N的输入信号分解为两个长度为N/2的子信号;3.对两个子信号分别进行FFT计算;4.合并两个子信号的计算结果。

迭代实现FFT算法的时间复杂度为O(N log N)。

2. 递归实现递归实现FFT算法的步骤如下:1.如果N=1,直接返回输入信号;2.将长度为N的输入信号分解为两个长度为N/2的子信号;3.对两个子信号递归调用FFT计算;4.合并两个子信号的计算结果。

新手小白一看就会FFT算法的原理详解

新手小白一看就会FFT算法的原理详解

新手小白一看就会FFT算法的原理详解傅里叶变换(Fourier Transform)是一种用于信号分析和图像处理的重要数学方法,它基于信号可以用一组正弦和余弦函数加权和表示的基本原理。

傅里叶变换主要通过将一个信号从时域变换到频域,实现信号的频谱分析和频域处理。

而快速傅里叶变换(Fast Fourier Transform,FFT)则是一种高效实现傅里叶变换的算法。

FFT算法的核心思想是分治策略,即将一个规模为N的问题分解为若干规模为N/2的子问题。

FFT算法借鉴了分治算法的优点,使得傅里叶变换的计算时间复杂度从O(N^2)下降到了O(NlogN),大大提高了计算效率。

下面将详细介绍FFT算法的原理。

首先,考虑需要进行傅里叶变换的一个离散的序列f(x),其中x为序列的下标。

这个序列可以看作是一个多项式的系数,傅里叶变换的目的是求得该多项式的根。

FFT算法的基本思路是将这个多项式分解为奇次和偶次项两个多项式的和,并分别对其进行傅里叶变换。

然后再将变换后的结果合并为最终的结果。

设序列f(x)的长度为N,可以将其分为两部分:f_e(x)=f(2x),其中x为偶数f_o(x)=f(2x+1),其中x为奇数那么f(x)可以表示为f_e(x^2)+f_o(x^2)*x对序列f_e(x)和f_o(x)分别进行N/2点的傅里叶变换,得到变换后的序列F_e(x)和F_o(x)。

接下来将F_e(x)和F_o(x)合并为最终的结果F(x)。

根据频域上两个序列的关系可知:F(x)=F_e(x)+W_N^x*F_o(x)其中W_N^x表示复数的单位根,即在单位圆上的第x个点。

根据Euler公式可知 W_N = exp(-2πi/N),则 W_N^x = exp(-2πi/N)^x,在计算机中可以通过查表或者递推的方式计算出。

最后,递归地将N个点的傅里叶变换转化为两个N/2个点的傅里叶变换,并利用合并的方式得到最终的结果。

总体而言,FFT算法可以通过递归的方式将一个长度为N的序列的傅里叶变换转化为两个长度为N/2的序列的傅里叶变换,并通过合并得到最终结果。

迭代傅里叶变换算法

迭代傅里叶变换算法

迭代傅里叶变换算法
迭代傅里叶变换算法,也称FFT算法,是一种高效计算傅里叶变换的方法。

它将一个长度为N的序列分解为长度为N/2的两个序列,并递归分解至长度为2的序列,然后通过一系列乘法和加法的计算,得到原来序列的傅里叶变换。

FFT算法的时间复杂度为O(NlogN),远远快于Naive方法的O(N^2)。

FFT算法的基本思想是将一个N点序列分解为两个N/2点序列,然后递归地继续分解。

当序列长度为2时,直接计算出这两个点的傅里叶系数,并合并为长度为N的结果序列。

在合并过程中,需要对相邻的两个长度为N/k的序列进行DFT,其中k是2的整数幂。

这个过程可以通过蝴蝶操作(Butterfly Operation)来实现。

每个蝴蝶操作都是两个点之间的复数乘法和加法,因此可以使用硬件加速器来加速计算。

FFT算法的优点在于,它可以利用频率间的重复性来减少计算量。

在计算傅里叶变换时,大多数频率分量都是无用的,并且它们会反复出现在不同的时间窗口中。

FFT算法可以利用这种重复性,避免计算相同的傅里叶系数。

这个思想也被应用到其他领域中,比如数字信号处理和图像处理。

FFT算法的应用广泛,包括音频处理、图像处理、信号分析等。

在音
频处理中,FFT算法常被用来分析音频信号的频谱。

在图像处理中,FFT算法可以用来实现快速傅里叶变换(Fourier Transform),并将图像转换到频域中进行滤波和处理。

总之,FFT算法是一种非常重要的数值计算方法,它的高效性和广泛应用使得它成为科学计算中不可或缺的工具之一。

fft算法原理

fft算法原理

fft算法原理FFT算法原理。

快速傅里叶变换(FFT)是一种计算机算法,用于高效地计算离散傅里叶变换(DFT),是信号处理、图像处理、数据压缩、密码学等领域中广泛应用的重要算法。

本文将介绍FFT算法的原理及其应用。

傅里叶变换是一种信号处理中常用的数学工具,它可以将一个信号从时间域转换到频率域,从而揭示出信号的频率成分。

DFT是傅里叶变换的离散形式,它将N个离散时间点的信号转换为N个离散频率点的频谱。

然而,传统的DFT算法复杂度为O(N^2),计算量较大,特别是对于大规模数据而言,计算时间将会变得非常长。

FFT算法的出现正是为了解决这一问题,它将DFT的计算复杂度降低到O(NlogN),大大提高了计算效率。

FFT算法的原理主要基于分治法和递归思想。

它将一个长度为N的DFT分解为两个长度为N/2的DFT,然后通过递归地计算子问题的DFT,最终将问题规模缩小到1。

在计算过程中,FFT算法利用了信号的周期性质,通过旋转因子来降低计算复杂度。

具体而言,FFT算法利用了蝶形运算结构,将DFT的计算过程分解为多个阶段,每个阶段都是对一组蝶形运算的计算,从而实现了计算量的大幅度减少。

除了计算效率高之外,FFT算法还具有良好的数值稳定性和精度。

它可以准确地计算出信号的频谱分量,并且由于其递归的特性,FFT算法非常适合于并行计算,可以充分利用多核处理器和分布式计算系统的优势,进一步提高计算效率。

在实际应用中,FFT算法被广泛应用于数字信号处理、音频处理、图像处理、通信系统、雷达系统等领域。

例如,在音频处理中,FFT算法可以用于音频频谱分析、音频合成、降噪等方面;在通信系统中,FFT算法可以用于调制解调、信道均衡、频谱分析等方面。

此外,FFT算法还被广泛应用于科学计算、地震勘探、医学影像处理等领域。

总之,FFT算法作为一种高效的计算傅里叶变换的算法,具有计算效率高、精度高、稳定性好等优点,被广泛应用于各个领域。

随着计算机硬件性能的不断提升,FFT算法的应用前景将更加广阔,有望在更多领域发挥重要作用。

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

从头到尾彻底理解傅里叶变换算法、上前言第一部分、DFT第一章、傅立叶变换的由来第二章、实数形式离散傅立叶变换(Real DFT)从头到尾彻底理解傅里叶变换算法、下第三章、复数第四章、复数形式离散傅立叶变换/***************************************************************************************************/这一片的傅里叶变换算法,讲解透彻,希望对大家会有所帮助。

感谢原作者们(July、dznlong)的精心编写。

/**************************************************************************************************/前言:―关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让人很难能够从感性上得到理解‖---dznlong,那么,到底什么是傅里叶变换算法列?傅里叶变换所涉及到的公式具体有多复杂列?傅里叶变换(Fourier transform)是一种线性的积分变换。

因其基本思想首先由法国学者傅里叶系统地提出,所以以其名字来命名以示纪念。

哦,傅里叶变换原来就是一种变换而已,只是这种变换是从时间转换为频率的变化。

这下,你就知道了,傅里叶就是一种变换,一种什么变换列?就是一种从时间到频率的变化或其相互转化。

ok,咱们再来总体了解下傅里叶变换,让各位对其有个总体大概的印象,也顺便看看傅里叶变换所涉及到的公式,究竟有多复杂:以下就是傅里叶变换的4种变体(摘自,维基百科)连续傅里叶变换一般情况下,若―傅里叶变换‖一词不加任何限定语,则指的是―连续傅里叶变换‖。

连续傅里叶变换将平方可积的函数f(t)表示成复指数函数的积分或级数形式。

这是将频率域的函数F(ω)表示为时间域的函数f(t)的积分形式。

连续傅里叶变换的逆变换(inverse Fourier transform)为:即将时间域的函数f(t)表示为频率域的函数F(ω)的积分。

一般可称函数f(t)为原函数,而称函数F(ω)为傅里叶变换的像函数,原函数和像函数构成一个傅里叶变换对(transform pair)。

除此之外,还有其它型式的变换对,以下两种型式亦常被使用。

在通信或是信号处理方面,常以来代换,而形成新的变换对:或者是因系数重分配而得到新的变换对:一种对连续傅里叶变换的推广称为分数傅里叶变换(Fractional Fourier Transform)。

分数傅里叶变换(fractional Fourier transform,FRFT)指的就是傅里叶变换(Fourier transform,FT)的广义化。

分数傅里叶变换的物理意义即做傅里叶变换a 次,其中a 不一定要为整数;而做了分数傅里叶变换之后,信号或输入函数便会出现在介于时域(time domain)与频域(frequency domain)之间的分数域(fractional domain)。

当f(t)为偶函数(或奇函数)时,其正弦(或余弦)分量将消亡,而可以称这时的变换为余弦变换(cosine transform)或正弦变换(sine transform).另一个值得注意的性质是,当f(t)为纯实函数时,F(−ω) = F*(ω)成立.傅里叶级数连续形式的傅里叶变换其实是傅里叶级数(Fourier series)的推广,因为积分其实是一种极限形式的求和算子而已。

对于周期函数,其傅里叶级数是存在的:其中Fn为复幅度。

对于实值函数,函数的傅里叶级数可以写成:其中an和bn是实频率分量的幅度。

离散时域傅里叶变换离散傅里叶变换是离散时间傅里叶变换(DTFT)的特例(有时作为后者的近似)。

DTFT 在时域上离散,在频域上则是周期的。

DTFT可以被看作是傅里叶级数的逆变换。

离散傅里叶变换离散傅里叶变换(DFT),是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。

在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。

即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。

在实际应用中通常采用快速傅里叶变换以高效计算DFT。

为了在科学计算和数字信号处理等领域使用计算机进行傅里叶变换,必须将函数xn定义在离散点而非连续域内,且须满足有限性或周期性条件。

这种情况下,使用离散傅里叶变换(DFT),将函数xn表示为下面的求和形式:其中Xk是傅里叶幅度。

直接使用这个公式计算的计算复杂度为O(n*n),而快速傅里叶变换(FFT)可以将复杂度改进为O(n*lgn)。

(后面会具体阐述FFT是如何将复杂度降为O(n*lgn)的。

)计算复杂度的降低以及数字电路计算能力的发展使得DFT成为在信号处理领域十分实用且重要的方法。

下面,比较下上述傅立叶变换的4种变体,如上,容易发现:函数在时(频)域的离散对应于其像函数在频(时)域的周期性。

反之连续则意味着在对应域的信号的非周期性。

也就是说,时间上的离散性对应着频率上的周期性。

同时,注意,离散时间傅里叶变换,时间离散,频率不离散,它在频域依然是连续的。

如果,读到此,你不甚明白,大没关系,不必纠结于以上4种变体,继续往下看,你自会豁然开朗。

(有什么问题,也恳请提出,或者批评指正)ok,本文,接下来,由傅里叶变换入手,后重点阐述离散傅里叶变换、快速傅里叶算法,到最后彻底实现FFT算法,全篇力求通俗易懂、阅读顺畅,教你从头到尾彻底理解傅里叶变换算法。

由于傅里叶变换,也称傅立叶变换,下文所称为傅立叶变换,同一个变换,不同叫法,读者不必感到奇怪。

第一部分、DFT第一章、傅立叶变换的由来要理解傅立叶变换,先得知道傅立叶变换是怎么变换的,当然,也需要一定的高等数学基础,最基本的是级数变换,其中傅立叶级数变换是傅立叶变换的基础公式。

一、傅立叶变换的提出傅立叶是一位法国数学家和物理学家,原名是Jean Baptiste Joseph Fourier(1768-1830), Fourier于1807年在法国科学学会上发表了一篇论文,论文里描述运用正弦曲线来描述温度分布,论文里有个在当时具有争议性的决断:任何连续周期信号都可以由一组适当的正弦曲线组合而成。

当时审查这个论文拉格朗日坚决反对此论文的发表,而后在近50年的时间里,拉格朗日坚持认为傅立叶的方法无法表示带有棱角的信号,如在方波中出现非连续变化斜率。

直到拉格朗日死后15年这个论文才被发表出来。

谁是对的呢?拉格朗日是对的:正弦曲线无法组合成一个带有棱角的信号。

但是,我们可以用正弦曲线来非常逼近地表示它,逼近到两种表示方法不存在能量差别,基于此,傅立叶是对的。

为什么我们要用正弦曲线来代替原来的曲线呢?如我们也还可以用方波或三角波来代替呀,分解信号的方法是无穷多的,但分解信号的目的是为了更加简单地处理原来的信号。

用正余弦来表示原信号会更加简单,因为正余弦拥有原信号所不具有的性质:正弦曲线保真度。

一个正余弦曲线信号输入后,输出的仍是正余弦曲线,只有幅度和相位可能发生变化,但是频率和波的形状仍是一样的。

且只有正余弦曲线才拥有这样的性质,正因如此我们才不用方波或三角波来表示。

二、傅立叶变换分类根据原信号的不同类型,我们可以把傅立叶变换分为四种类别:1、非周期性连续信号傅立叶变换(Fourier Transform)2、周期性连续信号傅立叶级数(Fourier Series)3、非周期性离散信号离散时域傅立叶变换(Discrete Time Fourier Transform)4、周期性离散信号离散傅立叶变换(Discrete Fourier Transform)下图是四种原信号图例(从上到下,依次是FT,FS,DTFT,DFT):这四种傅立叶变换都是针对正无穷大和负无穷大的信号,即信号的的长度是无穷大的,我们知道这对于计算机处理来说是不可能的,那么有没有针对长度有限的傅立叶变换呢?没有。

因为正余弦波被定义成从负无穷小到正无穷大,我们无法把一个长度无限的信号组合成长度有限的信号。

面对这种困难,方法是:把长度有限的信号表示成长度无限的信号。

如,可以把信号无限地从左右进行延伸,延伸的部分用零来表示,这样,这个信号就可以被看成是非周期性离散信号,我们可以用到离散时域傅立叶变换(DTFT)的方法。

也可以把信号用复制的方法进行延伸,这样信号就变成了周期性离散信号,这时我们就可以用离散傅立叶变换方法(DFT)进行变换。

本章我们要讲的是离散信号,对于连续信号我们不作讨论,因为计算机只能处理离散的数值信号,我们的最终目的是运用计算机来处理信号的。

但是对于非周期性的信号,我们需要用无穷多不同频率的正弦曲线来表示,这对于计算机来说是不可能实现的。

所以对于离散信号的变换只有离散傅立叶变换(DFT)才能被适用,对于计算机来说只有离散的和有限长度的数据才能被处理,对于其它的变换类型只有在数学演算中才能用到,在计算机面前我们只能用DFT方法,后面我们要理解的也正是DFT方法。

这里要理解的是我们使用周期性的信号目的是为了能够用数学方法来解决问题,至于考虑周期性信号是从哪里得到或怎样得到是无意义的。

每种傅立叶变换都分成实数和复数两种方法,对于实数方法是最好理解的,但是复数方法就相对复杂许多了,需要懂得有关复数的理论知识,不过,如果理解了实数离散傅立叶变换(real DFT),再去理解复数傅立叶变换就更容易了,所以我们先把复数的傅立叶变换放到一边去,先来理解实数傅立叶变换,在后面我们会先讲讲关于复数的基本理论,然后在理解了实数傅立叶变换的基础上再来理解复数傅立叶变换。

还有,这里我们所要说的变换(transform)虽然是数学意义上的变换,但跟函数变换是不同的,函数变换是符合一一映射准则的,对于离散数字信号处理(DSP),有许多的变换:傅立叶变换、拉普拉斯变换、Z变换、希尔伯特变换、离散余弦变换等,这些都扩展了函数变换的定义,允许输入和输出有多种的值,简单地说变换就是把一堆的数据变成另一堆的数据的方法。

三、一个关于实数离散傅立叶变换(Real DFT)的例子先来看一个变换实例,下图是一个原始信号图像:这个信号的长度是16,于是可以把这个信号分解9个余弦波和9个正弦波(一个长度为N的信号可以分解成N/2+1个正余弦信号,这是为什么呢?结合下面的18个正余弦图,我想从计算机处理精度上就不难理解,一个长度为N的信号,最多只能有N/2+1个不同频率,再多的频率就超过了计算机所能所处理的精度范围),如下图:9个余弦信号:9个正弦信号:把以上所有信号相加即可得到原始信号,至于是怎么分别变换出9种不同频率信号的,我们先不急,先看看对于以上的变换结果,在程序中又是该怎么表示的,我们可以看看下面这个示例图:上图中左边表示时域中的信号,右边是频域信号表示方法,从左向右,-->,表示正向转换(Forward DFT),从右向左,<--,表示逆向转换(Inverse DFT),用小写x[]表示信号在每个时间点上的幅度值数组, 用大写X[]表示每种频率的副度值数组(即时间x-->频率X),因为有N/2+1种频率,所以该数组长度为N/2+1,X[]数组又分两种,一种是表示余弦波的不同频率幅度值:Re X[],另一种是表示正弦波的不同频率幅度值:Im X[],Re是实数(Real)的意思,Im是虚数(Imagine)的意思,采用复数的表示方法把正余弦波组合起来进行表示,但这里我们不考虑复数的其它作用,只记住是一种组合方法而已,目的是为了便于表达(在后面我们会知道,复数形式的傅立叶变换长度是N,而不是N/2+1)。

相关文档
最新文档