频谱为什么会泄漏?
频谱会泄漏?
频率的定义:物质在1s内完成周期性变化的次数叫做频率,常用f表示。
在通信与信号处理中的频谱,主要通过傅里叶级数和傅里叶变换得到。
其中满足狄里赫利条件的周期信号可以分解为若干不同频率的正弦波。这些正弦波中,频率最低的称为信号的基波,其余称为信号的谐波。以谐波的频率为横坐标,幅值(大小)为纵坐标,绘制的系列图,称为频谱。频谱能够准确反映信号的内部构造。见图1。
图1 方波信号的傅里叶级数展开
你见与不见,频谱就在那里
有一种情况,我们需要考虑。
那就是当我们用计算机处理信号之时,总会截取一段信号。
这很容易理解,因为你不能分析无限长的周期信号。即使是非周期信号,也只能截取一小段。
这还与传感器灵敏度和存储器容量有关。
那么问题就来了,我们用截取的信号去做频谱分析,那么得到的频谱是截取信号的。并不是原始信号的。
图2 实际的信号被截取一部分,这一部分信号作为频谱分析的输入
这两者频谱之前的差别,可以看做是泄漏。
官方的解释是这样的:
信号为无限长序列,运算需要截取其中一部分(截断),于是需要加窗函数。加了窗函数相当于时域相乘,也相当于频域卷积,于是频谱中除了本来该有的主瓣之外,还会出现本不该有的旁瓣,这就是频谱泄露!为了减弱频谱泄漏,可以采用加权的窗函数,加权的窗函数包括平顶窗、汉宁窗、高斯窗等等。而未加权的矩形窗泄漏最为严重。
这个解释,涉及到时域、频域、窗函数、卷积、主瓣、旁瓣等抽象概念。
但是意思和我的解释一样。
图3 信号的截取过程
直观的表示
在现实中,信号是测量工具测量得到的,必然具有时间限制,超出测量间隔的信号不能被知道。
例如,如果测量一个无限长的正弦波连续序列,在某个时候,我们需要终止我们的观测来做进一步的分析。
除了其他因素外,测量系统本身的限制(例如:缓冲区大小)也对时间造成了限制。
图4为一个无限长的周期信号,现在我们选取一段信号,图4中为黑色虚线中间的信号,作为分析信号。
频谱分析通常使用快速傅里叶FFT函数,具体可以参考我之前的文章,见文章最后。
图4 截取信号的过程,往往会造成一定的“缺陷”
FFT实际上是假设信号在测量的间隔之周期重复,因此FFT假设信号是连续的(在概念上或者在存储器内,重复地并列测量信号)。
这导致假定信号中的缺陷(见图4中箭头部分),就是尖锐部分,会在时间域内不断的重复。
而这些尖锐的不连续性将在频域中扩散,导致频谱与原始的信号的频谱不一致.
这种不一致,直观的看,就像泄漏一样。
现在再举一次正弦波的例子,见图5。
图5 3Hz与2.5Hz正弦序列的频谱对比
图5为Matlab软件绘制。
左上方为正弦序列,频率为3Hz,周期为1/3秒,序列总时长为1秒钟。
在1秒钟内,正好完整的3个周期。
这个序列为单一频率3Hz,没有其他谐波频率。
对其进行FFT分析,必然在频率轴3Hz处有幅度值谱线。在0 1 2 4 5 6Hz频率处幅度值为0。
现在略微调整,序列总时长还是1秒钟,频率改为2.5Hz,周期为1/2.5=0.4秒,那么正好有2.5个周期。
这个序列为单一频率2.5Hz,是不是它的频谱线在2,5Hz处呢?
看右下图,很明显不是。
频率还是分布在0 1 2 3 4 5 6Hz这些整数倍的频率处,却都有一定的幅度值了。
如果把2.5Hz的正弦序列展开,可以看到更清楚,如图6所示。
图6 2.5Hz截取信号的周期延拓
图6中已经不是一个连续的正弦序列了,而是在1s、2s、…等整数秒处都会有不连续。
这些不连续隐藏着其他频率,就会带入到频域中去。
和抽样点N数有关?
考虑频率f_x=10Hz的纯正弦信号,并在计算机内存中表示,该信号被观察1秒,采样频率f_s=100Hz。
现在,缓冲器中将有100个样本,缓冲器包含波形周期的整数倍,在这种情况下是10个周期。
用n点DFT对信号样本进行了分析。
这里考虑了两种情况进行研究:
- FFT大小n与信号样本的长度相同,即n=100;
- FFT大小设置为2的下一次幂,该次幂符合信号样本,即n=128;
结果绘制如下:
图7 正弦序列在不同N下的频谱图
为什么频谱在n=100时和n=128时,在10Hz附近会有一个明显的尖峰。
这是由于不同的频率分辨率——分辨不同、相邻频率能力的度量。
对于情况1,频率分辨率为△f=f_s/n =100/10=1Hz。这意味着频率间隔1赫兹,所以比较在整数10Hz处有峰值。
对于情况2,频率分辨率为△f=f_s/128=100/128=0.7813Hz。在这种频率分辨率下,频率图7的x轴不能具有10Hz的精确值。
相反,最近的相邻频率间隔分别为9.375Hz和10.1563Hz。
因此,频谱不能表示10Hz处的值,信号的能量被泄漏到相邻的频率点处,导致频谱泄漏。
理论分析
图8 DFS/DFT的示意图
要想理解DFT或者FFT,图8是我每次必放的图形。
这幅图就是离散傅里叶级数、离散傅里叶变换的形象展示。
时域、频域都是离散的,
时域的周期为T1,对应频域的△f为图中的f1,△f = f1=1/T1;
时域的采样周期为Ts,对应频域的周期为fs=1/Ts;
且采样频率fs/f1=fs/△f=N,N为主值区间的点数,就是常说的多少多少点FFT。
fs、△f、N这三者的取值,会影响频谱的形状与是否泄漏。
图9 为频谱泄漏的示意图。
图9 频谱泄漏示意图
参考文献
[1]为了便于计算机处理,离散傅里叶变换DFT就是这样被定义出来
[2]傅里叶变换FT-FS-DTFT-DFS复杂?理解了离散周期的概念,就懂了!
[4]https://www.gaussianwaves.com/2011/01/fft-and-spectral-leakage-2/
[5]https://community.sw.siemens.com/s/article/windows-and-spectral-leakage