阵列信号基础之4:PM 算法
模型
PM 算法,就是传播算子(Propagator method, PM)算法 。和其他子空间算法不同,它不需要 SVD 过程 就可以快速获得噪声子空间。
假设有
K
K
K 个来自不同方向的信号
s
1
(
t
)
,
⋯
,
s
K
(
t
)
s_1(t),\cdots,s_K(t)
s 1 ( t ) , ⋯ , s K ( t ) ,对应着角度
θ
1
,
⋯
,
θ
K
\theta_1,\cdots,\theta_K
θ 1 , ⋯ , θ K 。从而对于
M
M
M 元均匀线阵的接收信号,表示如下:
x
(
t
)
=
A
(
θ
)
s
(
t
)
+
n
(
t
)
\mathbf x(t) = \mathbf A(\theta) \mathbf s(t)+\mathbf n(t)
x ( t ) = A ( θ ) s ( t ) + n ( t ) 其中
s
(
t
)
=
[
s
1
(
t
)
,
⋯
,
s
K
(
t
)
]
T
n
(
t
)
=
[
n
1
(
t
)
,
⋯
,
n
M
(
t
)
]
T
x
(
t
)
=
[
x
1
(
t
)
,
⋯
,
x
M
(
t
)
]
T
A
(
θ
)
=
[
a
(
θ
1
)
,
⋯
,
a
(
θ
K
)
]
a
(
θ
k
)
=
[
1
,
exp
(
j
ψ
k
)
⋯
,
exp
(
j
(
M
−
1
)
ψ
k
)
]
T
ψ
k
=
2
π
d
sin
θ
k
λ
\begin{aligned} \mathbf s(t) &= [s_1(t),\cdots,s_K(t)]^T \\ \mathbf n(t) &= [n_1(t),\cdots,n_M(t)]^T \\ \mathbf x(t) &= [x_1(t),\cdots,x_M(t)]^T \\ \mathbf A(\boldsymbol \theta) &= [\mathbf a (\theta_1),\cdots,\mathbf a(\theta_K)] \\ \mathbf a(\theta_k) &=[1,\exp(j\psi_k)\cdots,\exp(j(M-1)\psi_k) ]^T \\ \psi_k &= \frac{2\pi d \sin\theta_k}{\lambda} \end{aligned}
s ( t ) n ( t ) x ( t ) A ( θ ) a ( θ k ) ψ k = [ s 1 ( t ) , ⋯ , s K ( t ) ] T = [ n 1 ( t ) , ⋯ , n M ( t ) ] T = [ x 1 ( t ) , ⋯ , x M ( t ) ] T = [ a ( θ 1 ) , ⋯ , a ( θ K ) ] = [ 1 , exp ( j ψ k ) ⋯ , exp ( j ( M − 1 ) ψ k ) ] T = λ 2 π d sin θ k
具体细节参考 ULA 。
概念原理
将矩阵
A
∈
C
M
×
K
\mathbf A \in \mathbb C^{M \times K}
A ∈ C M × K 分块:
A
=
[
A
1
A
2
]
A
1
∈
C
K
×
K
A
2
∈
C
(
M
−
K
)
×
K
\begin{aligned} \mathbf A &= \begin{bmatrix} \mathbf A_1 \\ \hline \mathbf A_2 \end{bmatrix}\\ \\ \mathbf A_1 &\in \mathbb C^{K \times K} \\ \mathbf A_2 &\in \mathbb C^{(M-K) \times K} \end{aligned}
A A 1 A 2 = [ A 1 A 2 ] ∈ C K × K ∈ C ( M − K ) × K
在此基础上,假设
A
1
\mathbf A_1
A 1 是非奇异矩阵,即
A
1
\mathbf A_1
A 1 的
K
K
K 行相互独立,则
A
2
\mathbf A_2
A 2 是
A
1
\mathbf A_1
A 1 的线性变换,有关系
A
2
=
P
H
A
1
\textcolor{blue}{\boxed{\mathbf A_2 = \mathbf P^H \mathbf A_1}}
A 2 = P H A 1 上面公式中的
P
∈
C
K
×
(
M
−
K
)
\mathbf P \in \mathbb C^{K \times (M-K)}
P ∈ C K × ( M − K ) 就是本文的主角——传播算子 。
再令
Q
H
=
[
P
H
−
I
M
−
K
]
\mathbf Q^H = \left [ \begin{array}{c:c} \begin{matrix} \mathbf P^H \end{matrix}& \begin{matrix} -\mathbf I_{M-K} \end{matrix} \end{array} \right ]
Q H = [ P H − I M − K ]
我们可以发现
Q
H
A
=
[
P
H
−
I
M
−
K
]
[
A
1
A
2
]
=
P
H
A
1
−
A
2
=
0
\begin{aligned}\mathbf Q^H \mathbf A &= \left [ \begin{array}{c:c} \begin{matrix} \mathbf P^H \end{matrix}& \begin{matrix} -\mathbf I_{M-K} \end{matrix} \end{array} \right ] \begin{bmatrix} \mathbf A_1 \\ \hline \mathbf A_2 \end{bmatrix} \\ &= \mathbf P^H \mathbf A_1- \mathbf A_2 \\ &=0 \end{aligned}
Q H A = [ P H − I M − K ] [ A 1 A 2 ] = P H A 1 − A 2 = 0 此式表明,
Q
\mathbf Q
Q 的列向量 和
A
\mathbf A
A 的子空间 是正交 的。联系 MUSIC 算法 ,本质上
Q
\mathbf Q
Q 就相当于噪声子空间 。
算法步骤
接下来,就是问题来了:
Q
\mathbf Q
Q 怎么求?
由于
Q
\mathbf Q
Q 和信号的方向 有关,可通过接收信号多快拍构造的矩阵 以及空间协方差 矩阵分块
X
=
[
x
(
1
)
,
x
(
2
)
,
⋯
,
x
(
N
)
]
=
[
X
1
X
2
]
∈
C
M
×
N
X
1
∈
C
K
×
N
X
2
∈
C
(
M
−
K
)
×
N
\begin{aligned} \mathbf X &= [\mathbf x(1),\mathbf x(2),\cdots,\mathbf x(N)] = \begin{bmatrix} \mathbf X_1 \\ \hline \mathbf X_2 \end{bmatrix} \in \mathbb C^{M \times N} \\ \\ \mathbf X_1 &\in \mathbb C^{K \times N} \\ \mathbf X_2 &\in \mathbb C^{(M-K) \times N} \end{aligned}
X X 1 X 2 = [ x ( 1 ) , x ( 2 ) , ⋯ , x ( N ) ] = [ X 1 X 2 ] ∈ C M × N ∈ C K × N ∈ C ( M − K ) × N
以及
R
=
E
(
x
(
t
)
x
H
(
t
)
)
=
[
G
H
]
∈
C
M
×
M
G
∈
C
M
×
K
H
∈
C
M
×
(
M
−
K
)
\begin{aligned} \mathbf R &= \mathbb{E}(\mathbf x(t)\mathbf x^H(t)) =\begin{bmatrix} \mathbf G & \mathbf H \end{bmatrix} \in \mathbb C^{M \times M} \\ \\ \mathbf G &\in \mathbb C^{M \times K} \\ \mathbf H &\in \mathbb C^{M \times (M-K)} \end{aligned}
R G H = E ( x ( t ) x H ( t ) ) = [ G H ] ∈ C M × M ∈ C M × K ∈ C M × ( M − K )
注意,在这里还有一层关系,不考虑噪声的时候,有
X
=
[
x
(
1
)
,
x
(
2
)
,
⋯
,
x
(
N
)
]
=
[
X
1
X
2
]
=
A
[
s
(
1
)
,
s
(
2
)
,
⋯
,
s
(
N
)
]
=
A
S
=
[
A
1
A
2
]
S
=
[
X
1
X
2
]
A
1
S
=
X
1
A
2
S
=
X
2
\begin{aligned} \mathbf X &= [\mathbf x(1),\mathbf x(2),\cdots,\mathbf x(N)] =\begin{bmatrix} \mathbf X_1 \\ \hline \mathbf X_2 \end{bmatrix} \\ &= \mathbf A [\mathbf s(1),\mathbf s(2),\cdots,\mathbf s(N)] \\ &= \mathbf A \mathbf S \\ &=\begin{bmatrix} \mathbf A_1 \\ \hline \mathbf A_2 \end{bmatrix} \mathbf S =\begin{bmatrix} \mathbf X_1 \\ \hline \mathbf X_2 \end{bmatrix} \\ \mathbf A_1 \mathbf S &= \mathbf X_1 \\ \mathbf A_2 \mathbf S &= \mathbf X_2 \\ \end{aligned}
X A 1 S A 2 S = [ x ( 1 ) , x ( 2 ) , ⋯ , x ( N ) ] = [ X 1 X 2 ] = A [ s ( 1 ) , s ( 2 ) , ⋯ , s ( N ) ] = A S = [ A 1 A 2 ] S = [ X 1 X 2 ] = X 1 = X 2
所以,
A
2
S
=
P
H
A
1
S
⟹
X
2
=
P
H
X
1
\mathbf A_2 \mathbf S = \mathbf P^H \mathbf A_1 \mathbf S \Longrightarrow \boxed{ \mathbf X_2 = \mathbf P^H \mathbf X_1}
A 2 S = P H A 1 S ⟹ X 2 = P H X 1
还有这层关系,
R
=
E
(
x
(
t
)
x
H
(
t
)
)
=
E
(
A
s
(
t
)
s
H
(
t
)
A
H
)
=
A
R
ss
A
H
=
A
R
ss
[
A
1
H
A
2
H
]
=
[
G
H
]
G
=
A
R
ss
A
1
H
H
=
A
R
ss
A
2
H
=
A
R
ss
A
1
H
P
⟹
H
=
G
P
\begin{aligned} \mathbf R &= \mathbb{E}(\mathbf x(t)\mathbf x^H(t)) = \mathbb{E}(\mathbf A \mathbf s(t)\mathbf s^H(t) \mathbf A^H) \\ &=\mathbf A \mathbf R_{\text{ss}} \mathbf A^H = \mathbf A \mathbf R_{\text{ss}} \left [ \begin{array}{c:c} \begin{matrix} \mathbf A_1^H \end{matrix}& \begin{matrix} \mathbf A_2^H \end{matrix} \end{array} \right] \\ &=\begin{bmatrix} \mathbf G & \mathbf H \end{bmatrix} \\ \\ \mathbf G &= \mathbf A \mathbf R_{\text{ss}} \mathbf A_1^H \\ \\ \mathbf H &= \mathbf A \mathbf R_{\text{ss}} \mathbf A_2^H = \mathbf A \mathbf R_{\text{ss}} \mathbf A_1^H \mathbf P \Longrightarrow \boxed{\mathbf H= \mathbf G \mathbf P} \end{aligned}
R G H = E ( x ( t ) x H ( t ) ) = E ( A s ( t ) s H ( t ) A H ) = A R ss A H = A R ss [ A 1 H A 2 H ] = [ G H ] = A R ss A 1 H = A R ss A 2 H = A R ss A 1 H P ⟹ H = G P
但实际系统噪声是不可忽略的,所以最终传播算子
P
\mathbf P
P 可以通过最小化
J
x
(
P
)
=
∥
X
2
−
P
H
X
1
∥
F
2
J
R
(
P
)
=
∥
H
−
G
P
∥
F
2
\begin{aligned} J_x(\mathbf P)&= \Vert \mathbf X_2 - \mathbf P^H \mathbf X_1 \Vert_F^2\\ J_R(\mathbf P)&= \Vert \mathbf H - \mathbf G \mathbf P \Vert_F^2 \end{aligned}
J x ( P ) J R ( P ) = ∥ X 2 − P H X 1 ∥ F 2 = ∥ H − G P ∥ F 2
因此,根据最小二乘法,解为
P
^
H
=
X
2
(
X
1
H
X
1
)
−
1
X
1
H
P
^
=
(
G
H
G
)
−
1
G
H
H
\begin{aligned} \hat{\mathbf P}^H &= \mathbf X_2 (\mathbf X_1^H \mathbf X_1)^{-1} \mathbf X_1^H \\ \hat{\mathbf P} &= (\mathbf G^H \mathbf G)^{-1} \mathbf G^H \mathbf H \end{aligned}
P ^ H P ^ = X 2 ( X 1 H X 1 ) − 1 X 1 H = ( G H G ) − 1 G H H
所以我们就得到了
Q
^
H
=
[
P
^
H
−
I
M
−
K
]
\hat{\mathbf Q}^H = \left [ \begin{array}{c:c} \begin{matrix} \hat{\mathbf P}^H \end{matrix}& \begin{matrix} -\mathbf I_{M-K} \end{matrix} \end{array} \right ]
Q ^ H = [ P ^ H − I M − K ]
估计算法
最大谱搜索
第一种就是谱估计,空间搜索。和 MUSIC 算法 一样。
max
F
(
θ
)
=
max
1
a
H
(
θ
)
Q
^
H
Q
^
a
(
θ
)
\max F(\theta) =\max \frac{1}{ \mathbf a^H (\theta) \hat{\mathbf Q}^H \hat{\mathbf Q} \mathbf a (\theta)}
max F ( θ ) = max a H ( θ ) Q ^ H Q ^ a ( θ ) 1
代码
% PM算法 MATLAB CODE
clc;
close all ;
clear;
M = 10 ; % x轴阵元数
K = 2 ; % 信号数
d_lamda = 1 / 2 ; % 阵元间距
theta = [ - 30 , 20 ] ; % x轴方位角
L = 100 ; % 快拍数
snr = 5 ; % 信噪比
S = sqrt( 10 . ^ ( snr/ 10 ) ) * ( randn( K, L) + 1j * randn( K, L) ) ; % 生成信号向量
A = exp( - 1j * ( 0 : M- 1 ) '* d_lamda* 2 * pi* sin( theta/ 180 * pi) ) ; % 生成导向矢量
A1 = A( 1 : K, : ) ;
A2 = A( K+ 1 : M, : ) ;
X = A* S+ ( 1 / sqrt( 2 ) ) * ( randn( M, L) + 1j * randn( M, L) ) ; % 生成接收矢量
X1 = X( 1 : K, : ) ;
X2 = X( K+ 1 : M, : ) ;
R = X* X'/ L; % 协方差矩阵
G = R( : , 1 : K) ;
H = R( : , K+ 1 : M) ;
% P_H = X2* pinv( X1'*X1)*X1' ; % 传播算子P^ H
P = pinv( G'*G)*G' * H; % 传播算子P
% Q_H = [ P_H, - eye( M- K) ] ; % 构造噪声子空间
Q = [ P; - eye( M- K) ] ; % 构造噪声子空间
% Rq = Q_H* Q_H';
Rq = Q* Q';
searching_doa= - 90 : 0.1 : 90 ; % 搜索范围为- 90 ~ 90 度
for i= 1 : length( searching_doa)
a_theta= exp( - 1j * ( 0 : M- 1 ) '* 2 * pi* d_lamda* sin( pi* searching_doa( i) / 180 ) ) ;
Pmusic( i) = 1 . / abs ( ( a_theta) '* Rq* a_theta) ;
end
plot( searching_doa, 10 * log( Pmusic) , 'r' ) ;
title( 'Propagator Method' ) ;
grid on;
xlim( [ - 90 , 90 ] ) ;
xlabel( 'angle (degree)' ) ;
ylabel( 'magnitude (dB)' ) ;
set ( gca, 'xtick' , [ - 90 : 20 : 90 ] ) ;
求根思想
第二种方法类似于ROOT-MUSIC算法,无需搜索,直接求根。
a = zeros( 2 * M- 1 , 1 ) '; % 找出多项式的系数,并按阶数从高至低排列
for i= - ( M- 1 ) : ( M- 1 )
a( i+ M) = sum ( diag( Rq, i) ) ;
end
a1= roots( a) ; % 使用ROOTS函数求出多项式的根
a2= a1( abs ( a1) < 1 ) ; % 找出在单位圆里且最接近单位圆的N个根
[ lamda, I] = sort( abs ( abs ( a2) - 1 ) ) ; % 挑选出最接近单位圆的N个根
f= a2( I( 1 : K) ) ; % 计算信号到达方向角
source_doa= [ asin( angle( f( 1 ) ) / pi) * 180 / pi, asin( angle( f( 2 ) ) / pi) * 180 / pi] ;
source_doa= sort( source_doa) ;
disp( 'source_doa' ) ;
disp( source_doa) ;