信号的频率估计(一) 最小二乘法

引子

首先我们来讨论这样一个问题,给定正弦信号 sin3t 这样,在 t=[0,1,2,...] 我们就可以得到一个序列 [sin0,sin3,sin6,...] 也就是 [0,0.14,0.27,...] 这样一个序列。现在,提问,我们已知这样一个序列的时候,如何反推它的频率。
在没有噪声且的情况下,使用反三角函数推似乎是一个比较好的方法,对于不同的值 x 都可以得到其反三角函数值 arcsinx ,这样就可以推知在t时刻所对应的角速度为 arcsinx+2kπtorπarcsinx+2kπt 这样问题就可以转化为一个寻找最小公倍数的问题了。但是,在有噪声的影响下,首先反三角函数的定义域就可能不能满足,我们所观测的信号不再严格按照原有规律变化,这时候应该如何去做呢

fourier transform

傅里叶变换看上去是一个好点子,既然时域不好分析,我们就从频域来处理,毕竟原始信号是一个正弦函数,我们观测到的理应是一个类似冲激函数的东西。至于噪声,假设为白噪的情况下它的傅里叶变换可是一条直线,在线性的条件下这并不干扰我们对于其的观测。所以,我们可以得到下面这样的图:
信号的频率估计(一) 最小二乘法_第1张图片
从图上可以看书,就算是白噪声看起来比较大,实际上傅里叶变换之后,我们依然可以得到不错的结果,但是,这其中存在着一定的限制,再观察下一张图:
信号的频率估计(一) 最小二乘法_第2张图片
由于窗口的限制使得FFT的结果有些许的频谱泄露(呈现出三角状而非绝对的冲激函数)这样,我们就会面临一个频谱分辨率的问题,当信号是由几个频率叠加在一起的时候,如果这几个频率太过于接近,就会造成我们无法分辨出这几个频率 而估计出一个错误的频率。所以,傅里叶变换方法存在着它的固有缺陷,尽管其在单频率估计中比较有效但是无法做到更多。另外,在信噪比过小的时候也会变得很难估计信号的频率最高点。

最小二乘法

为了解决这个问题,我们回到之前的讨论。一个信号叠加噪声应该用什么模型表示。在一般的研究中,一般观测信号 y(t) 是由信号 x(t) 和噪声 n(t) 两部分叠加而成。也就是说 y(t)=x(t)+n(t) 。假设,我们已经知道了信号的 幅度和相位,在这里我们幅度设定为1,相位设定为0,那么待估计的信号方程就是 sin(ωt) ,当然现在这个\omega我们还不清楚是什么,但是我们可以做一个减法,将它和我们的观测信号相减,得到 sin(ωt)y(t)=sin(ωt)x(t)n(t) 在理想的情况下,也就是没有噪声的情况下,这个差我们是希望为0的,但是由于有噪声的影响,所以我们希望这个误差能够达到最小,也就是对于一系列的等式

sin(ω1)y(1)=0
sin(ω2)y(2)=0
....
sin(ωn)y(n)=0

实际上我们就是在解这样一个式子:

sin(ω1)x(1)=n(1)
sin(ω2)x(2)=n(2)
....
sin(ωn)x(n)=n(n)

虽然这个式子不可能所有子式都满足等于0的条件,但是我们希望它能达到全局意义上的最小化。这不就是最小二乘法的形式么,但是,最小二乘法是对于线性方程组的一种解法,我们的 sin 形式并不是线性的,为了将其变为线性我们很自然选择了泰勒展开讲 sin 变为了线性方程的组合(这样的思想在很多非线性数学问题的解答中都有使用,虽然泰勒没有在谱分析上面战胜傅里叶,但是它的分析方法也有着其巨大的贡献:)),在本例子里面我们使用三阶泰勒展开作为示例,那么就有:
1ω1ω33!+1ω55!=y(1)
2ω2ω33!+2ω55!=y(2)
....
nωnω33!+nω55!=y(n)

有些难看,我们改写成矩阵形式:
12n13!233!...n33!15!255!n55!ωω3ω5=y(1)y(2)...y(n)

整理到这里,就可以欢乐得地二乘了。

最小二乘的缺陷

这样处理缺点是什么呢?
首先,因为我们的式子是通过泰勒展开的,所以太远离0点的话近似就会变得非常糟糕了,所以预测的时候贪多把好几个周期的所有点都放进去预测反而会出现很糟糕的结果
其二,这种方法必须提前假定信号的模型,所以对于多频率分量混杂的信号很难估算(当然可以用混合高斯模型的EM算法一点点推)

今天就到这里。。。剩下的。。。我会继续补坑

你可能感兴趣的:(信号)