Capon波束形成器的思想
Capon波束形成器,又叫最小噪声方差波束形成器,其原理就是在知道期望信号来向的时候,通过在将信号来向的响应设置为常量的约束条件下,选择能将阵列接收到的信号的功率最小的权值的方法。那么为什么要这样来进行波束形成呢?因为这样选取权值,相当于获得最大的信干燥比(特定来向的信号的功率为常数,同时使得干扰和噪声尽可能地衰减)
数学推导过程
假设M阵列天线接收到的信号为
X
(
t
)
⃗
=
[
x
1
(
t
)
,
x
2
(
t
)
,
.
.
.
,
x
M
(
t
)
]
T
\vec{X(t)} = [x_1(t), x_2(t), ..., x_M(t)]^T
X(t)=[x1(t),x2(t),...,xM(t)]T,那么经过加权之后输出的信号为
y
(
t
)
=
W
⃗
H
X
(
t
)
⃗
y(t) = \vec{W}^H\vec{X(t)}
y(t)=WHX(t),则接收信号的功率为
E
[
∣
y
(
t
)
∣
2
]
=
E
[
y
(
t
)
×
y
(
t
)
H
]
=
W
⃗
H
R
x
W
⃗
E[|y(t)|^2] = E[y(t) \times y(t)^H] \\ = \vec{W}^HR_x\vec{W}
E[∣y(t)∣2]=E[y(t)×y(t)H]=WHRxW,假设期望信号的来向为
θ
0
\theta_0
θ0,约束条件为
W
⃗
H
a
(
θ
0
)
⃗
=
1
\vec{W}^H\vec{a(\theta_0)} = 1
WHa(θ0)=1,然后利用拉格朗日乘子法来进行极值的求解:
L
(
W
,
λ
)
=
1
2
×
W
⃗
H
R
x
W
⃗
−
λ
(
W
⃗
H
a
(
θ
0
)
⃗
−
1
)
L(W, \lambda) = \frac{1}{2}\times\vec{W}^HR_x\vec{W} - \lambda(\vec{W}^H\vec{a(\theta_0)} - 1)
L(W,λ)=21×WHRxW−λ(WHa(θ0)−1)
对
W
⃗
\vec{W}
W进行求偏导可得(这里就先看成对一个实向量
W
⃗
\vec{W}
W的求导,这里查了资料也没搞清楚为什么是将其看成一个实向量进行操作的)
∂
L
∂
W
=
R
x
W
⃗
−
λ
a
(
θ
0
)
⃗
\frac{\partial{L}}{\partial{W}} = R_x\vec{W} - \lambda\vec{a(\theta_0)}
∂W∂L=RxW−λa(θ0)
令其等于零:
R
x
W
⃗
=
λ
a
(
θ
0
)
⃗
R_x\vec{W} = \lambda\vec{a(\theta_0)}
RxW=λa(θ0)
方程两边同时乘以
左
乘
W
⃗
H
左乘\vec{W}^H
左乘WH:
W
⃗
H
R
x
W
⃗
=
λ
W
⃗
H
a
(
θ
0
)
⃗
\vec{W}^HR_x\vec{W} = \lambda\vec{W}^H\vec{a(\theta_0)}
WHRxW=λWHa(θ0)
代入约束条件可得:
P
m
i
n
=
λ
P_{min} = \lambda
Pmin=λ
进而可得:
W
o
p
t
⃗
=
P
m
i
n
R
x
−
1
a
(
θ
0
)
⃗
\vec{W_{opt}} = P_{min}R_x^{-1}\vec{a(\theta_0)}
Wopt=PminRx−1a(θ0)
下面的问题就是要求出
P
m
i
n
P_{min}
Pmin,继续利用约束条件
W
⃗
H
a
(
θ
0
)
⃗
=
1
\vec{W}^H\vec{a(\theta_0)} = 1
WHa(θ0)=1:
a
(
θ
0
)
⃗
H
W
o
p
t
⃗
=
P
m
i
n
a
(
θ
0
)
⃗
H
R
x
−
1
a
(
θ
0
)
⃗
\vec{a(\theta_0)}^H \vec{W_{opt}} = P_{min}\vec{a(\theta_0)}^HR_x^{-1}\vec{a(\theta_0)}
a(θ0)HWopt=Pmina(θ0)HRx−1a(θ0)
则可得:
P
m
i
n
=
1
a
(
θ
0
)
⃗
H
R
x
−
1
a
(
θ
0
)
⃗
P_{min} = \frac{1}{\vec{a(\theta_0)}^HR_x^{-1}\vec{a(\theta_0)}}
Pmin=a(θ0)HRx−1a(θ0)1
可得最优权值:
W
o
p
t
⃗
=
R
x
−
1
a
(
θ
0
)
⃗
a
(
θ
0
)
⃗
H
R
x
−
1
a
(
θ
0
)
⃗
\vec{W_{opt}} = \frac{R_x^{-1}\vec{a(\theta_0)}}{\vec{a(\theta_0)}^HR_x^{-1}\vec{a(\theta_0)}}
Wopt=a(θ0)HRx−1a(θ0)Rx−1a(θ0)
利用capon算法来实现来向估计
基本思想:由上面的推导过程可以看出,当对于接收到的信号,当权值选取满足在信号来向方向上阵列输出为常数,并且使得信号功率最小的时候,得到的阵列的输出功率为
P
m
i
n
=
1
a
(
θ
0
)
⃗
H
R
x
−
1
a
(
θ
0
)
⃗
P_{min} = \frac{1}{\vec{a(\theta_0)}^HR_x^{-1}\vec{a(\theta_0)}}
Pmin=a(θ0)HRx−1a(θ0)1,其中的
θ
0
\theta_0
θ0的期望信号的来向,于是对于一个阵列,接收到多个来向的信号,可以通过遍历
θ
\theta
θ,通过查看功率峰值,来估计信号的来向和个数。
以8阵元,三个不同来向的信号为例,进行matlab仿真
matlab仿真程序
%利用Capon来进行来向估计
clear;
clc;
M = 8; %阵元个数
m = 0 : M-1;
P_x = 10^(10/10); %信号的功率10dB
f_0 = 1000000; %信号频率1Mhz
T_0 = 1/f_0;
Fs = 10000000; %采样频率10Mhz
t = -T_0*30 : 1/Fs : T_0*30;
c = 3E8;
lambda = c/f_0;
d = lambda/2;
x = sqrt(2*P_x)*exp(1i*2*pi*f_0*t); %信号的复数形式
%theta_in = 10;
%x_in = exp(-1i*2*pi*d*m'*sin(theta_in/180*pi)/lambda)*x + randn(M, length(t)) + i*randn(M, length(t));
theta_in = [10, 60, 30]; %接收到的信号
x_in = zeros(M, length(t));
for i = 1 : length(theta_in)
x_in = x_in + exp(-1i*2*pi*d*m'*sin(theta_in(i)/180*pi)/lambda)*x;
end
x_in = x_in + + randn(M, length(t)) + i*randn(M, length(t));
%计算接收信号的协方差阵
R_x = x_in * x_in'/length(t);
theta = -90 : 90;
P_out = zeros(1, length(theta));
for i = 1 : length(theta)
P_out(i) = 1/(exp(-1i*2*pi*d*m'*sin(theta(i)/180*pi)/lambda)'*inv(R_x)*exp(-1i*2*pi*d*m'*sin(theta(i)/180*pi)/lambda));
end
plot(theta, 10*log10(abs(P_out)));
xlabel('\theta角度');
ylabel('dB');
title('利用capon算法来实现来向估计');