原标题:观察频谱的窗口——物理与计算分辨率
提到分辨率,我们自然会想到图像的分辨率。分辨率越高,显示的图像越清晰,细节越逼真。
图1 不同分辨率图像
在频谱分析里面,也有“分辨率-Resolution”的概念!
分辨率(resolution)是信号处理中的基本概念,它包括频率分辨率和时间分辨率。
形象地说,频率分辨率是通过一个频域的窗函数来观察频谱时所看到的频率的宽度;时间分辨率是通过一个时域的窗函数来观察信号时所看到的时间的宽度。显然,这样的窗函数越窄,相应的分辨率就越好。
图2 加菲猫透过窗“函数”
其实这样的说法,并不形象!
所以这里我们先不去谈分辨率的概念,而是先看一个经典实例。
先看一个实例
存在一个时间信号x(t),其最高频率为fc,不超过3Hz。
现在用fs=10Hz的采样率,即Ts=0.1s对其抽样。由抽样定理可知,不应发生混叠问题。
设信号x(t)的持续时间为T,T=25.6s。那么抽样点数为T/Ts=256,也即抽样得到的x(n)的点数为256。
好了,上面的是一些基本条件。
现在信号x(t)由三个正弦组成,其频率是f1=2Hz,f2=2.02Hz,f3=2.07Hz,即
xt=sin(2*π*f1*t)+sin(2*π*f2*t)+sin(2*π*f3*t);
画出xt的波形图为:
图3 信号x(t)的波形,持续时间25.6s
x(t)由三个频率f1\f2\f3组成,所以观察其频谱时,应该可以看到三个频率分量。
现在我们对x(t)求DFT,得到其x(t)的频谱如下:
图4 信号x(t)的频谱,N=256
由于x(n)有256个点,所以做N=256个点的DFT运算。
根据图4,我们发现在f3=2.07Hz是有频率分量的,但是已经无法分辨f1和f2频率分量!
| 看起来f1和f2被“融合”在一起了 |
同时,在f1=2Hz,f2=2.02Hz有了“显著”的峰值,2个频率分量难道丢失了?
现在我们增大x(t)的持续时间T,使其等于102.4s。
图5 信号x(t)的波形,持续时间102.4s
保持采样率fs不变,那么共有N=1024个点,其他参量保持变,此时再次计算信号x(t)的频谱
图6 信号x(t)的频谱,N-1024
现在的波形符合我的预期了,在f1=2Hz,f2=2.02Hz,f3=2.07Hz处有显著的“波峰”。
为什么我们增大了信号x(t)的持续时间T,扩大了FFT点数N,频谱图更加精细,可以“分辨”出3个分量了呢?
今天的主题——分辨率
分辨率是信号处理课程中一个基本的概念,它包括频率分辨率和时间分辨率,这里我们重点来研究前者。
频率分辨率可从两个方面来定义:某个算法(如谱分析方法、功率谱估计方法等)将原信号中两个靠的很近的谱峰仍然能保持分开的能力,即物理分辨率;在进行DFT时,频率轴上所能得到的最小频率间隔 ,即通常所说的计算分辨率。一般说的频率分辨率是指物理分辨率。
首先,需要明确的是DTFT和DFT的关系。DTFT是离散时间序列的傅里叶变换,把序列映射到连续归一化频率域;
DFT是离散时间序列的离散傅里叶变换,把序列映射成离散的频率序列。
DTFT是具有物理意义的变换,DFT则是用于近似计算DTFT的工具,而FFT只是DFT的快速算法。
最终我们看到的DFT结果是由两部分合成出来的,一部分是具有物理意义的信号的DTFT结果,另一部分是分析手段(加窗,补零等)所带来的误差信号。
物理分辨率是指两个靠的很近的频谱峰值能够分辨的能力,可用F0来表示。一般来说,在时域抽样率fs一定的情况下,信号长度T越长,即抽样点N越多,则物理分辨率越高。有这样的关系:
其中Ts是时域抽样间隔。
需要注意的是,这个是指真正实际的信号长度,抽样点数也是指这个长度上的抽样点数,而不是补零以后的长度或抽样点数。
| 也就是说物理分辨率F0只取决于时域信号的长度 |
计算分辨率是指对于一个点序列做点DFT,所得到的每两根谱线间的距离,就是F0'。
而这里的不再是实际的点数,而是计算DFT时候的点,如果经过补零的话,将是补零以后的点数。
在MATLAB程序中,物理分辨率是实际的分辨率,可是我们看到的都是DFT之后的结果,也就是计算分辨率。
图7 不同分辨率的频谱
所以,当物理分辨率足够高的时候,我们可以适当提高计算分辨率,这样看不到的谱分量就能看到了。但是当时域信号长度不足时,物理分辨率低,即使再怎么提高计算分辨率,也是无济于事的。
再回到期初的实例
当信号x(t)的长度T确定为25.6s,且采样频率fs=10Hz时,此时物理分辨率以及固定,为
F0=1/T=fs/N=0.0391Hz
而信号x(t)有三个频率分量,且f2-f1=0.02
根据上述的结论,物理分辨率只取决于时域信号的长度,所以扩大时间T为102.4s,采样频率不变,就是就增大了点数N=1024。
此时物理分辨率
F0=1/T=fs/N=0.0098Hz
此时可以分辨出f1,f2,f3三个频率分量。
现在物理分辨率符合要求了,且和计算分辨率相等。
DFT/FFT参数选择的步骤与方法:
若已知信号的最高频率fc,为防止混叠,选定抽样频率fs满足
fs≥2fc
再根据实际需要,选定频率分辨率F0,一旦F0选定,就可以确定做DFT所需的点数N,即
N=fs/F0
我们希望F0越小越好,但F0越小,N越大,是计算量、存储量也随之增大。
而且我们希望N取2的整次幂,若N点数据已给定,且不能再增加,可用补零的办法使N为2的整数幂。
fs和N确定以后,就可确定所需相应模拟信号x(t)的长度,即有
T=N/fs=NTs
图8 信号x(t)的波形,持续时间102.4s,采样点2048
前已指出,分辨率F0反比于T,而不是N,因此在给定T的情况下,靠减小Ts来增加N是不能提高分辨率的。
这是因为T=NTs为一常数,若把Ts减小m倍,N也增加m倍,这时
F0=mfs/mN=fs/N=1/NTs=1/T
即F0保持不变。
图9 信号x(t)的波形,N=2048
我们在图8中,增大采样频率fs,使得采样点为2048个。
根据上述结论,频谱分辨率不会发生变化。图9可以明显的看出,频谱相对于图6没有变化。
结论
综上所述,我们注意到:在Matlab中,使用fft函数进行频谱分析,一定要搞清楚你所需要的频谱分辨率,然后再选择合适的时间持续时长与采样率。否则,糊里糊涂的进行频谱分析,得出的频谱图像可能错过了很多信息。