引子
首先我们来讨论这样一个问题,给定正弦信号 sin3t 这样,在 t=[0,1,2,...] 我们就可以得到一个序列 [sin0,sin3,sin6,...] 也就是 [0,0.14,−0.27,...] 这样一个序列。现在,提问,我们已知这样一个序列的时候,如何反推它的频率。
在没有噪声且的情况下,使用反三角函数推似乎是一个比较好的方法,对于不同的值 x 都可以得到其反三角函数值
fourier transform
傅里叶变换看上去是一个好点子,既然时域不好分析,我们就从频域来处理,毕竟原始信号是一个正弦函数,我们观测到的理应是一个类似冲激函数的东西。至于噪声,假设为白噪的情况下它的傅里叶变换可是一条直线,在线性的条件下这并不干扰我们对于其的观测。所以,我们可以得到下面这样的图:
从图上可以看书,就算是白噪声看起来比较大,实际上傅里叶变换之后,我们依然可以得到不错的结果,但是,这其中存在着一定的限制,再观察下一张图:
由于窗口的限制使得FFT的结果有些许的频谱泄露(呈现出三角状而非绝对的冲激函数)这样,我们就会面临一个频谱分辨率的问题,当信号是由几个频率叠加在一起的时候,如果这几个频率太过于接近,就会造成我们无法分辨出这几个频率 而估计出一个错误的频率。所以,傅里叶变换方法存在着它的固有缺陷,尽管其在单频率估计中比较有效但是无法做到更多。另外,在信噪比过小的时候也会变得很难估计信号的频率最高点。
最小二乘法
为了解决这个问题,我们回到之前的讨论。一个信号叠加噪声应该用什么模型表示。在一般的研究中,一般观测信号 y(t) 是由信号 x(t) 和噪声