信号频率估计—MUSIC & ROOT-MUSIC算法(附Matlab代码)

本文首发在我的个人博客,http://www.weekreport.cn/archives/440,欢迎来踩。

1. M U S I C MUSIC MUSIC算法简介

M U S I C MUSIC MUSIC算法由R.O.Schmidt在1979年提出,该算法利用了信号的频率向量和噪声子空间的正交性构造空间谱函数,通过谱峰搜索来估计信号频率。

M U S I C MUSIC MUSIC算法需要构造扫描函数如下: P ^ M U S I C ( w ) = 1 a H ( w ) G G H a ( w ) = 1 ∑ i = K + 1 M ∣ a H ( w ) u i ∣ 2 , 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 ] P^MUSIC(w)=aH(w)GGHa(w)1=i=K+1MaH(w)ui21,wϵ[π,π]

上式中, M M M代表信号自相关矩阵的阶数, K K K代表频率源个数, a w = [ 1 e − j w ⋮ e − j ( M − 1 ) w ] a_{w}=\begin{bmatrix}1\\e^{-jw}\\ \vdots \\e^{-j\left(M-1 \right )w} \end{bmatrix} aw=1ejwej(M1)w是信号频率向量; u i u_{i} ui是信号自相关矩阵的特征向量,可以看到我们只取后 ( M − K ) \left( M-K \right) (MK)个特征值对应的特征向量,即最小的(M-K)个特征值对应的特征向量(噪声子空间)。

M U S I C MUSIC MUSIC算法就是在扫描 w w w,理想情况下 w w w扫描到信号频率点时 a H ( w ) G G H a ( w ) = 0 a^{H}\left(w \right)GG^{H}a\left( w \right )=0 aH(w)GGHa(w)=0

在实际工程中,由于使用信号样本的时间自相关 R ^ \hat{R} R^代替 R R R进行特征分解,所以 a H ( w ) G G H a ( w ) a^{H}\left(w \right)GG^{H}a\left( w \right ) aH(w)GGHa(w)在信号频率点处并不严格为0,而是一个很小的值,于是 P ^ M U S I C ( w ) \hat{P}_{MUSIC}\left( w \right ) P^MUSIC(w)在该频率点的值较大。

所以 P ^ M U S I C ( w ) \hat{P}_{MUSIC}\left( w \right ) P^MUSIC(w)的峰值的位置反映了信号的频率值,但 P ^ M U S I C ( w ) \hat{P}_{MUSIC}\left( w \right ) P^MUSIC(w)并不是信号的功率谱,所以通常将它称之为伪谱或 M U S I C MUSIC MUSIC谱。

1.1 M U S I C MUSIC MUSIC算法步骤

  • 根据观测样本值 x ( 0 ) , x ( 1 ) , ⋯   , x ( N − 1 ) x\left( 0 \right),x\left ( 1 \right),\cdots,x\left( N-1 \right) x(0),x(1),,x(N1),估计自相关矩阵 R ^ ϵ C M × M \hat{R}\epsilon C^{M\times{M}} R^ϵCM×M
  • R ^ \hat{R} R^进行特征分解,得到 M − K M-K MK个最小特征值对应的特征向量,构造矩阵 G G G
  • [ − π , π ] \left[ -\pi,\pi \right] [π,π]内改变 w w w,计算 P ^ M U S I C ( w ) \hat{P}_{MUSIC}\left( w \right ) P^MUSIC(w),峰值位置就是信号角频率的估计值。

2. R O O T − M U S I C ROOT-MUSIC ROOTMUSIC算法

M U S I C MUSIC MUSIC算法通过搜索 w w w来估计信号频率,实质上是做了一个频率的遍历, R O O T − M U S I C ROOT-MUSIC ROOTMUSIC算法将 M U S I C MUSIC MUSIC算法 a w = [ 1 e − j w ⋮ e − j ( M − 1 ) w ] a_{w}=\begin{bmatrix}1\\e^{-jw}\\ \vdots \\e^{-j\left(M-1 \right )w}\end{bmatrix} aw=1ejwej(M1)w中的 e j w e^{jw} ejw看作复数 z z z,则可以得到: a H ( w ) G G H a ( w ) = a H ( z ) G G H a ( 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) aH(w)GGHa(w)=aH(z)GGHa(z)=0(1)

所以, z k = e j w k , k = 1 , ⋯   , K z_{k}=e^{jw_{k}},k=1,\cdots,K zk=ejwk,k=1,,K(信号的 K K K个频率点),就是方程(1)的根,信号频率的估计由搜索/遍历问题转化成了一元高次方程的求根问题,这也是该算法被叫做 R O O T − M U S I C ROOT-MUSIC ROOTMUSIC的原因。

将方程(1)做变换以后可以得到修正后的方程如下: a T ( z − 1 ) G G H a ( z ) = 0 ( 2 ) a^{T}\left(z^{-1} \right)GG^{H}a\left( z \right )=0\quad(2) aT(z1)GGHa(z)=0(2)

方程(2)共有 2 ( M − 1 ) 2\left( M-1 \right) 2(M1)个根,但只有位于单位圆上的 K K K个根才是需要的解。

在实际应用中,使用有限时间样本信号的时间自相关矩阵 R ^ \hat{R} R^代替随机信号的统计自相关矩阵 R R R,所以求解方程(2)得到的 K K K个根并不准确位于单位圆上,而是位于单位圆附近,所以求解方程后应该找最接近单位圆的 K K K个根,这些根就是信号频率的估计。

2.1 R O O T − M U S I C ROOT-MUSIC ROOTMUSIC算法步骤

  • 根据观测样本值 x ( 0 ) , x ( 1 ) , ⋯   , x ( N − 1 ) x\left( 0 \right),x\left ( 1 \right),\cdots,x\left( N-1 \right) x(0),x(1),,x(N1),估计自相关矩阵 R ^ ϵ C M × M \hat{R}\epsilon C^{M\times{M}} R^ϵCM×M
  • R ^ \hat{R} R^进行特征分解,得到 M − K M-K MK个最小特征值对应的特征向量,构造矩阵 G G G
  • 求解方程(2),找出其中最接近单位圆的K个根,这些根的相位就是信号频率的估计。

3.算例

设随机过程 u ( n ) u \left( n \right) u(n) u ( n ) = e j 0.5 π n + j ϕ 1 + e − j 0.3 π n + j ϕ 2 + v n u \left( n \right) = e^{j0.5\pi n + j \phi {1}} + e^{-j0.3\pi n + j \phi {2}} + v_{n} u(n)=ej0.5πn+jϕ1+ej0.3πn+jϕ2+vn,其中, v n v_{n} vn是0均值,方差为1的白噪声, ϕ 1 \phi_{1} ϕ1 ϕ 2 \phi_{2} ϕ2是相互独立并在 [ 0 , 2 π ] \left[ 0,2\pi \right] [0,2π]上服从均匀分布的随机相位,使用 M U S I C MUSIC MUSIC算法和 R O O T − M U S I C ROOT-MUSIC ROOTMUSIC算法进行信号频率估计。

4. M a t l a b Matlab Matlab仿真结果

信号频率估计—MUSIC & ROOT-MUSIC算法(附Matlab代码)_第1张图片ROOT-MUSIC算法结果

5. M a t l a b Matlab Matlab代码实现

M U S I C MUSIC MUSIC算法和 R O O T − M U S C I ROOT-MUSCI ROOTMUSCI算法具体实现如下,点击下载源码!

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);

你可能感兴趣的:(信号处理,matlab)