run_lms_mvdr.m
上传用户:kendun0711
上传日期:2007-06-03
资源大小:32k
文件大小:1k
源码类别:

技术管理

开发平台:

Matlab

  1. function run_lms_mvdr(rp)
  2. % Computer Experiment
  3. % Section 9.8, Adaptive Filter Theory, 3rd edition
  4. % MVDR adaptive beamforming using the LMS algorithm
  5. Ninit   = rp.p;
  6. Ndata   = Ninit + rp.Nsnaps;
  7. seed    = 1;
  8. % A_i, phi_l are target signal amplitude/elec- angle
  9. % A_2, phi_2 are interference signal amplitude/elec- angle
  10. % s is steering vector along elec. angle of look direction of interest
  11. A_1 = sqrt(rp.var_v) * 10^(rp.TNRdB/20);
  12. phi_1 = pi * rp.sin_theta_1;
  13. A_2 = sqrt(rp.var_v) * 10^(rp.INRdB/20);
  14. phi_2 = pi * rp.sin_theta_2;
  15. s = exp(-j*[0:(rp.p-1)]'*phi_1);
  16. e = s(2:rp.p);
  17. % setup input/output sequences
  18. for i = 1:Ndata,
  19.    % setup random disturbances
  20.    randn('seed', i);
  21.    vr = sqrt(rp.var_v/2) * randn(1, rp.p) + rp.mean_v;
  22.    vi = sqrt(rp.var_v/2) * randn(1, rp.p) + rp.mean_v;
  23.    v  = vr + j*vi;
  24.    rand('seed', i);
  25.    Psi = 2*pi*rand(1);
  26.    Xi(i, :) = A_1*exp(j*[1:rp.p]*phi_1) + A_2*exp(j*[1:rp.p]*phi_2 + Psi) + v;
  27. end;
  28. % setup effective desired output and input vectors from
  29. % original data
  30. g = 1;
  31. d = g * Xi(:, 1);
  32. u = diag(Xi(:, 1)) * (ones(Ndata, 1) * e.') - Xi(:, 2:rp.p);
  33.    
  34. [W, xp] = lms(u, d, rp.mu, rp.decay, rp.verbose);
  35. Wo      = g - W * conj(e);
  36. W       = [Wo W];
  37. eval(['save ' rp.name])