空间匹配滤波
阵列方向图函数
F
(
θ
)
=
W
H
∗
α
(
θ
)
F(\theta) = W^{H}*\alpha(\theta)
F(θ)=WH∗α(θ)
当权重矢量
W
=
α
(
θ
0
)
W=\alpha(\theta_0)
W=α(θ0)时,阵列方向图增益G(θ)在θ0处增益达到最大。
f0 = 16e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
sita = -5/9*pi:0.01:5/9*pi;
sita0 = pi/6;
n = 16;
N = 0:16-1; % 16个阵元
move_sita = exp(1j*N'*2*pi*d*sin(sita0)/lambda); % 权重
alpha_sita = exp(1j*N'*2*pi*d*sin(sita)/lambda); % 导向矢量
F = move_sita'*alpha_sita;
refer = sin(pi*d*n*(sin(sita))/lambda)/n./sin(pi*d*(sin(sita))/lambda);
figure('Name','空域匹配滤波');
plot(sita/2/pi*360,20*log10(abs(F)/max(abs(F))));
hold on
plot(sita/2/pi*360,20*log10(abs(refer)/max(abs(refer))),'--');
xticks(-100:20:100);
xlabel('角度');
ylabel('归一化功率增益');
hold off
最优波束形成
最大信干噪比(MINR)准则
%% MSINR准则下使用带功率的协方差公式
clc;clear;close;
N = 16;
n = 0:N-1;
f0 = 10e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
sita0 = 0; % 期望信号方向
signal_e = 10^5; % 信号能量
sita1 = deg2rad(-35);
sita2 = deg2rad(-19);
sita3 = deg2rad(45);
sita = [sita1 sita2 sita3]; % 干扰方向
INR1 = 10^(40/10);
INR2 = 10^(35/10);
INR3 = 10^(50/10);
INR = [INR1 INR2 INR3]; % 干扰强度
A = exp(1j*2*pi*n'*sin(sita)*d/lambda); % 干扰信号的导向矢量
alpha0 = exp(1j*2*pi*n'*sin(sita0)*d/lambda); % 期望信号的导向矢量值
Rin = zeros(N,N);
for i = 1:length(sita)
Rin = Rin + INR(i)*A(:,i)*A(:,i)'; % 干噪协方差矩阵
end
Rin = Rin + eye(N); % 加入噪声
RS = signal_e*(alpha0*alpha0');
[V,D] = eig(RS,Rin); % 得到广义特征值与特征向量
[~,I] = max(diag(D));
w = V(:,I); % 最大特征值所对应的特征向量就是最优权矢量
angle = -5/9*pi:0.01:5/9*pi;
A1 = exp(1j*2*pi*n'*sin(angle)*d/lambda);
CBF = db(abs(sum(A1)).^2/N/N)/2; % 权重全为1时的增益方向图
MSINR = abs(w'*A1);
MSINR = db(MSINR/max(MSINR));
CBF(CBF < -80) = -80;
MSINR(MSINR < -80) = -80;
[~,ind1] = min(abs(angle-sita1));
[~,ind2] = min(abs(angle-sita2));
[~,ind3] = min(abs(angle-sita3));
figure('Name','最优化波束形成');
plot(rad2deg(angle),CBF);
hold on
plot(rad2deg(angle),MSINR,'--');
plot(rad2deg(sita1), MSINR(ind1),'ro', 'MarkerFaceColor', 'r');
text(rad2deg(sita1), MSINR(ind1), '\leftarrow干扰1');
plot(rad2deg(sita2), MSINR(ind2),'ro', 'MarkerFaceColor', 'r');
text(rad2deg(sita2), MSINR(ind2), '\leftarrow干扰2');
plot(rad2deg(sita3), MSINR(ind3),'ro', 'MarkerFaceColor', 'r');
text(rad2deg(sita3), MSINR(ind3), '\leftarrow干扰3');
xlabel('角度');
ylabel('归一化功率增益');
legend('CBF','MSINR');
hold off
MSINR的图像相比于匹配滤波在干扰处确实有塌陷,但没有书上给的图效果好。
%% MSINR准则下使用快拍的方式求协方差矩阵
clc;clear;close;
N = 16;
n = 0:N-1;
f0 = 16e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
INR = [40 35 50];
SNR = 40;
theta = [-40 -15 35];
theta0 = 20;
snap = 1024; % 快拍数
signal = exp(1j*2*pi*f0*(0:snap-1)/(2*snap));
INR = 10.^(INR/10)/2;
A = exp(1j*2*pi*n'*sin(deg2rad(theta))*d/lambda);
alpha0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
xs = sqrt(10^(SNR/10))*alpha0*signal;
kj = length(theta); % 干扰数
rs = zeros(kj,snap);
for i = 1:kj
for j = 1:snap
rs(i,j) = sqrt(INR(i))*(randn(1)+1j*randn(1))*signal(j);
end
end
noise = (randn(N,snap)+1j*randn(N,snap))/sqrt(2);
Rs = 1/snap*(xs*xs');
J = A*rs;
Rin = 1/snap*(J*J'+noise*noise');
[V,D] = eig(Rs,Rin);
[~,I] = max(diag(D));
w = V(:,I);
w0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
angle = -5/9*pi:0.001:5/9*pi;
F = w'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
F0 = w0'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
figure('Name','MSINR');
F1 = db(abs(F)/max(abs(F)));
plot(rad2deg(angle),F1);
hold on
plot(rad2deg(angle),db(abs(F0)/max(abs(F0))),'--');
angle = rad2deg(angle);
[~,ind1] = min(abs(angle-theta(1)));
[~,ind2] = min(abs(angle-theta(2)));
[~,ind3] = min(abs(angle-theta(3)));
text(theta(1),F1(ind1),'\leftarrow干扰1');
plot(theta(1),F1(ind1),'ro','MarkerFaceColor','r');
text(theta(2),F1(ind2),'\leftarrow干扰2');
plot(theta(2),F1(ind2),'ro','MarkerFaceColor','r');
text(theta(3),F1(ind3),'\leftarrow干扰3');
plot(theta(3),F1(ind3),'ro','MarkerFaceColor','r');
legend('最优化','匹配滤波');
title('MSINR,干扰方向[-40 -15 35]');
hold off
效果明显更好,但目前不知道这两种方式为什么会有这么大的差异。
线性约束最小方差准则(LCMV)与最小方差无失真响应(MVDR)
%% MVDR
clc;clear;close;
N = 16;
n = 0:N-1;
f0 = 16e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
INR = [40 35 50];
SNR = 40;
theta = [-40 -15 35];
theta0 = 20;
snap = 1024; % 快拍数
signal = exp(1j*2*pi*f0*(0:snap-1)/(2*snap));
INR = 10.^(INR/10)/2;
A = exp(1j*2*pi*n'*sin(deg2rad(theta))*d/lambda);
alpha0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
xs = sqrt(10^(SNR/10))*alpha0*signal;
kj = length(theta); % 干扰数
rs = zeros(kj,snap);
for i = 1:kj
for j = 1:snap
rs(i,j) = sqrt(INR(i))*(randn(1)+1j*randn(1))*signal(j);
end
end
noise = (randn(N,snap)+1j*randn(N,snap))/sqrt(2);
X = A*rs + noise;
Rx_pinv = pinv(1/snap*(X*X'));
% J = A*rs;
% Rx_pinv = 1/snap*pinv(J*J'+noise*noise');
w = Rx_pinv*alpha0/(alpha0'*Rx_pinv*alpha0);
w0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
angle = -5/9*pi:0.001:5/9*pi;
F = w'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
F0 = w0'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
figure('Name','MVDR');
F1 = db(abs(F)/max(abs(F)));
plot(rad2deg(angle),F1);
hold on
plot(rad2deg(angle),db(abs(F0)/max(abs(F0))),'--');
angle = rad2deg(angle);
[~,ind1] = min(abs(angle-theta(1)));
[~,ind2] = min(abs(angle-theta(2)));
[~,ind3] = min(abs(angle-theta(3)));
text(theta(1),F1(ind1),'\leftarrow干扰1');
plot(theta(1),F1(ind1),'ro','MarkerFaceColor','r');
text(theta(2),F1(ind2),'\leftarrow干扰2');
plot(theta(2),F1(ind2),'ro','MarkerFaceColor','r');
text(theta(3),F1(ind3),'\leftarrow干扰3');
plot(theta(3),F1(ind3),'ro','MarkerFaceColor','r');
legend('最优化','匹配滤波');
title('MVDR,干扰方向[-40 -15 35]');
hold off
比较MSINR和MVDR的图像可以推断两者在Ri+n和θ0已知并相等的情况下确实是等价的。
%% LCMV
clc;clear;close;
N = 16;
n = 0:N-1;
f0 = 16e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
INR = [40 35 50];
SNR = 40;
theta = [-40 -15 35];
theta0 = 20;
theta1 = -10;
snap = 1024; % 快拍数
signal = exp(1j*2*pi*f0*(0:snap-1)/(2*snap));
INR = 10.^(INR/10)/2;
A = exp(1j*2*pi*n'*sin(deg2rad(theta))*d/lambda);
alpha0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
alpha1 = exp(1j*2*pi*n'*sin(deg2rad(theta1))*d/lambda);
C = [alpha0 alpha1]; % 约束矩阵
[~,L] = size(C);
f = ones(L,1);
kj = length(theta); % 干扰数
rs = zeros(kj,snap);
for i = 1:kj
for j = 1:snap
rs(i,j) = sqrt(INR(i))*(randn(1)+1j*randn(1))*signal(j);
end
end
noise = (randn(N,snap)+1j*randn(N,snap))/sqrt(2);
X = A*rs + noise;
% X = A*rs + noise + C*[signal;signal]; %将Rin替换成Rx
Rx_pinv = pinv(1/snap*(X*X'));
w = Rx_pinv*C/(C'*Rx_pinv*C)*f;
angle = -5/9*pi:0.001:5/9*pi;
F = w'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
figure('Name','LCMV');
F1 = db(abs(F)/max(abs(F)));
plot(rad2deg(angle),F1);
hold on
angle = rad2deg(angle);
[~,ind1] = min(abs(angle-theta(1)));
[~,ind2] = min(abs(angle-theta(2)));
[~,ind3] = min(abs(angle-theta(3)));
[~,ind4] = min(abs(angle-theta0));
[~,ind5] = min(abs(angle-theta1));
text(theta(1),F1(ind1),'\leftarrow干扰1');
plot(theta(1),F1(ind1),'ro','MarkerFaceColor','r');
text(theta(2),F1(ind2),'\leftarrow干扰2');
plot(theta(2),F1(ind2),'ro','MarkerFaceColor','r');
text(theta(3),F1(ind3),'\leftarrow干扰3');
plot(theta(3),F1(ind3),'ro','MarkerFaceColor','r');
text(theta0,F1(ind4),'目标1');
plot(theta0,F1(ind4),'ro','MarkerFaceColor','r');
text(theta1,F1(ind5),'目标2');
plot(theta1,F1(ind5),'ro','MarkerFaceColor','r');
title('LCMV,干扰方向[-40 -15 35] 目标方向[-15 20]');
hold off
若将上述代码的 f 改为[1 0]',则图像如下图所示。
将代码中的Ri+n替换成Rx,方向图旁瓣上升。
均方误差最小准则(MSE)
三种准则比较
SMI(采样协方差矩阵求逆)
有限次快拍下的方向图副瓣较高,且快拍数越少,副瓣越高。
%% SMI
clc;clear;close;
N = 16;
n = 0:N-1;
f0 = 16e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
INR = [40 35 50];
SNR = 40;
theta = [-40 -15 35];
theta0 = 20;
INR = 10.^(INR/10)/2;
A = exp(1j*2*pi*n'*sin(deg2rad(theta))*d/lambda);
alpha0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
kj = length(theta); % 干扰数
snaps = [32 128 1024];
times = 50; % 统计次数
figure('Name','SMI');
hold on
for k = 1:length(snaps)
sumF = 0;
for t = 1:times
snap = snaps(k); % 快拍数
signal = exp(1j*2*pi*f0*(0:snap-1)/(2*snap));
rs = zeros(kj,snap);
for i = 1:kj
for j = 1:snap
rs(i,j) = sqrt(INR(i))*(randn(1)+1j*randn(1))*signal(j);
end
end
noise = (randn(N,snap)+1j*randn(N,snap))/sqrt(2);
X = A*rs + noise;
Rx_pinv = pinv(1/snap*(X*X'));
w = Rx_pinv*alpha0/(alpha0'*Rx_pinv*alpha0);
angle = -5/9*pi:0.001:5/9*pi;
F = w'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
F1 = db(abs(F)/max(abs(F)));
sumF = sumF + F1;
end
sumF = sumF/times;
plot(rad2deg(angle),sumF);
end
angle = rad2deg(angle);
[~,ind1] = min(abs(angle-theta(1)));
[~,ind2] = min(abs(angle-theta(2)));
[~,ind3] = min(abs(angle-theta(3)));
text(theta(1),sumF(ind1),'\leftarrow干扰1');
plot(theta(1),sumF(ind1),'ro','MarkerFaceColor','r');
text(theta(2),sumF(ind2),'\leftarrow干扰2');
plot(theta(2),sumF(ind2),'ro','MarkerFaceColor','r');
text(theta(3),sumF(ind3),'\leftarrow干扰3');
plot(theta(3),sumF(ind3),'ro','MarkerFaceColor','r');
legend('snap = 32','snap = 128','snap = 1024');
title('SMI,干扰方向[-40 -15 35]');
hold off
对角加载技术
%% SMI
clc;clear;close;
N = 16;
n = 0:N-1;
f0 = 16e9; % 雷达工作频率16GHz
c = 3e8;
lambda = c/f0;
d = lambda/2; % 阵元距离
DL = [0 10]; % 10db对角加载,这里是真值
INR = [40 35 50];
SNR = 40;
theta = [-40 -15 35];
theta0 = 20;
INR = 10.^(INR/10)/2;
A = exp(1j*2*pi*n'*sin(deg2rad(theta))*d/lambda);
alpha0 = exp(1j*2*pi*n'*sin(deg2rad(theta0))*d/lambda);
kj = length(theta); % 干扰数
snaps = [32,1024];
times = 50; % 统计次数
figure('Name','SMI');
hold on
sumF = 0;
for s = 1:length(snaps)
snap = snaps(s);
if s == 2
DL = [0];
end
for k = 1:length(DL)
for t = 1:times
signal = exp(1j*2*pi*f0*(0:snap-1)/(2*snap));
rs = zeros(kj,snap);
for i = 1:kj
for j = 1:snap
rs(i,j) = sqrt(INR(i))*(randn(1)+1j*randn(1))*signal(j);
end
end
noise = (randn(N,snap)+1j*randn(N,snap))/sqrt(2);
X = A*rs + noise;
Rx_pinv = pinv(1/snap*(X*X') + DL(k)*eye(N)); %对角加载
w = Rx_pinv*alpha0/(alpha0'*Rx_pinv*alpha0);
angle = -5/9*pi:0.001:5/9*pi;
F = w'*exp(1j*2*pi*n'*sin(angle)*d/lambda);
F1 = db(abs(F)/max(abs(F)));
sumF = sumF + F1;
end
sumF = sumF/times;
plot(rad2deg(angle),sumF);
end
end
angle = rad2deg(angle);
[~,ind1] = min(abs(angle-theta(1)));
[~,ind2] = min(abs(angle-theta(2)));
[~,ind3] = min(abs(angle-theta(3)));
text(theta(1),sumF(ind1),'\leftarrow干扰1');
plot(theta(1),sumF(ind1),'ro','MarkerFaceColor','r');
text(theta(2),sumF(ind2),'\leftarrow干扰2');
plot(theta(2),sumF(ind2),'ro','MarkerFaceColor','r');
text(theta(3),sumF(ind3),'\leftarrow干扰3');
plot(theta(3),sumF(ind3),'ro','MarkerFaceColor','r');
legend('snap = 32','对角加载DL','snap = 1024');
title('SMI,干扰方向[-40 -15 35]');
hold off
广义旁瓣相消器(GSC)
最终得到计算公式如下所示