波束形成(BF)从算法仿真到工程源码实现-第八节-波束图 ...

打印 上一主题 下一主题

主题 1796|帖子 1796|积分 5388

一、概述

        本节对MVDR、LCMV、LMS等算法的波束图进行仿真。
二、MVDR代码仿真

2.1 mvdr代码

  1. clc;
  2. clear;
  3. M = 18; % 天线数
  4. lambda = 10;
  5. d = lambda / 2;
  6. L = 100;  %快拍数
  7. thetas = [10];    % 期望信号入射角度
  8. thetai = [-30 30]; % 干扰入射角度
  9. n = [0:M-1]';
  10. vs = exp(-1j * 2 * pi * n * d * sind(thetas) / lambda); % 信号方向向量
  11. vn = exp(-1j * 2 * pi * n * d * sind(thetai) / lambda); % 干扰方向向量
  12. f = 1600; % 载波频率
  13. t = [0:L-1];
  14. di = sin(2*pi*f*t/(8*f));    % 期望信号
  15. vn1 = sin(2*pi*2 * f*t/(8*f));  % 干扰信号1
  16. vn2 = sin(2*pi*4 * f*t/(8*f));  % 干扰信号2
  17. A = [vs vn];
  18. St = [di;vn1;vn2];
  19. Xt = A*St + randn(M,L);   % 矩阵形式的公式
  20. R_x = 1/L * (Xt * Xt');
  21. R_x_inv = inv(R_x);
  22. W_opt = R_x_inv * vs / (vs' * R_x_inv * vs);
  23. % 测试此时的方向图
  24. sita = 90 * [-1:0.001:1];
  25. % 得到不同角度的方向矢量
  26. v = exp(-1i*2*pi*n* d*sind(sita)/lambda);
  27. B = abs(W_opt' * v);
  28. plot(sita,20*log10(B/max(B)),'k')
  29. title('波束图')
  30. xlabel('角度/degree')
  31. ylabel('波束图/dB')
  32. grid on
复制代码
2.2 mvdr波束图


三、LCMV代码仿真

3.1 lcmv代码

  1. clear;
  2. close all;
  3. clc;
  4. warning off
  5. %% 初始化
  6. M = 10;             %阵元数
  7. fs = 5000;          % 采样频率
  8. f = 1000;           % 信号频率
  9. snap = 600;         % 快拍数
  10. T = 0.5;           %采样时间
  11. t = 1/fs:1/fs:T;
  12. c = 340;
  13. lamda = c/f;              %波长
  14. d = 0.5*lamda;          %阵元间距
  15. theta0 =-5;                %期望信号角度
  16. theta1 =-30;                %干扰角度
  17. theta2 = 30;                %干扰角度
  18. snr=10;                     %信噪比
  19. inr1 =20;                   %干噪比
  20. inr2 = 20;                   %干噪比
  21. snr_noise = 0;              %噪声功率1,为0dBW
  22. %% 导向矢量
  23. a0 = exp(-1j*2*pi*d*sind(theta0)*(0:M-1)'/lamda);
  24. a1 = exp(-1j*2*pi*d*sind(theta1)*(0:M-1)'/lamda);
  25. a2 = exp(-1j*2*pi*d*sind(theta2)*(0:M-1)'/lamda);
  26. %% 信号、干扰和噪声
  27. tar_sig = wgn(1,length(t), snr);
  28. inf1 = wgn(1,length(t),inr1);
  29. inf2 = wgn(1,length(t),inr2);
  30. noise = wgn(M,length(t),snr_noise);
  31. %% 阵列接收信号
  32. rec_sig = a0*tar_sig + a1*inf1 + a2*inf2 + noise;
  33. interference = a1*inf1 + a2*inf2;
  34. sig = a0 * tar_sig;
  35. %% 协方差矩阵
  36. Rx = rec_sig(:,1:snap)*rec_sig(:,1:snap)'/snap;
  37. Rs = sig(:,1:snap)*sig(:,1:snap)'/snap;
  38. Ri = interference(:,1:snap)*interference(:,1:snap)'/snap;
  39. Rn = noise(:,1:snap)*noise(:,1:snap)'/snap;
  40. %% LCMV算法
  41. a01 = exp(-1j*2*pi*d*sind(theta0 + 5)*(0:M-1)'/lamda);
  42. a02 = exp(-1j*2*pi*d*sind(theta0 - 5)*(0:M-1)'/lamda);
  43. C=[a0,a01,a02];
  44. f=[1,1,1]';
  45. w_lcmv =inv(Rx)*C*(inv(C'*inv(Rx)*C))*f;        %权系数
  46. theta = -90:0.1:90; % scan angle
  47. p = exp(-1j*2*pi*d*(0:M-1)'*sind(theta)/lamda);
  48. y = w_lcmv'*p;
  49. yy = 20*log10(abs(y)/max(abs(y)));
  50. %% 绘图
  51. figure(1);
  52. plot(theta,yy,'linewidth', 2);
  53. xlabel('角度(\circ)');ylabel('归一化增益(dB)')
  54. grid on;
  55. xlim([-90 90])
复制代码
3.2 lcmv波束图


四、LMS代码仿真

4.1 lms代码

  1. clear;
  2. clc;
  3. M = 16;
  4. thetas = [0 30 60];
  5. lambda = 10;
  6. d = lambda /2;
  7. N = 1000;
  8. n = 0:N-1;
  9. f0 = 2000;
  10. s = [1*sin(2*pi*f0 *n/(8*f0));...
  11.     2*sin(2*pi*2*f0 *n/(8*f0));...
  12.     3*sin(2*pi*3*f0 *n/(8*f0))
  13.     ];
  14. % 生成方向矢量
  15. A = exp(-1i * 2 * pi * d * (0:M-1)' * sind(thetas) / lambda);
  16. St = A*s + randn(M,N);
  17. % LMS 算法 开始 进行自适应滤波
  18. di = s(1,:);  % 第一行为期望信号
  19. u = 0.0001;
  20. w = zeros(M,1);  % 初始化权重向量
  21. for k = 1:N
  22.     y(k) = w'*St(:,k);
  23.     e(k) = di(k) - y(k);
  24.     w = w + u * St(:,k) * conj(e(k));
  25. end
  26. scan_theta = [-89:90];
  27. beam = zeros(1,length(scan_theta));
  28. for i = 1 :length(scan_theta)
  29.     % 构造该方向的方向向量
  30.     v = exp(-1i * 2 * pi *d* (0:M-1)'.*sind(scan_theta(i))/lambda);
  31.     beam(i) = abs(w'*v);
  32. end
  33. figure;
  34. plot(scan_theta,20*log10(beam/max(beam)))
  35. title('方向图')
  36. figure;
  37. for k = 1:N
  38.     en(k) = (abs(e(k)))^2;
  39. end
  40. semilogy(en); hold on;
  41. xlabel('迭代次数')
  42. ylabel('MSE')
  43. title('MSE')
复制代码
4.2 lms波束图


五、总结

        从结果上看,自适应滤波器结果要优于MVDR和LCMV算法,LCMV由于多了零点约束,比MVDR可控性更强。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表