FFT的前世今生(二)
扫描二维码
随时随地手机看文章
从直观上讲,时域分析清晰易见,示波器即是进行时域观察的主要工具,可观察波形形状,测量脉宽,相差等信息。但对于信号的进一步分析,比如测量各次谐波在所占的比重和能量分布,时域上的分析就力不从心了,但是利用从连续时间傅里叶变换发展而来的快速傅里叶变换FFT进行分析就很有意义了。通信系统中必不可少的要使用频谱分析技术,例如频分复用技术。 频谱分析一般利用快速傅里叶变换FFT计算频率谱和功率谱,可直接用来提取特征频率和谱特征。因为计算机只能够处理离散的数据点,但FFT是傅里叶变换的一种近似,与傅里叶变换存在差别,且具有固有的局限:栅栏现象。本文就在上一篇《FFT的前世今生》的基础上,从测试测量的角度,谈一谈在示波器的FFT运算中容易被大家忽略的一些问题。
频率分辨率与时基设置(TimeBase)
频率分辨率的定义是:在使用FFT运算时,在频率谱上所能得到的最小的两个频率点间的间隔。
ΔF=Fs/N=1/NT=1/Tp
称ΔF为频率分辨率,即:采样率/采样点数,ΔF越小说明频率分辨率越高。ΔF仅与信号的实际长度成反比,即待分析的信号持续时间越长,ΔF越小,频率分辨率越高。
栅栏效应与频率分辨率:
示波器输入的信号一般都为非周期的连续信号
()axt
,它的频谱也是连续的,但是示波器所做的工作
是将 ( ) a x t 进行等间隔采样并且截断,然后进行FFT的运算得到一个离散的频谱图,相当于对连续的频谱图也进行了采样。这样有一部分频谱分量将被“挡在”采样点之外,就好像我们在通过一个栅栏观察频谱图,这种现象称为“栅栏效应”。这样就有可能发生一些频谱的峰点或谷点被栅栏所拦住,不可能被我们观察到。
不管是时域采样还是频域采样,都有相应的栅栏效应。只是当时域采样满足采样定理时,栅栏效应不会有什么影响。而频域采样的栅栏效应则影响很大,“挡住”或丢失的频率成分有可能是重要的或具有特征的成分,使信号处理失去意义。
栅栏效应是制约频谱分析谐波分析精度的一个瓶颈。栅栏效应在非同步采样的时候,影响尤为严重。在非同步采样时,由于各次谐波分量并未能正好落在频率分辨点上,而是落在两个频率分辨点之间。这样通过FFT不能直接得到各次谐波分量的准确值,而只能以临近的频率分辨点的值来近似代替,这就是栅栏效应降低频谱分析精度的原因。
由此我们可以得出这样的结论:减小栅栏效应可用通过提高频谱采样间隔也就是频率分辨率的方法来解决。间隔小,频率分辨率高,被“挡住”或丢失的频率成分就会越少。但是频率分辨率的提高会增加采样点数,使计算工作量增加。
我们可以通过两种方式增加频率分辨率:
a:物理分辨率=采样频率/采样点数。
物理分辨率的实际意义在于它可以衡量FFT实际上可以区分的频率分量的间隔。提高物理分辨率的方法一般是通过增加数据的有效长度,这相当于在模拟域增加了矩形窗的宽度。从而在模拟域减小了sinc主旁瓣宽度,减小了相邻频率分量的混叠。
这种增加采样点的方法主要针对无限长序列的FFT计算。对于无限长序列,不像有限长序列那样必须补零来提高视在分辨率,无限长序列可以通过增加数据长度来提高物理分辨率。
第 2 页 共 5 页 2012-12-19
b:视在分辨率=采样频率/分析点数
在序列尾部补零的方法可以使得分析点数增大,故补零的方法可以提高频谱的视在分辨率。对序列的尾部补零的方法主要针对有限长序列。对于有限长序列,有时只能用补零或者插值来改善频率分辨率。通过补零处理,使得频域采样密度增大,得到高密度谱。补零的方法所得到的频谱图所改善的只是图形的视在分辨率,并不能得到频谱的更多细节。
增加采样点数,增加了输入序列的阶次,从而提供频谱的更多细节,这是真正的分辨率(物理分辨率)。对序列只补零而不增加数据,输入序列和它的频谱阶次依旧没有提高,只是把频谱画的密一些,所以改善的只是图形的视在分辨率,并不能得到频谱的更多细节。增加序列的长度能够改善频谱的真正分辨率,这是基本的规律。
上面的讨论可知,改善分辨率的具体方法有如下两种
(1)对有限长序列采取尾部补零的方法提高视在分辨率
(2)对无限长序列通过真正增加采样点来提高物理分辨率
有限长序列和无限长序列是针对实际信号来说的,例如非周期的但是包含无限长信息的信号可以称为无限长序列,严格的周期信号和脉冲信号(脉冲之前和之后无限长时间内都是无效信息)都可以称为有限长序列,当然实际上严格的周期信号是不存在的。对于示波器来说,时间窗口内采集到的可以是有限长序列的全部信息或者是无限长序列的一部分信息。所以,如果采集到的是有限长序列的全部信息,那么只能通过补零的方式增加视在分辨率,如果采集到的是无限长序列的一部分信息,那么可以通过增加时间窗口的长度(不是采样点)来增加物理频率分辨率。
请看下面的实例:
图1中正弦波测试使用的时基是5ns/div,波形时间长度是50ns,计算FFT之后的频谱分辨率是20MHz(1/50ns),
图1 捕获50ns的信号,频率分辨率是20MHz
如果改变时基设置,频谱分辨率会有变化。如图2所示:将时基设置为10ns/div,波形长度是100ns,频谱分辨率可以提高到10MHz。
对于通过补零的方法增加FFT频谱的视在分辨率,力科的示波器也有相应的解决方案。力科示波器使用了两种非常常用的FFT算法供用户选择:Cooley-Tukey算法和LeastPrime算法。Cooley-Tukey算法也称为Power2算法,它提供了计算机一种非常快速的FFT计算方式,计算的FFT点数规模是2的整数方次,因此它会在示波器时域采集的信号中截取2的N次方的整数来作为FFT计算的时域样本,该截取的整数是最接近于采样点的整数。如下图2所示:
图2 捕获100ns的信号,频率分辨率是10MHz
图中的正弦波频率为500MHz,时基设置为10ns/div,采样率为20GS/s,时域采样点数为2000points,使用Power2算法截取2000点中的1024点(210),如图中的蓝框所示(注意是从信号的中间部分截取),因此截取的时间窗口为1024×20ps=51.2ns,是500MHz信号的25.6个周期,由于截取的周期非整数倍,不可避免会产生频谱泄露,如图中FFT的旁瓣所示,此时的频率分辨率可以达到19.35125MHz。
如果采用另外一种FFT算法LeastPrime,可以将整个示波器时域采集的采样点进行FFT运算,LeastPrime算法计算的FFT点数规模是2N+5K,因此2000点=24+53,不需要截取原始数据就可以运算,但是代价是计算的速度可能会慢一些(尽管我们可能觉察不到),频率分辨率可以提高到10MHz。
使用Power2算法也可以不采用截取原始波形的方式,此时我们可以选择Zero Fill(补零)的方式,增加采样点数。比如,在2000点中补48个点,2048=211,如图3所示:
图3 补零的放出提高频率分辨率
这48个点补的方式是头尾各补一半,但是有可能补的不是0,头24个点与第一个采样点值相同,尾24个点与最后一个采样点值相同(所以称之为Zero Fill是不完全准确的)。这里我们推荐Zero Fill的方法只在分析冲击信号FFT频谱的情况下使用。
补零法虽然能增加频谱图的视在分辨率,但是由于补的都是无效数据,所以对于频率分辨率真正的改善没有帮助,但是补零有它的好处:1.补零后,其实是对FFT结果做了插值,克服“栅栏”效应,使谱外观平滑化;我把“栅栏”效应形象理解为,就像站在栅栏旁边透过栅栏看外面风景,肯定有被栅栏挡住比较多风景,此时就可能漏掉较大频域分量,但是补零以后,相当于你站远了,改变了栅栏密度,风景就看的越来越清楚了。2.由于对时域数据的截短必然造成频谱泄露,因此在频谱中可能出现难以辨认的谱峰,补零在一定程度上能消除这种现象。
除此之外,很多人都有这样的误区:认为通过增加待分析的计算点数而不是增加采样时间就可以使FFT之后的频谱更加“精细”(频率分辨率更高)。这样的误解一般来自于示波器的用户,因为当示波器采样点比较少时,FFT的计算出来的频谱图也会很少,频谱看起来非常粗糙。这时工程师会非常有冲动把时域的采样点增多(用示波器上的插值算法很容易实现),但是如果采集信号的时间长度是不变的,工程师会发现FFT计算之后的频谱并没有显得更加“精细”,频率分辨率并没有任何改善。实际上使用插值或者增加采样率的方式仅仅是展宽了FFT之后的频谱带宽。如下图4所示,
图4 插值方式并不能改变频率分辨率
左上方使用了较少的时域采样点C1,右上方使用了较高的采样率C2,但是采样时间是相同的。左下是对C1进行FFT之后的频谱F1,右中是对C2进行FFT之后的频谱F2,右下是对F2相同频段进行了放大。可以看到F2比F1的频宽增加了,但是对F1频段放大之后的频谱和F1一样,没有任何频率分辨率的改善。
由此我们可以得出结论,对C1进行插值后,额外的采样点仅仅存在于较高频段,会展宽频谱的带宽,但是插值方式对于增加我们感兴趣频段的频谱分辨率没有任何帮助。
那么如果我们只对对FFT之后的频谱进行插值效果如何呢?如下图5所示:
图5 频域插值方式是频谱图看起来更密
图中展示了对频域插值之后的效果,并没有使频谱看起来更“窄”(毕竟插值出来的点都是假点),但是我们注意到,频域插值可以使频谱的测量更加精确。图中正弦波的频率是955MHz,插值之后频谱的Peak频率读数P2是955MHz,插值之前P1的读数为952MHz。
总之,FFT是进行信号频域分析的最广泛使用的标准化方法,也是现代数字示波器中标配的数学运算函数,我们更多了解FFT应用的细节,能更加有效地利用好这个工具,从FFT中得到更多有价值的信息。