1 引言
MUSIC算法本质上是对信号进行“正交分解”的过程。一般地,MUSIC算法用于DOA估计,因此本文首先阐述在这种应用场景下对MUSIC算法的相关理解;接着,分析网络上一些仿真代码的不合理性;最后,给出MUSIC在参数估计领域的其他应用。
2 基本算法流程(一维)与代码(搜索版本,非快速运算)
假设线阵有
M
M
M个阵元,某时刻
t
t
t各个阵元接收到的复信号组成一个“快拍”,记为
y
(
t
)
∈
C
M
\boldsymbol{y}(t) \in \mathbb{C}^M
y(t)∈CM,则
N
N
N个快拍的接收信号可以表示为
Y
∈
C
M
×
N
\boldsymbol{Y} \in \mathbb{C}^{M \times N}
Y∈CM×N,且
Y
=
[
y
(
1
f
s
)
,
?
?
,
y
(
N
f
s
)
]
\boldsymbol{Y}=\left[ \boldsymbol{y}(\frac{1}{f_s}), \cdots, \boldsymbol{y}(\frac{N}{f_s})\right]
Y=[y(fs?1?),?,y(fs?N?)]。其中,
f
s
f_s
fs?为A/D的采样率。 MUSIC算法可以简单地划分为以下三个步骤: a ) 估计快拍自相关,进而分析信号的“空间相关性”(一般用“平均值”近似“均值”):
R
=
E
[
y
y
H
]
≈
R
^
=
Y
Y
H
N
\boldsymbol{R} = E\left[ \boldsymbol{y}\boldsymbol{y}^H \right] \approx \boldsymbol{\hat{R}} = \frac{\boldsymbol{Y}\boldsymbol{Y}^H}{N}
R=E[yyH]≈R^=NYYH? b ) 自相关矩阵的特征值分解:
R
^
U
=
U
Λ
Λ
=
diag
[
λ
1
,
?
?
,
λ
M
]
U
=
[
u
1
,
?
?
,
u
M
]
\begin{aligned} \boldsymbol{\hat{R}} \boldsymbol{U} &= \boldsymbol{U} \boldsymbol{\Lambda} \\ \boldsymbol{\Lambda} &= \text{diag} \left[ \lambda_1, \cdots, \lambda_M \right] \\ \boldsymbol{U} &= \left[ \boldsymbol{u}_1,\cdots,\boldsymbol{u}_M \right] \end{aligned}
R^UΛU?=UΛ=diag[λ1?,?,λM?]=[u1?,?,uM?]? 其中,
λ
i
\lambda_i
λi?为特征值,
u
i
\boldsymbol{u}_i
ui?为与之对应的特征向量。假设存在
K
K
K个“时间不相关”且“空间不相关”的信号,则提取
M
?
K
M-K
M?K个小特征值对应的特征向量,组成噪声子空间
U
n
\boldsymbol{U}_n
Un?。 c ) 搜索: 生成理想的信号快拍
a
(
θ
)
∈
C
M
\boldsymbol{a}(\theta) \in \mathbb{C}^M
a(θ)∈CM, 则MUSIC输出可以表示为:
P
M
U
S
I
C
(
θ
)
=
1
a
H
(
θ
)
U
n
U
n
H
a
(
θ
)
P_{MUSIC}(\theta) = \frac{1}{\boldsymbol{a}^H(\theta) \boldsymbol{U}_n \boldsymbol{U}^H_n \boldsymbol{a}(\theta)}
PMUSIC?(θ)=aH(θ)Un?UnH?a(θ)1?
代码,其中
A
=
[
a
(
θ
1
)
,
?
?
,
a
(
θ
L
)
]
\boldsymbol{A} = \left[ \boldsymbol{a}(\theta_1) ,\cdots, \boldsymbol{a}(\theta_L)\right]
A=[a(θ1?),?,a(θL?)]:
function Pmusic = MUSIC(Y, K, A)
% size(Y) = [M, N]
N = size(Y, 2);
% step1:
R = (Y * Y') / N;
% step2:
[U, D] = eig(R);
[~, idx] = sort(diag(D), 'descend');
U = U(:,idx);
Un = U(:,K+1:end);
% step3:
Pmusic = zeros(size(A, 2));
for ii = 1:size(A, 2)
a = A(:,ii);
Pmusic(ii) = 1 / ( a' * (Un * Un') * a);
end
end
3 空间存在正交分量且时间存在正交分量的信号才能超分辨!!!
注:存在正交分量指两个向量在向量空间中指向的方向存在正交分量,也即这两个向量组成的矩阵是列满秩的。 截至发文时,MUSIC相关文章中最热的文章为《较为详细的MUSIC算法原理及MATLAB实现》 。在该文章中,存在一处仿真BUG,即强制设定频率相同的信号在时间轴上是正交的,具体涉及到的代码为:
A=exp(-1i*2*pi*d.'*sin(theta*derad)); %方向矢量
S=randn(M,K); %信源信号,入射信号
X=A*S; %构造接收信号
上述代码中,从方向矢量
A
A
A可以看出
k
=
2
π
λ
=
2
π
k=\frac{2\pi}{\lambda}=2\pi
k=λ2π?=2π,则信号波长
λ
=
1
\lambda=1
λ=1,频率
f
=
c
λ
=
3
×
1
0
8
f=\frac{c}{\lambda}=3\times10^8
f=λc?=3×108。空间轴上,由于同频信号入射角度不同,则不同方向的信号存在“正交成分”。而在时间轴上,这些同频信号应该是“相同”的,即
e
j
2
π
f
t
e^{j2\pi ft}
ej2πft。程序中其强制设置为高斯分布的随机值,使得在时间轴上这些信号存在正交成分,才能实现超分辨。因此,我们将重写一段程序,给出仿真结果,从而验证网上仿真结果的不合理性: a ) 当
S
=
randn
(
M
,
K
)
S=\text{randn}(M,K)
S=randn(M,K)时(仿真BUG) b )当
S
=
e
j
2
π
f
(
0
:
N
?
1
)
/
f
s
S=e^{j2\pi f(0:N-1)/fs}
S=ej2πf(0:N?1)/fs时(实际情况)
4 结论及原因分析
从上述结果中可知,MUSIC算法对信号在时间维度上的相关性也有要求。在《Music算法详解》 中,也提到了这种现象,产生该现象的原因如下: 在求解自相关矩阵的时候,我们使用时间平均近似集总平均,即认为
E
[
y
y
H
]
≈
Y
Y
H
N
E\left[ \boldsymbol{y}\boldsymbol{y}^H \right] \approx \frac{\boldsymbol{Y}\boldsymbol{Y}^H}{N}
E[yyH]≈NYYH? 但由于同频信号在时间维度是完全相同的,因而其在时间维度不能视为“各态历经的平稳随机过程”,而只有各态历经约束情况下,我们才能够认为时间平均能够近似集总平均,这就是MUSIC算法的问题所在。
5 主程序代码
clearvars;
close all;
clc;
%%
M = 16;
N = 200;
fs = 20e3;
f = 10 * fs / N;
lambda = 3e8/f;
search_Azimuth = -90:1:90;
d = 0.5*lambda;
snr = 20;
source_doa = [0,2,-10];
K = length(source_doa);
%%
Xm = d*(0:M-1).';
lambda = 3e8 / f;
A = zeros(M, K);
for q = 1:K
A(:,q) = exp(-1j*Xm*2*pi*sin(source_doa(q)*pi/180)/lambda);
end
% MK and KN -> MN
noise = (1/sqrt(2)*sqrt(10.^(-snr/10)))*(randn(M,N)+ 1j*randn(M,N));
% s = 1/sqrt(2)*(randn(K, N) + 1j*randn(K,N)); % 仿真bug
s = repmat(exp(1j*2*pi*f*(0:N-1)/fs), K, 1); % 实际情况
Y = A*s + noise; % received data
Ax = zeros(M, length(search_Azimuth));
for q = 1:length(search_Azimuth)
Ax(:,q) = exp(-1j*Xm*2*pi*sin(search_Azimuth(q)*pi/180)/lambda);
end
Pmusic = MUSIC(Y, K, Ax);
figure;
plot(search_Azimuth, db(Pmusic), 'LineWidth', 1);
grid on; axis tight;
xlabel('$\theta$(degree)','Interpreter','latex');
|