信號的頻率估計(一) 最小二乘法

引子

首先我們來討論這樣一個問題,給定正弦信號sin3t 這樣,在t=[0,1,2,...] 我們就可以得到一個序列[sin0,sin3,sin6,...] 也就是[0,0.14,0.27,...] 這樣一個序列。現在,提問,我們已知這樣一個序列的時候,如何反推它的頻率。
在沒有噪聲且的情況下,使用反三角函數推似乎是一個比較好的方法,對於不同的值x 都可以得到其反三角函數值arcsinx ,這樣就可以推知在t時刻所對應的角速度爲arcsinx+2kπtorπarcsinx+2kπt 這樣問題就可以轉化爲一個尋找最小公倍數的問題了。但是,在有噪聲的影響下,首先反三角函數的定義域就可能不能滿足,我們所觀測的信號不再嚴格按照原有規律變化,這時候應該如何去做呢

fourier transform

傅里葉變換看上去是一個好點子,既然時域不好分析,我們就從頻域來處理,畢竟原始信號是一個正弦函數,我們觀測到的理應是一個類似衝激函數的東西。至於噪聲,假設爲白噪的情況下它的傅里葉變換可是一條直線,在線性的條件下這並不干擾我們對於其的觀測。所以,我們可以得到下面這樣的圖:
這裏寫圖片描述
從圖上可以看書,就算是白噪聲看起來比較大,實際上傅里葉變換之後,我們依然可以得到不錯的結果,但是,這其中存在着一定的限制,再觀察下一張圖:
這裏寫圖片描述
由於窗口的限制使得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算法一點點推)

今天就到這裏。。。剩下的。。。我會繼續補坑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章