对模拟信号进行数字处理前,首先要对时域上无限长的模拟信号进行截取。而傅里叶变换会对截取信号进行延拓,当截取的信号并非整周期时,就会出现能量泄露的情况。以sin函数举例
原模拟信号:
代码
ts = 0:0.01:10;
sig = sin(2*pi*ts);
plot(sig);
我们取一个十个周期的sin函数作为原模拟信号,现在我们将模拟能量泄露现象
%%利用fft频谱图了解能量泄露
sig_fft = fft(sig);%对原信号进行傅里叶变换
L = length(sig);
sig_amp = abs(sig_fft)/L;%傅里叶变换后进行量纲还原
sig_p1 = sig_amp(0:L/2+1);%取样
sig_p1(2:end-1) = sig_p1(2:end-1)*2;%将复数域能量转到有物理含义的实数域内
fs = 100*(0:(L/2))/L;%频谱图上采样
plot(fs,sig_p1);
这里直接给出截取范围不同而引出的图像(b站up 显微镜少年)
当截取范围不同时,幅值能量显然发生了不同程度的衰减。这里我们清楚了如果令两个脉冲直接对信号两端进行截取,根据原信号周期性的不同会发生不同程度的能量泄露。当截取范围仅仅为一个整周期时,能量泄露才可避免。但对于实际信号,确定周期是个很难的事情。
如何防止能量泄露,在截取信号时我们引入了窗函数。
窗函数
窗函数实际上是通过加强截取段中部的信号强度,减小截取边缘的信号强度,将具备函数周期性质的主要信号留在中端。
为了减少频谱能量泄漏,可采用不同的截取函数对信号进行截断,截断函数称为窗函数,简称为窗。 窗函数就是时域有限宽的信号。 泄漏与窗函数频谱的两侧旁瓣有关,如果两侧瓣的高度趋于零,而使 能量 相对集中在主瓣,就可以较为接近于真实的频谱。