一、概述
本节对MVDR、LCMV、LMS等算法的波束图进行仿真。
二、MVDR代码仿真
2.1 mvdr代码
clc;
clear;
M = 18; % 天线数
lambda = 10;
d = lambda / 2;
L = 100; %快拍数
thetas = [10]; % 期望信号入射角度
thetai = [-30 30]; % 干扰入射角度
n = [0:M-1]';
vs = exp(-1j * 2 * pi * n * d * sind(thetas) / lambda); % 信号方向向量
vn = exp(-1j * 2 * pi * n * d * sind(thetai) / lambda); % 干扰方向向量
f = 1600; % 载波频率
t = [0:L-1];
di = sin(2*pi*f*t/(8*f)); % 期望信号
vn1 = sin(2*pi*2 * f*t/(8*f)); % 干扰信号1
vn2 = sin(2*pi*4 * f*t/(8*f)); % 干扰信号2
A = [vs vn];
St = [di;vn1;vn2];
Xt = A*St + randn(M,L); % 矩阵形式的公式
R_x = 1/L * (Xt * Xt');
R_x_inv = inv(R_x);
W_opt = R_x_inv * vs / (vs' * R_x_inv * vs);
% 测试此时的方向图
sita = 90 * [-1:0.001:1];
% 得到不同角度的方向矢量
v = exp(-1i*2*pi*n* d*sind(sita)/lambda);
B = abs(W_opt' * v);
plot(sita,20*log10(B/max(B)),'k')
title('波束图')
xlabel('角度/degree')
ylabel('波束图/dB')
grid on
2.2 mvdr波束图
三、LCMV代码仿真
3.1 lcmv代码
clear;
close all;
clc;
warning off
%% 初始化
M = 10; %阵元数
fs = 5000; % 采样频率
f = 1000; % 信号频率
snap = 600; % 快拍数
T = 0.5; %采样时间
t = 1/fs:1/fs:T;
c = 340;
lamda = c/f; %波长
d = 0.5*lamda; %阵元间距
theta0 =-5; %期望信号角度
theta1 =-30; %干扰角度
theta2 = 30; %干扰角度
snr=10; %信噪比
inr1 =20; %干噪比
inr2 = 20; %干噪比
snr_noise = 0; %噪声功率1,为0dBW
%% 导向矢量
a0 = exp(-1j*2*pi*d*sind(theta0)*(0:M-1)'/lamda);
a1 = exp(-1j*2*pi*d*sind(theta1)*(0:M-1)'/lamda);
a2 = exp(-1j*2*pi*d*sind(theta2)*(0:M-1)'/lamda);
%% 信号、干扰和噪声
tar_sig = wgn(1,length(t), snr);
inf1 = wgn(1,length(t),inr1);
inf2 = wgn(1,length(t),inr2);
noise = wgn(M,length(t),snr_noise);
%% 阵列接收信号
rec_sig = a0*tar_sig + a1*inf1 + a2*inf2 + noise;
interference = a1*inf1 + a2*inf2;
sig = a0 * tar_sig;
%% 协方差矩阵
Rx = rec_sig(:,1:snap)*rec_sig(:,1:snap)'/snap;
Rs = sig(:,1:snap)*sig(:,1:snap)'/snap;
Ri = interference(:,1:snap)*interference(:,1:snap)'/snap;
Rn = noise(:,1:snap)*noise(:,1:snap)'/snap;
%% LCMV算法
a01 = exp(-1j*2*pi*d*sind(theta0 + 5)*(0:M-1)'/lamda);
a02 = exp(-1j*2*pi*d*sind(theta0 - 5)*(0:M-1)'/lamda);
C=[a0,a01,a02];
f=[1,1,1]';
w_lcmv =inv(Rx)*C*(inv(C'*inv(Rx)*C))*f; %权系数
theta = -90:0.1:90; % scan angle
p = exp(-1j*2*pi*d*(0:M-1)'*sind(theta)/lamda);
y = w_lcmv'*p;
yy = 20*log10(abs(y)/max(abs(y)));
%% 绘图
figure(1);
plot(theta,yy,'linewidth', 2);
xlabel('角度(\circ)');ylabel('归一化增益(dB)')
grid on;
xlim([-90 90])
3.2 lcmv波束图
四、LMS代码仿真
4.1 lms代码
clear;
clc;
M = 16;
thetas = [0 30 60];
lambda = 10;
d = lambda /2;
N = 1000;
n = 0:N-1;
f0 = 2000;
s = [1*sin(2*pi*f0 *n/(8*f0));...
2*sin(2*pi*2*f0 *n/(8*f0));...
3*sin(2*pi*3*f0 *n/(8*f0))
];
% 生成方向矢量
A = exp(-1i * 2 * pi * d * (0:M-1)' * sind(thetas) / lambda);
St = A*s + randn(M,N);
% LMS 算法 开始 进行自适应滤波
di = s(1,:); % 第一行为期望信号
u = 0.0001;
w = zeros(M,1); % 初始化权重向量
for k = 1:N
y(k) = w'*St(:,k);
e(k) = di(k) - y(k);
w = w + u * St(:,k) * conj(e(k));
end
scan_theta = [-89:90];
beam = zeros(1,length(scan_theta));
for i = 1 :length(scan_theta)
% 构造该方向的方向向量
v = exp(-1i * 2 * pi *d* (0:M-1)'.*sind(scan_theta(i))/lambda);
beam(i) = abs(w'*v);
end
figure;
plot(scan_theta,20*log10(beam/max(beam)))
title('方向图')
figure;
for k = 1:N
en(k) = (abs(e(k)))^2;
end
semilogy(en); hold on;
xlabel('迭代次数')
ylabel('MSE')
title('MSE')
4.2 lms波束图
五、总结
从结果上看,自适应滤波器效果要优于MVDR和LCMV算法,LCMV由于多了零点约束,比MVDR可控性更强。