在本章,我们的目标是获得一个给定信号的功率相对于频率的分布状态,这就叫做功率谱。回忆一下一个输出值是复数的FFT,在这里我们的注意力将只集中在功率谱的量级,并且不关心相位。然而相位响应对于一些应用来说也许是很重要的,我们在这里不涉及它是为了使讨论保持的长度恰当。
如果一个离散时域信号x(n)作为FFT的输入被提供,输出是X[k],即FFT{x[n]}=X[k]
回忆一下,在这个时域的等式中,随着n的增加,这个信号时间分辨率是TS=1/FS。在频域等式中,每增加一个k,频率的分辨率是Δf=FS/N,这里N是FFT的长度。Δf的值叫作频谱的频率分辨率。如果x[n]是原始的电压随时间变化信号或者电流随时间变化信号,那么结果X[k]将分别是电压随频率或者电流随频率变化的信号。为了得到归一化的功率谱(例如阻抗归一化为1Ω),我们正好用这个关系式
X[k]2=(X[k]real)2+(X[k]imaginary)2这将生成一个随频率变化的平方量值(单位为W)。
对于例子来说,要如何解释基于FFT的功率谱运算结果,让我们回忆一下FFT的几方面问题。FFT(就像DFT)的输出点数量和输入数据点相同,在复数形式中,它是作为输入数据点来提供的。如果输入信号是实数,输出量值将是关于点FS/2对称的,在这里k=N/2。从k=0一直到k=N/2(如一直到FS/2点),我们解释那个k值符合f=kΔf=kFS/N。在k=N/2点以下,这个k值与负数频率相一致,并且作为f=-[(N-k)Δf]=-[(N-k)FS/N]来解释它们。现在让我们继续看这个例子。
假定一个信号x(t)用FS=48kHz的采样频率采样2s,我们将获得96000个数据点。这样x[n]存在的n值范围是0≤n≤95999。如果我们使用一个相当大的x[n]进行FFT,例如对N=65536数据点进行FFT{x[n]}[31],那么将生成x[k]的k值范围是0≤k≤65535。这种情况下,Δf≈0.732Hz。如果这个FFT的幅度的二次方在k=100处显示一个突出的尖峰(并且在k=N-100=65436的负频率组成部分也是一样的尖峰值),这将意味着这个信号的有效功率在f≈732Hz处。如果我们采用一个长度更合理的FFT,比如N=4096,那么Δf≈11.7Hz。如果这个FFT的幅度二次方在k=100处显示一个突出的尖峰(并且在k=N-100=3996的负频率组成部分也是一样的尖峰值),将意味着这个信号的有效功率在f≈1170Hz处,而不是前面那样在f≈732Hz处。然而,只改变FFT的长度就改变了频率分辨率Δf,这些改变了我们对FFT结果的解释方式。
对于实时频谱分析来说,我们需要使FFT的长度适度减小有两方面原因:(www.daowen.com)
(1)一个大规模的FFT运算可能需要花费更长的时间而不能达到实时的进度。
(2)一个大规模的FFT运算可能需要花费更长的时间而不能得到当前的结果(即使它能够实时地完成计算),也许超过期望的反应时间,或者也许对信号频率变化引起的信号内容变化没有做出快速反应。
如上所述,大规模FFT的结果与我们希望的比起来有较高的频率分辨率(即这里的Δf非常小):在上面的第一个例子中的分辨率小于0.7Hz,这是没有必要的过度行为。另一方面,如果我们选择的N值太小,那么FFT的计算非常迅速,频率分辨率Δf用起来就太大了。由于许多工程都要折中,“最佳”FFT大小的选择并不是太明确。
一般而言,对于实时频谱分析你将要写一个基于帧的程序(因为FFT运算需要多于一个采样周期的时间)连续计算每一个新帧的数据,并且提供输出功率谱并在PC上显示。可是,它并不是那么简单的。
事实证明,为精确评估信号的功率谱,有时在计算中再多几个步骤反而是更好的。对于韦尔奇周期图这样的例子,利用FFT计算功率谱是一个非常流行的方法。在每一帧数据上使用了一个平滑窗(如下所述),将若干帧数据的功率谱平均,并且将数据按照某个百分比(通常是50%)从一帧到下一帧进行交叠。要进一步讨论的这些更细致的观点超出了本书的范围,要进行更清晰的讨论请参见参考文献[15]。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。