0
点赞
收藏
分享

微信扫一扫

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】


一、获取代码方式

获取代码方式1:

完整代码已上传我的资源:​​【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】​​

获取代码方式2:

通过订阅紫极神光博客​付费专栏​,凭支付凭证,​私信博主​,可获得此代码。

备注:

订阅紫极神光博客​付费专栏​,可免费获得​1​份代码(​有效期​为订阅日起,三天内有效);

二、简介

最小均方(LMS, Least Mean Squares)是最基本的自适应滤波算法。

LMS算法是自适应滤波器中常用的一种算法与维纳算法不同的是其系统的系数随输入序列而改变。维纳算法中截取输入序列自相关函数的一段构造系统的最佳系数。而LMS算法则是对初始化的滤波器系数依据最小均方误差准则进行不断修正来实现的。因此理论上讲LMS算法的性能在同等条件下要优于维纳。但是LMS是在初始值下逐步调整的,因此在系统稳定前,会有一段调整时间,调整时间受步长因子的控制,一定范围内,步长因子越大,调整时间越小,步长因子的最大取值为R的迹。LMS采用平方误差最小的原则代替均方误差最小的原则,信号基本关系如下:

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】_算法

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】_迭代_02

三、部分源代码

%%------------------- 定义变量:----------------------%%
% N - # of elements in array %
% d - 阵元间距 %
% ang - theta in deg %
% thetaS - 期望用户波达角 %
% thetaI - 干扰波达角 %
% T - 期望信号的周期 %
% t - 期望信号的时间轴 %
% S - 期望信号 %
% I - 干扰信号 %
% vS,vI - 期望用户和干扰用户的转移矢量 %
% X - 总阵列因子 %
% Rxx - 总接收信号相关矩阵 %
% mu - 收敛参数 %
% w - 用LMS算法确定的均匀线阵权值 %
% x - 总接收信号 %
% y - 阵列输出 %
% e - 阵列输出和期望信号的误差 %
% theta - range of AOA's (rad) %
% AF - 加权阵列输出 %
%%-----------------------------------------------------------%%

%%----- 赋值-----%%

N = 8; d =0.5;

thetaS = 30*pi/180; thetaI = -60*pi/180;%期望信号方向30. 干扰-60.%

%%----- 期望和干扰信号-----%%

T = 1E-3; t = (1:100)*T/100; it = 1:100;%1E-3表示1ms%

S = cos(2*pi*t/T); %,此时,S已经是一个矩阵!1行100列


I = randn(1,100);%生成1行100列的正态分布随机矩阵%

%%----- 为每个用户的线性阵列信号创建的阵列因子 -----%%

vS = []; vI = [];
i = 1:N;
vS = exp(1j*(i-1)*2*pi*d*sin(thetaS)).';%’表示厄米特转置,产生N行1列的阵列向量,然后后面在此基础上乘以信号就得到天线每个阵元接收到的信号
vI = exp(1j*(i-1)*2*pi*d*sin(thetaI)).';

%%----- 用LMS解决权值 -----%%

w = zeros(N,1);%初始天线阵权值全为0%
X = vS + vI;
Rxx = X*X';%X'为X的厄米特转置%
mu = 1/(4*abs(trace(Rxx)));%trace,迹%

wi = zeros(N,max(it));%初始权值都为0%
for n = 1:length(S)%n是迭代次数?%
x = S(n)*vS + I(n)*vI;
y(n) = w'*x;
e = conj(S(n)) - y(n); esave(n) = abs(e)^2;%conj,求复数的共轭%
nu=mu*(1-exp(-(abs(e))^2));
w = w + nu*conj(e)*x;
wi(:,n) = w;
end %没有判断收敛,要判断是从误差收敛曲线来看
w = w/w(1); % 第一权值的规范解%

%%----- 显示权值 -----%%

disp(' ')
disp('%------------------------------------------------------------------------%')
disp(' ')
disp([' N = ',num2str(N),' 的权值是:'])
disp(' ')
for m = 1:length(w)
disp([' w',num2str(m),' = ',num2str(w(m),3)])
end
disp(' ')

%%----- 输出结果 -----%%

% 1.) Plot 权重与迭代次数

wi = wi.';
figure(1), plot(it,abs(wi(:,1)),'kx',it,abs(wi(:,2))...
,'ko',it,abs(wi(:,3)),'ks',it,abs(wi(:,4)),'k+',...
it,abs(wi(:,5)),'kd','markersize',2)
xlabel('Iteration no.'), ylabel('|weights|')
title('\bf 阵列权值')

% 2.) Plot 信号采集和跟踪

figure(2)
plot(it,S,'k',it,real(y),'k--')
xlabel('迭代次数'), ylabel('Signals')
title('\bf 期望信号采集与跟踪')
legend('期望信号','阵列输出')

% 3.) Plot 最小均方误差

figure(3), plot(it,esave,'k')
xlabel('Iteration no.'), ylabel('|e|^2')
title('\bf 均方误差与迭代次数.')

% 4.) Plot 阵列因子

theta = -pi/2:.01:pi/2;
AF = 0;
for i = 1:N
AF = AF + w(i)'.*exp(j*(i-1)*2*pi*d*sin(theta));
end

四、运行结果

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】_权值_03

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】_算法_04

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】_算法_05

【优化算法】改进型的LMS算法-SVSLMS算法【含Matlab源码 632期】_matlab_06

四、matlab版本及参考文献

1 matlab版本

2014a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.



举报

相关推荐

0 条评论