LMS自适应天线阵列设计 MATLAB

旧城冷巷雨未停 提交于 2019-12-05 20:34:48

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

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!