FFT详解

FFT详解

**摘要:**由于信号在时域上的特征不明显,所以采用傅里叶变换的方式映射到频域上以获得更丰富的信息,对于数字系统,FFT可以有效降低离散傅里叶变换的运算量,减轻系统压力。本文主要从时域与频域关系,傅里叶变换,FFT三方面介绍FFT相关知识。

时域与频域

  1. 时域是指真实世界,是唯一存在的域。频域实际并不存在,是由数学运算构造而成的。
  2. 频谱:任何一个满足狄利克雷条件周期连续信号都可以等效为一组三角函数的线性组合,如下图所示:

在这里插入图片描述
侧面看到的是矩形波在频域的样子,就是俗称的频谱。从时域来看,我们会看到一个近似为矩形的波,而我们知道这个矩形的波可以被差分为一些正弦波的叠加。而从频域方向来看,我们就看到了每一个正弦波的幅值,可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为 0 的正弦波。
3. 相位谱:频谱只代表了一个正弦函数的幅值,而要准确描述一个正弦函数,我们不仅需要幅值,还需要相位,不同相位决定了波的位置。如下图所示:
在这里插入图片描述
投影点我们用粉色点来表示,红色的点表示离正弦函数频率轴最近的一个峰值,而相位差就是粉色点和红色点水平距离除以周期。将相位差画到一个坐标轴上就形成了相位谱。注意,时间差与相位差并不完全等同,如果将全部周期看作2Pi或者360度的话,相位差则是时间差在一个周期中所占的比例。我们将时间差除周期再乘2Pi,就得到了相位差。

傅里叶变换

  1. 傅里叶变换的定义:满足狄利克雷条件的函数可以表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合,而傅里叶变换就是得到这个线性组合的方法。即任意周期信号可以分解为直流分量和一组不同幅值、频率、相位的正弦波。分解的方法就是傅里叶变换。同时,这些正弦波的频率符合一个规律,这些正弦波的频率是某个频率的整数倍(称为基波频率),其它频率称为谐波频率,如果谐波的频率是基波频率的N倍,就称为N次谐波。直流分量的频率为零,是基波频率的零倍,也可称零次谐波。
  2. 正弦波的特性:正弦波输入至任何线性系统,输出的还是正弦波,仅仅是幅值和相位发生改变。正弦波输入至线性系统,不会产生新的频率成分(非线性系统如变频器,就会产生新的频率成分,称为谐波)。用单位幅值的不同频率的正弦波输入至某线性系统,记录其输出正弦波的幅值和频率的关系,就得到该系统的幅频特性,记录输出正弦波的相位和频率的关系,就得到该系统的相频特性。对于一个线性系统,多个正弦波叠加后输入至一个系统,输出是所有正弦波独立输入时对应输出的叠加。因此,只要知道正弦波的输入输出关系,就可以知道该系统对任意输入信号的响应。
  3. 傅里叶变换的求法:正弦函数具有正交性,所谓正交性,是指任意两个不同频率的正弦波的乘积,在两者的公共周期内的积分等于零。以下以检波器为例:
    检波器A由一个乘法器和一个积分器构成,乘法器的一个输入为已知频率为f的单位幅值正弦波,另一个输入为待变换的信号。检波器A的输出只与待变换信号中的频率为f的正弦分量的幅值和相位有关(因为正交性)。待变信号是未知的,可能包含各种频率分量。因为其它频率分量与标准正弦信号乘积的积分都等于零,检波器A可以当它们不存在。经过检波器A,输出就只剩下与频率为f分量有关的一个量,这个量等于待变换信号中频率为f分量与标准正弦信号f的乘积的积分。但正弦函数(相位为0)是一个奇函数,所以输出不等于0,可以说明输入信号包含频率为f的分量,但不能说明输出为0,输入信号就一定没有包含频率为f的分量。所以设计一个模型相同的检波器B,它与A的区别就是检波器B用一个标准余弦信号(频率也为f)替代滤波器A中的标准正弦信号。这样如果待变换信号中包含频率为的f分量,检波器A和检波器B至少有一个输出不等于零。再把标准正弦信号f和标准余弦信号f的频率替换成任意频率,就可以得到输入信号的各种频率成分。
  4. 欧拉公式:数轴与虚数轴共同构成了一个复数的平面,也称复平面。并且乘虚数i可以看为逆时针旋转90°。欧拉公式将正弦波统一成了简单的指数形式,如下图所示:
    在这里插入图片描述
    欧拉公式所描绘的,是一个随着时间变化,在复平面上做圆周运动的点,随着时间的改变,在时间轴上就成了一条螺旋线。如果只看它的实数部分,也就是螺旋线在左侧的投影,就是一个余弦函数,而右侧的投影则是一个正弦函数。即,正弦波的叠加可以看为螺旋线的叠加在实数空间的投影。根据欧拉公式里面的复平面,我们可以得到单个矩形波形成的螺旋图如下图所示(将所有螺旋线连成平面,就是这幅海螺图):
    在这里插入图片描述
    上图可以看出,海螺图投影到实数空间就形成了傅立叶变换的连续非周期的连续的曲线,此曲线在时域上就表现为一个矩形波的形式。

FFT

  1. FFT简介:一个模拟信号,经过ADC采样之后,就变成了数字信号(需要满足采样定理)。采样得到的数字信号,就可以做FFT变换。N个采样点,经过FFT之后,就可以得到N个点的FFT结果(N设为2的整数次方)。

  2. FFT结果: 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn = Fs*(n-1)/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=根号aa+bb,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)cos(2piFnt+Pn),即2An/Ncos(2piFn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。

  3. FFT实例:假设一个信号,它含有2V的直流分量,频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。即可以表示为:
    S=2+3cos(2pi50t-pi30/180)+1.5cos(2pi75t+pi90/180)
    以256Hz的采样率对这个信号进行采样,总共采样256点。可计算出每两个点之间的间距就是1Hz,第n个点的频率就是n-1。我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。

  4. 频率分辨力:频率分辨率可以理解为在使用DFT时,在频率轴上的所能得到的最小频率间隔f0=fs/N=1/NTs=1/T,其中N为采样点数,fs为采样频率,Ts为采样间隔。所以NTs就是采样前模拟信号的时间长度T,所以信号长度越长,频率分辨率越好。是不是采样点数越多,频率分辨力提高了呢?其实不是的,因为一段数据拿来就确定了时间T,注意:f0=1/T,而T=NTs,增加N必然减小Ts ,因此,增加N时f0是不变的。只有增加点数的同时导致增加了数据长度T才能使分辨率越好。还有容易搞混的一点,我们在做DFT时,常常在有效数据后面补零达到对频谱做某种改善的目的,我们常常认为这是增加了N,从而使频率分辨率变好了,其实不是这样的,补零并没有增加有效数据的长度,仍然为T。但是补零其实有其他好处:1.使数据N为2的整次幂,便于使用FFT。2.补零后,其实是对DFT结果做了插值,克服“栅栏”效应,使谱外观平滑化;我把“栅栏”效应形象理解为,就像站在栅栏旁边透过栅栏看外面风景,肯定有被栅栏挡住比较多风景,此时就可能漏掉较大频域分量,但是补零以后,相当于你站远了,改变了栅栏密度,风景就看的越来越清楚了。3.由于对时域数据的截短必然造成频谱泄露,因此在频谱中可能出现难以辨认的谱峰,补零在一定程度上能消除这种现象。

参考文献:

  • 贯穿时域与频域的方法——傅立叶分析(直观理解+Matlab实现)
    https://blog.csdn.net/qq_33414271/article/details/79117586
  • FFT的详细解释,相信你看了就明白了
    https://blog.csdn.net/zhaopeizhaopeipei/article/details/53908238
  • 采样频率、采样点数、频率分辨率
    https://blog.csdn.net/gtkknd/article/details/52052752
  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值