MUSIC算法與ROOT-MUSIC算法(附代碼)

本文首發在我的個人博客,http://www.weekreport.cn/archives/440,歡迎來踩。

1.MUSICMUSIC算法簡介

MUSICMUSIC算法由R.O.Schmidt在1979年提出,該算法利用了信號的頻率向量和噪聲子空間的正交性構造空間譜函數,通過譜峯搜索來估計信號頻率。

MUSICMUSIC算法需要構造掃描函數如下:P^MUSIC(w)=1aH(w)GGHa(w)=1i=K+1MaH(w)ui2,wϵ[π,π]\hat{P}_{MUSIC}\left( w \right ) = \frac{1}{a^{H}\left(w \right)GG^{H}a\left( w \right )} = \frac{1}{\sum_{i=K+1}^{M}\left |a^{H}\left( w \right )u_{i} \right |^{2}},\quad w\epsilon \left [ -\pi,\pi \right ]

上式中,MM代表信號自相關矩陣的階數,KK代表頻率源個數,aw=[1ejwej(M1)w]a_{w}=\begin{bmatrix}1\\e^{-jw}\\ \vdots \\e^{-j\left(M-1 \right )w} \end{bmatrix}是信號頻率向量;uiu_{i}是信號自相關矩陣的特徵向量,可以看到我們只取後(MK)\left( M-K \right)個特徵值對應的特徵向量,即最小的(M-K)個特徵值對應的特徵向量(噪聲子空間)。

MUSICMUSIC算法就是在掃描ww,理想情況下ww掃描到信號頻率點時aH(w)GGHa(w)=0a^{H}\left(w \right)GG^{H}a\left( w \right )=0

在實際工程中,由於使用信號樣本的時間自相關R^\hat{R}代替RR進行特徵分解,所以aH(w)GGHa(w)a^{H}\left(w \right)GG^{H}a\left( w \right )在信號頻率點處並不嚴格爲0,而是一個很小的值,於是P^MUSIC(w)\hat{P}_{MUSIC}\left( w \right )在該頻率點的值較大。

所以P^MUSIC(w)\hat{P}_{MUSIC}\left( w \right )的峯值的位置反映了信號的頻率值,但P^MUSIC(w)\hat{P}_{MUSIC}\left( w \right )並不是信號的功率譜,所以通常將它稱之爲僞譜或MUSICMUSIC譜。

1.1 MUSICMUSIC算法步驟

  • 根據觀測樣本值x(0),x(1),,x(N1)x\left( 0 \right),x\left ( 1 \right),\cdots,x\left( N-1 \right),估計自相關矩陣R^ϵCM×M\hat{R}\epsilon C^{M\times{M}}
  • R^\hat{R}進行特徵分解,得到MKM-K個最小特徵值對應的特徵向量,構造矩陣GG
  • [π,π]\left[ -\pi,\pi \right]內改變ww,計算P^MUSIC(w)\hat{P}_{MUSIC}\left( w \right ),峯值位置就是信號角頻率的估計值。

2.ROOTMUSICROOT-MUSIC算法

MUSICMUSIC算法通過搜索ww來估計信號頻率,實質上是做了一個頻率的遍歷,ROOTMUSICROOT-MUSIC算法將MUSICMUSIC算法aw=[1ejwej(M1)w]a_{w}=\begin{bmatrix}1\\e^{-jw}\\ \vdots \\e^{-j\left(M-1 \right )w}\end{bmatrix}中的ejwe^{jw}看作複數zz,則可以得到:aH(w)GGHa(w)=aH(z)GGHa(z)=0(1)a^{H}\left(w \right)GG^{H}a\left( w \right )=a^{H}\left(z \right)GG^{H}a\left( z \right )=0\quad(1)

所以,zk=ejwk,k=1,,Kz_{k}=e^{jw_{k}},k=1,\cdots,K(信號的KK個頻率點),就是方程(1)的根,信號頻率的估計由搜索/遍歷問題轉化成了一元高次方程的求根問題,這也是該算法被叫做ROOTMUSICROOT-MUSIC的原因。

將方程(1)做變換以後可以得到修正後的方程如下:aT(z1)GGHa(z)=0(2)a^{T}\left(z^{-1} \right)GG^{H}a\left( z \right )=0\quad(2)

方程(2)共有2(M1)2\left( M-1 \right)個根,但只有位於單位圓上的KK個根纔是需要的解。

在實際應用中,使用有限時間樣本信號的時間自相關矩陣R^\hat{R}代替隨機信號的統計自相關矩陣RR,所以求解方程(2)得到的KK個根並不準確位於單位圓上,而是位於單位圓附近,所以求解方程後應該找最接近單位圓的KK個根,這些根就是信號頻率的估計。

2.1 ROOTMUSICROOT-MUSIC算法步驟

  • 根據觀測樣本值x(0),x(1),,x(N1)x\left( 0 \right),x\left ( 1 \right),\cdots,x\left( N-1 \right),估計自相關矩陣R^ϵCM×M\hat{R}\epsilon C^{M\times{M}}
  • R^\hat{R}進行特徵分解,得到MKM-K個最小特徵值對應的特徵向量,構造矩陣GG
  • 求解方程(2),找出其中最接近單位圓的K個根,這些根的相位就是信號頻率的估計。

3.算例

設隨機過程u(n)u \left( n \right)u(n)=ej0.5πn+jϕ1+ej0.3πn+jϕ2+vnu \left( n \right) = e^{j0.5\pi n + j \phi {1}} + e^{-j0.3\pi n + j \phi {2}} + v_{n},其中,vnv_{n}是0均值,方差爲1的白噪聲,ϕ1\phi_{1}ϕ2\phi_{2}是相互獨立並在[0,2π]\left[ 0,2\pi \right]上服從均勻分佈的隨機相位,使用MUSICMUSIC算法和ROOTMUSICROOT-MUSIC算法進行信號頻率估計。

4.MatlabMatlab仿真結果

NUSIC算法估計結果ROOT-MUSIC算法結果

5.MatlabMatlab代碼實現

MUSICMUSIC算法和ROOTMUSCIROOT-MUSCI算法具體實現如下,點擊下載源碼!

N=1000;%信號樣本數
noise=(randn(1,N)+1j*randn(1,N))/sqrt(2);%產生噪聲
%產生信號
c1=2*pi*rand;
c2=2*pi*rand;
signal1=exp(1j*(0.5*pi*(0:N-1)+c1));
signal2=exp(1j*(-0.3*pi*(0:N-1)+c2));
%觀察樣本
s=signal1+signal2+noise;
M=8;%自相關矩陣的階數
for i=1:N-M
    xx(:,i)=s(i+M-1:-1:i).';  %構造樣本矩陣
end
R=xx*xx'/(N-M);%自相關矩陣
[EV,D]=eig(R);%特徵值分解 
EVA=diag(D)';
[EVA,I]=sort(EVA);%特徵值從小到大排序
EVA=fliplr(EVA);%左右翻轉,從大到小排序
EV=fliplr(EV(:,I));%對應特徵矢量排列
G=EV(:,3:M); %噪聲子空間
NF=2048;
%MUSIC算法
w=linspace(-pi,pi,NF);
for ii=1:NF
    a=exp(-1j*w(ii)*(0:M-1)');
    Pmusic(ii)=1/(a'*G*G'*a);
end
Pmusic=abs(Pmusic)/max(abs(Pmusic));
plot(w/2/pi,10*log10(Pmusic));
xlabel('w/2/pi')
ylabel('歸一化功率譜 (dB)')
title('MUSIC算法');
%root—music算法
GG=G*G';
co=zeros(2*M-1,1);%初始化3.6.382*(M-1)次方程的係數
for m=1:M
    co(m:m+M-1)=co(m:m+M-1)+GG(M:-1:1,m);%計算3.6.38左邊的多項式係數
end
z=roots(co);%多項式求根
ph=angle(z)/(2*pi);%歸一化頻率
err=abs(abs(z)-1);%2(M-1)個根與單位圓之間的距離
[err1,I]=sort(err);%將距離誤差從小到大排序構成一個列向量
f=[ph(I(1)),ph(I(3))];%選擇誤差最小的二個值所對應的歸一化頻率
zz=[z(I(1)),z(I(3))];
ff=sort(f);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章