【学习笔记】【DOA子空间算法】2 MUSIC 算法
2 MUSIC 算法
2.1 算法原理
根据信号模型,可以得到接收信号的协方差矩阵,理想协方差矩阵如下:
R
=
E
[
x
(
t
)
x
H
(
t
)
]
=
A
E
[
s
(
t
)
s
H
(
t
)
]
A
H
+
E
[
n
(
t
)
n
H
(
t
)
]
=
A
R
S
A
H
+
σ
n
2
I
\begin{equation*} \begin{aligned} \mathbf{R} &= \mathrm{E}[\mathbf{x}(t)\mathbf{x}^{H}(t)]\\ &= \mathbf{A}\mathrm{E}[\mathbf{s}(t)\mathbf{s}^{H}(t)]\mathbf{A}^H + \mathrm{E}[\mathbf{n}(t)\mathbf{n}^{H}(t)] \\ &= \mathbf{A}\mathbf{R}_S\mathbf{A}^H + \sigma_n^2\mathbf{I} \end{aligned} \end{equation*}
R=E[x(t)xH(t)]=AE[s(t)sH(t)]AH+E[n(t)nH(t)]=ARSAH+σn2I
其中
R
S
\mathbf{R}_S
RS 和
σ
n
2
I
\sigma_n^2\mathbf{I}
σn2I 分别代表信号协方差矩阵和噪声协方差矩阵,
σ
n
2
\sigma_n^2
σn2 为噪声方差,
I
\mathbf{I}
I 为单位矩阵。需要注意到的是,由于信号源之间是独立的,
R
S
\mathbf{R}_S
RS 是对角非奇异矩阵;
R
\mathbf{R}
R 是非奇异的,同时
R
=
R
H
\mathbf{R} = \mathbf{R}^H
R=RH,因此
R
\mathbf{R}
R 是 Hermitian 矩阵且是正定矩阵。
但因为采样数
T
T
T 有限,理想协方差矩阵无法直接获得,此时通常用样本的协方差矩阵
R
^
\hat{\mathbf{R}}
R^ 来代替:
R
≜
R
^
=
1
T
∑
t
=
1
T
x
(
t
)
x
H
(
t
)
=
1
T
X
X
H
\begin{equation*} \mathbf{R} \triangleq \hat{\mathbf{R}} = \frac{1}{T} \sum_{t=1}^{T} \mathbf{x}(t)\mathbf{x}^{H}(t) = \frac{1}{T} \mathbf{X}\mathbf{X}^H \end{equation*}
R≜R^=T1t=1∑Tx(t)xH(t)=T1XXH
对
R
\mathbf{R}
R 进行特征值分解,可得到:
R
=
U
Σ
U
H
=
∑
i
=
1
M
λ
i
u
i
u
i
H
=
[
U
S
U
N
]
[
Σ
S
O
O
Σ
N
]
[
U
S
H
U
N
H
]
=
U
S
Σ
S
U
S
H
+
U
N
Σ
N
U
N
H
\begin{equation*} \begin{aligned} \mathbf{R} &= \mathbf{U} \Sigma \mathbf{U}^H = \sum\limits_{i=1}^M \lambda_i \mathbf{u}_i \mathbf{u}_i^H \\ &= \begin{bmatrix} \mathbf{U}_S & \mathbf{U}_N \end{bmatrix} \begin{bmatrix} \Sigma_S & \mathbf{O} \\ \mathbf{O} & \Sigma_N \end{bmatrix} \begin{bmatrix} \mathbf{U}_S^H \\ \mathbf{U}_N^H \end{bmatrix} \\ &= \mathbf{U}_S \Sigma_S \mathbf{U}_S^H + \mathbf{U}_N \Sigma_N \mathbf{U}_N^H \end{aligned} \end{equation*}
R=UΣUH=i=1∑MλiuiuiH=[USUN][ΣSOOΣN][USHUNH]=USΣSUSH+UNΣNUNH
其中
λ
i
\lambda_i
λi 和
u
i
\mathbf{u}_i
ui 分别为特征值和对应的特征向量,
O
\mathbf{O}
O 为全零矩阵,
Σ
\Sigma
Σ 为由
M
M
M 个特征值
λ
1
,
⋯
,
λ
M
\lambda_1, \cdots, \lambda_M
λ1,⋯,λM 组成的对角矩阵:
Σ
S
=
diag
{
λ
1
,
⋯
,
λ
M
}
\begin{equation*} \Sigma_S = \operatorname{diag} \{\lambda_1, \cdots, \lambda_M\} \end{equation*}
ΣS=diag{λ1,⋯,λM}
且假设:
λ
1
>
λ
2
>
⋯
>
λ
K
>
λ
K
+
1
>
⋯
>
λ
M
=
σ
n
2
\begin{equation*} \lambda_1 > \lambda_2 > \cdots > \lambda_K > \lambda_{K+1} > \cdots > \lambda_M = \sigma_n^2 \end{equation*}
λ1>λ2>⋯>λK>λK+1>⋯>λM=σn2
Σ
S
\Sigma_S
ΣS 为由
K
K
K 个较大特征值
λ
1
,
⋯
,
λ
K
\lambda_1, \cdots, \lambda_K
λ1,⋯,λK 组成的对角矩阵,
Σ
N
\Sigma_N
ΣN 为由
M
−
K
M-K
M−K 个较小特征值
λ
K
+
1
,
⋯
,
λ
M
\lambda_{K+1}, \cdots, \lambda_M
λK+1,⋯,λM 组成的对角矩阵:
Σ
S
=
diag
{
λ
1
,
⋯
,
λ
K
}
,
Σ
N
=
diag
{
λ
K
+
1
,
⋯
,
λ
M
}
\begin{equation*} \Sigma_S = \operatorname{diag} \{\lambda_1, \cdots, \lambda_K\}, \Sigma_N = \operatorname{diag} \{\lambda_{K+1}, \cdots, \lambda_M\} \end{equation*}
ΣS=diag{λ1,⋯,λK},ΣN=diag{λK+1,⋯,λM}
U
S
\mathbf{U}_S
US 表示由
K
K
K 个较大特征值
λ
1
,
⋯
,
λ
K
\lambda_1, \cdots, \lambda_K
λ1,⋯,λK 对应的特征矢量张成的信号子空间,
U
N
\mathbf{U}_N
UN 表示由
M
−
K
M-K
M−K 个较小特征值
λ
K
+
1
,
⋯
,
λ
M
\lambda_{K+1}, \cdots, \lambda_M
λK+1,⋯,λM 对应的特征矢量张成的噪声子空间。注意,
U
\mathbf{U}
U 为酉矩阵。
将
R
=
A
R
S
A
H
+
σ
n
2
I
\mathbf{R} = \mathbf{A}\mathbf{R}_S\mathbf{A}^H + \sigma_n^2\mathbf{I}
R=ARSAH+σn2I 左右两边乘以
U
N
\mathbf{U}_N
UN 可得:
R
U
N
=
A
R
S
A
H
U
N
+
σ
n
2
U
N
\begin{equation*} \mathbf{R}\mathbf{U}_N = \mathbf{A}\mathbf{R}_S\mathbf{A}^H \mathbf{U}_N+ \sigma_n^2\mathbf{U}_N \end{equation*}
RUN=ARSAHUN+σn2UN
同时将
R
=
U
S
Σ
S
U
S
H
+
U
N
Σ
N
U
N
H
\mathbf{R} =\mathbf{U}_S \Sigma_S \mathbf{U}_S^H + \mathbf{U}_N \Sigma_N \mathbf{U}_N^H
R=USΣSUSH+UNΣNUNH 左右两边乘以
U
N
\mathbf{U}_N
UN 可得:
R
U
N
=
U
S
Σ
S
U
S
H
U
N
+
U
N
Σ
N
U
N
H
U
N
=
O
+
σ
n
2
U
N
=
σ
n
2
U
N
\begin{equation*} \mathbf{R}\mathbf{U}_N = \mathbf{U}_S \Sigma_S \mathbf{U}_S^H\mathbf{U}_N + \mathbf{U}_N \Sigma_N \mathbf{U}_N^H\mathbf{U}_N = \mathbf{O} + \sigma_n^2 \mathbf{U_N} = \sigma_n^2 \mathbf{U_N} \end{equation*}
RUN=USΣSUSHUN+UNΣNUNHUN=O+σn2UN=σn2UN
联立上面两式子可得:
A
R
S
A
H
U
N
=
O
\begin{equation*} \mathbf{A}\mathbf{R}_S\mathbf{A}^H \mathbf{U}_N = \mathbf{O} \end{equation*}
ARSAHUN=O
由于
R
S
\mathbf{R}_S
RS 和
A
H
A
\mathbf{A}^H \mathbf{A}
AHA 均满秩,所以均可逆,因此上式两边同时乘以
R
S
−
1
(
A
H
A
)
−
1
A
H
\mathbf{R}_S^{-1} (\mathbf{A}^H\mathbf{A})^{-1} \mathbf{A}^H
RS−1(AHA)−1AH 可得:
R
S
−
1
(
A
H
A
)
−
1
A
H
A
R
S
A
H
U
N
=
R
S
−
1
(
A
H
A
)
−
1
A
H
O
\begin{equation*} \mathbf{R}_S^{-1} (\mathbf{A}^H\mathbf{A})^{-1} \mathbf{A}^H\mathbf{A}\mathbf{R}_S\mathbf{A}^H \mathbf{U}_N = \mathbf{R}_S^{-1} (\mathbf{A}^H\mathbf{A})^{-1} \mathbf{A}^H\mathbf{O} \end{equation*}
RS−1(AHA)−1AHARSAHUN=RS−1(AHA)−1AHO
化简得:
A
H
U
N
=
O
\begin{equation*} \mathbf{A}^H \mathbf{U}_N = \mathbf{O} \end{equation*}
AHUN=O
或者可以写成如下形式:
A
H
u
i
=
0
,
i
=
K
+
1
,
⋯
,
M
\begin{equation*} \mathbf{A}^H\mathbf{u}_i = \mathbf{0}, i = K+1, \cdots, M \end{equation*}
AHui=0,i=K+1,⋯,M
其中
0
\mathbf{0}
0 为全零向量。上式表明:噪声特征值所对应的特征向量
u
i
\mathbf{u}_i
ui 与方向矢量矩阵
A
\mathbf{A}
A 的列向量正交,而
A
\mathbf{A}
A 的各列与信号源的方向相对应的,因此可以利用噪声子空间求解信号源方向。
2.2 算法步骤
MUSIC 算法步骤如下(输入为阵列接收矩阵 X \mathbf{X} X):
- 计算协方差矩阵 R = 1 T X X H \mathbf{R} = \frac{1}{T} \mathbf{X}\mathbf{X}^H R=T1XXH。
- 对 R \mathbf{R} R 进行特征值分解,并对特征值进行排序,然后取得 M − K M-K M−K 个较小特征值对应的特征向量来组成噪声子空间 U N \mathbf{U}_N UN。
- 以下式遍历
θ
=
0
∘
,
1
∘
⋯
,
18
0
∘
\theta = 0^{\circ}, 1^{\circ} \cdots, 180^{\circ}
θ=0∘,1∘⋯,180∘:
P ( θ ) = 1 a H ( θ ) U N U N H a ( θ ) \begin{equation*} P(\theta) = \frac{1}{\mathbf{a}^H(\theta)\mathbf{U}_N\mathbf{U}_N^H\mathbf{a}(\theta)} \end{equation*} P(θ)=aH(θ)UNUNHa(θ)1
此时得到一组 P ( θ ) P(\theta) P(θ), K K K 个最大值对应的 θ \theta θ 就是需要返回的结果。
2.3 代码实现
% music.m
clear;
clc;
close all;
%% 参数设定
c = 3e8; % 光速
fc = 500e6; % 载波频率
lambda = c/fc; % 波长
d = lambda/2; % 阵元间距,可设 2*d = lambda
twpi = 2.0*pi; % 2pi
derad = pi/180; % 角度转弧度
theta = [-20, 30]*derad; % 待估计角度
idx = 0:1:7; idx = idx'; % 阵元位置索引
M = length(idx); % 阵元数
K = length(theta); % 信源数
T = 512; % 快拍数
SNR = 0; % 信噪比
%% 信号模型建立
S = randn(K,T) + 1j*randn(K,T); % 复信号矩阵S,维度为K*T
% A = exp(-1j*twpi*d*idx*sin(theta)/lambda); % 方向矢量矩阵A,维度为M*K
A = exp(-1j*pi*idx*sin(theta)); % 2d = lambda,直接忽略不写
X = A*S; % 接收矩阵X,维度为M*T
X = awgn(X,SNR,'measured'); % 添加噪声
%% MUSIC 算法
% 计算协方差矩阵
R = X*X'/T;
% 特征值分解并取得噪声子空间
[U,D] = eig(R); % 特征值分解
[D,I] = sort(diag(D)); % 将特征值排序从小到大
U = fliplr(U(:, I)); % 对应特征矢量排序,fliplr 之后,较大特征值对应的特征矢量在前面
Un = U(:, K+1:M); % 噪声子空间
Gn = Un*Un';
% 空间谱搜索
searchGrids = 0.1; % 搜索间隔
ang = (-90:searchGrids:90)*derad;
Pmusic = zeros(1, length(ang)); % 空间谱
for i = 1:length(ang)
a = exp(-1j*pi*idx*sin(ang(i)));
Pmusic(:, i) = 1/(a'*Gn*a);
end
% 归一化处理,单位化为 db
Pmusic = abs(Pmusic);
Pmusic = 10*log10(Pmusic/max(Pmusic));
% 作图
figure;
plot(ang/derad, Pmusic, '-', 'LineWidth', 1.5);
set(gca, 'XTick',(-90:30:90));
xlabel('\theta(\circ)', 'FontSize', 12, 'FontName', '微软雅黑');
ylabel('空间谱(dB)', 'FontSize', 12, 'FontName', '微软雅黑');
% 找出空间谱Pmusic中的峰值并得到其对应角度
[pks, locs] = findpeaks(Pmusic); % 找极大值
[pks, id] = sort(pks);
locs = locs(id(end-K+1:end))-1;
Theta = locs*searchGrids - 90;
Theta = sort(Theta);
disp('估计结果:');
disp(Theta);