在自适应天线课上刚刚学了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