最小方差无失真响应波束形成器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最小方差无失真响应波束形成器
题目:
考察LMS 算法应用于最小方差无失真响应(MVDR)波束形成器的器情况,它有5个完全一样的空间传感器的线性阵列组成。相对于阵列线的法线方向用弧度来度量,则目标信号与干扰信号入射角度可表示为 目标信号
1ta r ge t sin (0.2)φ-=- 干扰
1i nt sin (0)e r f φ-= 增益向量1g =
空间响应的定义为2
^
10
20log ()()H
w n s θ,
234()1,,,,T
j j j j s e e e e θθθθ
θ----⎡⎤=⎣⎦
当步长参数分别为891010,10,10u ---=,即INR=20,30,40Db 时波束形成器的权
向量()^
w n 利用LMS 进行计算。
1. 最小二乘自适应滤波器算法
function [W, e] = lms(u, d, mu, decay, verbose) % Input parameters:
% u : matrix of training/test points - each row is % considered a datum
% d : matrix of desired outputs - each row is % considered a datum
% mu : step size for update of weight vectors % decay : set to 1 for O(1/n) decay in m
% verbose : set to 1 for interactive processing
% length of maximum number of timesteps that can be predicted N = min(size(u, 1), size(d, 1)); Nin = size(u, 2); Nout = size(d, 2);
% initialize weight matrix and associated parameters for LMS predictor
w = zeros(Nout, Nin); W = [];
for n = 1:N, W = [W ; w];
% predict next sample and error
xp(n, :) = u(n, :) * w';
e(n, :) = d(n, :) - xp(n, :);
ne(n) = norm(e(n, :));
if (verbose ~= 0)
disp(['time step ', int2str(n), ': mag. pred. err. = ' , num2str(ne(n))]);
end;
% adapt weight matrix and step size
w = w + mu * e(n, :)' * u(n, :);
if (decay == 1)
mu = mu * n/(n+1); % use O(1/n) decay rate
end;
end % for n
2.基于LMS算法的MVDR自适应波束形成器
function run_lms_mvdr(rp)
Ninit = rp.p;
Ndata = Ninit + rp.Nsnaps;
seed = 1;
% A_i, phi_l are target signal amplitude/elec- angle
% A_2, phi_2 are interference signal amplitude/elec- angle
% s is steering vector along elec. angle of look direction of interest
A_1 = sqrt(rp.var_v) * 10^(rp.TNRdB/20);
phi_1 = pi * rp.sin_theta_1;
A_2 = sqrt(rp.var_v) * 10^(rp.INRdB/20);
phi_2 = pi * rp.sin_theta_2;
s = exp(-j*[0:(rp.p-1)]'*phi_1);
e = s(2:rp.p);
% setup input/output sequences
for i = 1:Ndata,
% setup random disturbances
randn('seed', i);
vr = sqrt(rp.var_v/2) * randn(1, rp.p) + rp.mean_v;
vi = sqrt(rp.var_v/2) * randn(1, rp.p) + rp.mean_v;
v = vr + j*vi;
rand('seed', i);
Psi = 2*pi*rand(1);
Xi(i, :) = A_1*exp(j*[1:rp.p]*phi_1) + A_2*exp(j*[1:rp.p]*phi_2 + Psi) + v;
end;
% setup effective desired output and input vectors from
% original data
g = 1;
d = g * Xi(:, 1);
u = diag(Xi(:, 1)) * (ones(Ndata, 1) * e.') - Xi(:, 2:rp.p);