在自适应天线课上刚刚学了LMS自适应阵,先出一个抢先版贴一下结果,抢先某个小朋友一步。
关于LMS的具体介绍,直接看wiki里的吧,解释的比书上简明:传送门:https://en.wikipedia.org/wiki/Least_mean_squares_filter
话不多说,先贴代码:
1 % 2 % Multi-Elements Adaptive Antennas Array Based on LMS Algotism 3 % 4 % first draft: 2019/11/27 16:45 5 % latest update: 2019/11/27 19:40 6 % 7 %---------------------------------------------------------------------- 8 close all 9 clear 10 tic 11 % ------------------------ 参数设置 ------------------------- 12 N = 18; % 阵元数 13 wd = 2 * pi * 500 * 10^6; % 工作角频率 14 theta = 0 : 0.01 : 2 * pi; % 方向角(360度) 15 theta_d = (30 / 180) * pi; % 信号来向 16 theta_i = (60 / 180) * pi; % 干扰来向 17 Ad = 1; % 信号幅度 18 Ai = 0.8; % 干扰幅度 19 R = 1; % 参考信号幅度 20 upsilon = 0; % 热噪声均值 21 sigma = 0.9; % 热噪声标准差 22 t = 6; % 时间(s) 23 24 phi_d = pi * sin(theta_d); % 25 phi_i = pi * sin(theta_i); % 26 % ------------------------ 矩阵求解 ------------------------- 27 28 Ud = zeros(N,1); % 信号导向矢量 29 Ui = zeros(N,1); % 干扰导向矢量 30 31 for i = 1 : N 32 Ud(i) = exp(-1j * i * phi_d); 33 Ui(i) = exp(-1j * i * phi_i); 34 end 35 36 PHI = Ad^2 * conj(Ud)*Ud' + Ai^2 * conj(Ui)*Ui' + sigma^2* eye(N); 37 D = abs( det(PHI) ) ; 38 S = Ad * R * conj(Ud); 39 40 W = PHI \ S; % Wopt = Φ-1*S 41 42 % ------------------------ 信噪比计算 ------------------------ 43 44 ed = Ad^2 / sigma^2; % 输入信噪比 45 ei = Ai^2 / sigma^2; % 输入干噪比 46 47 % 输出信号功率 48 Pd = 2 * ed^2 * R^2 * (1 + 2 * ei * sin((phi_d - phi_i)/2)^2) / (D / sigma^4)^2; 49 % 输出干扰功率 50 Pi = 2 * ei * ed * R^2 * cos((phi_d - phi_i)/2)^2 / (D / sigma^4)^2; 51 % 输出噪声功率 52 Pn = ed * R^2 * (2 * ei * (ei + 1) * (1- cos(phi_d - phi_i))+1) / (D / sigma^4)^2; 53 % 输出信噪比 54 SINR = Pd / (Pi + Pn); 55 56 57 58 % ---------------------- 电压方向图计算 --------------------- 59 60 X = cell(length(theta), 1); 61 SS = zeros(length(theta), 1); 62 for i = 1 : length(theta) 63 X{i, 1} = zeros(N, 1); 64 for j = 1 : N 65 X{i, 1}(j) = exp(1j * (j-1) * pi * sin(theta(i))); 66 end 67 SS(i) = W' * X{i, 1} * exp(1j * t * wd); 68 end 69 70 SS = abs(SS); SS = SS / max(SS); 71 72 % ------------------------ 结果表示 -------------------------- 73 74 figure('NumberTitle', 'off', 'Name', '电压方向图'); 75 polarplot(theta, SS, 'k','LineWidth',1.5); 76 77 78 SINR 79 80 81 disp([' 运行时间: ',num2str(toc)]);
先来看一下书上的例题,对于一个二元的LMS阵,在不考虑干扰信号的情况下即(Ai=0)时,绘出其电压方向图:
1⃣️当来波方向为 theta_d= 50 度时,其结果为:
当来波方向为 theta_d=-10 度时,其结果为:
和书上P18页的结果图比较,目前是正确的;
2⃣️对于包含干扰信号时,即Ai不为0时,也来检验一波:统一来波方向为 theta_d=50度,干扰方向为 theta_i=90度。输入信噪比为1,即 Ad = sigma;
当输入干噪比为0时 ,此时 Ai = 0,结果和情况1中第一幅图相同,这里就不再赘述;
当输入干噪比为1时 ,此时 Ai = sigma = Ad,此时结果为:
当输入干噪比为2时,即 Ai = 1.414 sigma = 1.414 Ad,结果为:
当输入干噪比为10时,即 Ai = 3.16 sigma = 3.16 Ad时,结果为:
当输入干噪比为100时,即 Ai = 10 sigma = 10 Ad 时,结果为:
和书上P25页结果对比也很正常。(写出页码就是给某个臭弟弟看的)
在阵元数量较少时,由于自由度较少,因此效果不佳。增加阵元数量N,当N为8时,设置 来波方向 theta_d = 90度,干扰方向 theta_i = 30度,信噪比为1,干噪比为100,结果如下:
但是当阵元数量变为10时,效果反而很诡异,干扰方向变成了最大值,很奇怪:
希望有大神解惑,我也自己想想,想清楚了再来更新~
谢谢大家😄~~~~ :P