傅里叶变换将信号分解为正弦波,离散傅里叶变换DFT基于数字信号。real DFT是将输入输出信号都用实数表示,一般用复数DFT,但实数DFT是基础。
傅里叶变换族
傅里叶变换是傅里叶在研究热传导时发现的,他提出用正弦波代表温度分布并向法兰西学会提交论文。但当时的法兰西学会权威拉格朗日对此理论并不赞成,拉格朗日认为傅里叶的方法不能代表非连续信号。实际上拉格朗日某些条件下是对的,因为正弦波之和确实无法表示非连续信号,但却可以无限接近,即两者能量无限接近。这种现象叫做吉布斯效应。当信号为离散信号时傅里叶分解完全成立,拉格朗日所拒绝的是连续信号。
一个16点长度信号被分解为正弦信号和余弦信号,如下图所示:
如上图所示傅里叶分解将此信号分解为9个正弦信号和9个余弦信号。每个都有不同的幅度和频率。至于为何选用正弦波而不是三角波或者方波进行分解,这主要正弦信号特有的特性:正弦信号保真度。正弦信号输入到一个系统中其输出仍为正弦信号,其频率和波形保持不变,只有其幅度和相位发生改变。正弦曲线是唯一有此特性的波。
傅里叶变换可以根据4种不同信号分为4类,信号可以是离散或者连续的,也可能是周期的或者非周期的。因此可以分为以下4类:
非周期连续
这种信号傅里叶变换简单的叫做傅里叶变换FT
周期连续
这种信号傅里叶变换叫做傅里叶级数FS
非周期离散
这种信号傅里叶变换叫做离散时间傅里叶变换DTFT
周期离散
这种信号傅里叶变换叫做离散傅里叶变换DFT
这四种信号都延伸到正负无穷,是否有信号傅里叶变换可以转换有限长度信号?答案是没有,因为正弦波和余弦波都是延伸到无穷。你不能将一组无穷长度信号组合成一个有限长度信号。那处理有限长度信号时将其认为无线长度信号即可。如果将有限长度信号没有值的位置都认为是0则信号是离散非周期的,可以用DTFT;如果将没有值的位置认为是有信号位置处的简单复制,则信号可以认为是周期离散这时可以用DFT。实际上,对于非周期信号需要无限多个正弦波和余弦波来合成,因此实际在计算机算法中DTFT是不可能的。在实际应用中唯一可用的是DFT。
对于第一个例子16个点的傅里叶变换,将其认为是16个点正弦波的合成的16个点的信号或者是由无限长正弦波合成的无限长周期信号是否有区别?一般来说没区别,但某些情况下会有所不同。
Real DFT
N点输入信号经过实数傅里叶变换转换为两个N/2+1点的输出信号。输入信号包含将要被分解的信号,两个输出信号包含正弦和余弦波分量的幅度。输入信号认为是时域信号因为一般是时域采样获得。频域用来描述正弦和余弦波的幅度。
频域和时域包含相同信息,只是不同的表现形式。给定一个域的信号就可以计算出另外一个。假如给定时域信号,计算频域信号的过程叫做分解、分析或者前向DFT。如果知道频域信号,计算时域信号叫做综合或者反向DFT。
频域中频率的表示
频域横坐标轴有4种不同表示方法:
1、0~N/2写程序者喜欢这一做法
2、分数采样率f范围0~0.5,因为离散数据可以包含DC到1/2采样率的频率。f=k/N。
3、自然频率w,将f乘以2π得到。数学家喜欢这种方法。
4、模拟频率,直观对应实际世界的意义。
DFT基函数
DFT中用到的正弦波和余弦波叫做DFT基函数。换句话说,DFT的输出是一组代表幅度的数。基函数是一组单位幅度的正弦波和余弦波。将这些正余弦波幅度设置为合适幅度将其相加就可以得到时域信号。
如下图例子
c1[]是在N点中有一个完整周期的的余弦函数,c5[]是在N点中有5个完整周期的余弦函数。频率参数k等于N点信号的周期数。
如图c0[]值恒为1,他代表直流偏置DC offset。s0[]全零不影响时域信号。c16[]在+1和-1之间变换,采样连续正弦波的峰值。s16[]为全零。因此N点DFT输入,虽然输出有N+2个sample,但是有两个为全零即不包含任何信息。
综合,计算逆DFT(IDFT)
综合方程
N点信号x[i]可以通过将N/2+1个余弦波和N/2+1个余弦波相加获得。正弦和余弦波的幅度乘以基函数并将这些相加就产生时域信号。注意综合所需的幅度与频域信号的幅度有些许不同。
下图给出了IDFT的例子,显示了频域幅度和与需要综合的幅度的差异,a是一个幅度为32的脉冲,b是a的频率响应,频率响应实部是恒定值32,虚部全为0。这是一个重要的DFT变换对,时域麦种对应于频域的恒定值。a和b是DFT变换对。将b中频域信号转换为需要综合的余弦波的幅度。
至于频域幅度和正弦波幅度为何有差异,那是因为频域根据谱密度定义。
分析,计算DFT
DFT可以根据三种完全不同的方法计算。第一种方法是联立方程法,这种方法对于理解DFT有益,但实际应用来说效率太低。第二种方法是相关,这种方法基于在另一种信号中检测已知的波形。第三种方法是快速傅里叶变换FFT。FFT算法将N点DFT转换为N个单点DFT。实际应用中DFT点数少于32点时用相关法,其他情况都用FFT法。
联立方程计算DFT
时域N个值计算频域N个值(忽略2个比为0的频域值),对于N个未知数需要N个线性独立方程。将每个正弦波第一个采样点相加得到时域第一个采样点也即第一个方程,同样方法可以总共得到N个方程。
相关法计算DFT
计算DFT的标准方法。假如我们想要计算64点的DFT,我们需要计算频域实部的33个点和虚部的33个点。假设对于虚部的ImX[3],表示要知道在0~63点之间三个完整周期正弦波的幅度。其他频域值的计算也类似。
下图阐述了用相关法计算ImX[3],上面两个显示了两个时域信号x1[]和x2[],x1[]表示一个0-63点包含三个周期的正弦波,作为对比x2[]包括几个正弦和余弦波,这些组成中不包括0-63点有三个周期的正余弦波。这两个信号阐述了计算ImX[3]的算法过程。对于x1[],算法产生值32,也即正弦波代表的信号幅度。作为对比,对于x2[],算法产生0,也意味着这个特殊的正弦波没在这个信号中出现。
相关的概念是将两个信号相乘并将所有点相加代表了一直波形在另一个信号的存在情况。这个过程的结果代表了两个信号的相似度。中间两个图显示了我们想要得到的信号即在采样点0~63有三个周期的正弦波。最下面图显示了两者的乘积。
频域其他采样点也用相同的方法计算。
分析方程不需要对第一个和最后一个点做特殊处理。但是对于虚部需要有个负号,负号是为了使实数DFT与复数DFT一致。为了使相关算法工作,基函数必须互不相关,也即正交。
二元性
综合和分析方程非常相似。为了从一个域转换到另一个域,将已知的值乘以基函数并且将结果相加。两个方程最大的区别是时域是N点信号,而频域是两个N/2+1点信号。而对于复数DFT时域频域都是包含N点。这样两个域就完全对称。二元性也带来一些有趣的性质,比如时域的一个点对应于频域的正弦波,反过来也成立即频域的一个点对应于时域的正弦波。另外一个例子是时域卷积对应于频域相乘,同时频域卷积对应于时域相乘。
极坐标表示
如前面描述频域是一组正余弦波的幅度表示,这种表示叫做矩形表示,频域也可以极坐标形式表示。即原来的实部和虚部表示可以转换为幅度和相位表示。实部和虚部与幅度和相位的样点是一一对应的。
矩形表示和极坐标表示是等价的不会损失任何信息。
矩形和极坐标表示可以让你用两种方法来考虑DFT。在矩形表示中DFT将N点信号分解为N/2+1个正弦波和N/2+1个余弦波,每一个有特定的幅度。在极坐标表示中,DFT将N点信号分解为N/2+1个余弦波形,每一个有特定的幅度和相移。对于极坐标表示为什么不用正弦波代替余弦波,因为正弦波不能表示直流分量DC。
尽管极坐标和矩形表示包含相同信息但很多例子表明一种表示会更好用。
矩形表示适合用来计算,作为对比图形表示一般用极坐标形式。为何频域表示更易懂?这也是为何将信号分解为正弦波形式有意义。如果将正弦波输入到线性系统,输出也将是同频率正弦波,只有幅度和相位发生改变。系统也可以用来表示他们如何改变每个正弦波的幅度和相位。而对于矩形表示,正弦波和余弦波进入线性系统,一个正弦波输入可能输出既有正弦波也有余弦波。
极坐标表示的缺点
弧度和度数
radians -π~π
degree -180~180
除以0的错误
当从矩形形式转换到极坐标形式时,实部为0而虚部非0时相位为90度或者-90度,但是求arctan时除数为0.为避免这个问题,如果实部为0检查虚部的正负来确定相位。或者是将实部置为一个非常小的数来进行后续的除法。
不正确的arctan
ReX=1,ImX=1则Phase=45°,ReX=-1,ImX=-1则Phase=135°,但是直接求arctan时两者都为45°。实际计算完arctan后再根据实部和虚部的正负进行调整。
幅度非常小时的相位
幅度太小,舍入误差导致相位无意义。
2π相位模糊
幅度总为正(π相位模糊)
幅度总为正值,当实部小于0时,幅度将相位改变π保持正值。一种方法是允许幅度有负值,这样幅度与实部相同值。相位为全0。用unwrapped 幅度表示允许有负值的幅度。
来源:CSDN
作者:少林达摩祖师
链接:https://blog.csdn.net/special00/article/details/103563931