基于模糊神经网络的异构网络环境下垂直切换算法的matlab仿真与分析
目录
一、理论基础
切换是移动通信系统必备的关键功能之一。移动通信网络中发生在同构网络不同 基站间的水平切换主要是为了保证用户移动时的会话连续性。水平切换仅将接收信号 强度作为判决参数,依据接收信号强度判断是否发生切换。而发生在不同无线接入 网络之间的垂直切换是为了使用户能够享有透明的、无缝的异构网络间漫游。不 同的接入技术具有不同的特性,如时延、带宽、频率及覆盖。例如,通用移动通信系 统(Universal Mobile Telecommunications System,UMTS)能够提供低带宽和广覆盖。 相反的,WLAN中的IEEE 802.11和欧洲高性能无线局域网(High Performance Radio Local Area Networks,Hiper LAN)能够提供高带宽和小覆盖。因此,需要合理的融合 不同接入技术间的特性差异,综合考虑各种判决因素实现有效地垂直切换。
这种多无线接入技术并存的局面为垂直切换算法的设计带来了新的难题。由于异 构网络间存在很大的特性差异,垂直切换需要综合考虑多种因素,相比传统的水平切 换,垂直切换算法将更为复杂,因此,传统的水平切换算法不适用于垂直切换过程。在很多情况下,一个不合理的垂直切换的发生将导致网络性能的退化。作为下 一代异构无线网络的一个重要议题,针对能够兼顾网络特性差异的智能垂直切换算法 还需进一步深入研究。
第一步:得到两套单独的算法程序,并给出两个算法的对比,这个可以用之前在变速环境下的仿真作为两个算法的对比效果。
第二步:我的最优驻留时间的FNN自适应更新,应用到他的驻留时间上。
第三步:我的门限更新,用到他的门限更新里面。
第四步:最后获得一种基于改进遗传算法进行多属性权值更新,VSLMS判决门限更新以及FNN驻留时间更新的垂直切换算法。
第五步:重新设置一个新的更复杂的移动场景,并考虑快慢衰落等实际衰落情况,对比三种算法,从而得到最后更新算法的最优性能。
二、核心程序
.....................................................................
if i == 1
V = V0;
else
V = V + a;
end
%X和Y两个方向的速度
Vx = V*cos(theta);
Vy = V*sin(theta);
%64bit长度的数据内容
%得到坐标值
if i == 1
PX(i) = 0;
PY(i) = 30;
PV(i) = V;
else
PX(i) = PX(i-1) + Vx;
PY(i) = PY(i-1) + Vy;
PV(i) = V;
end
%模拟简单的运动
X = PX(i);
Y = PY(i);
if mod(i,10) == 2
Xbin = func_dec2bin(X,32);
Ybin = func_dec2bin(Y,32);
Data = [Xbin,Ybin];
else
Data = (rand(1,64)>=0.5);
end
%#
J = [0,0,1,0,0,0,1,1];
%产生最后发送的帧格式数据
tmps = [S,Index,Type,Nums,Data,J];
FRAME= [FRAME,tmps];
plot(X,Y,'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','y','MarkerSize',10);
text(X+2,Y+2,'User Device');
axis([0,160,0,160]);
drawnow;
hold off
As(i) = a;
Vs(i) = V;
Fs(i) = theta;
end
figure;
subplot(311);
plot(Vs,'b','Linewidth',2);
xlabel('Times');
ylabel('速度');
subplot(312);
plot(As,'b','Linewidth',2);
xlabel('Times');
ylabel('加速度');
subplot(313);
plot(Fs,'b','Linewidth',2);
xlabel('Times');
ylabel('方向');
X0 =[];
Y0 =[];
X =[];
Y =[];
%%
%开始切换算法
f1 = ones(1,N);
f2 = ones(1,N);
f = ones(1,N);
f0 = ones(1,N);
CUT = zeros(1,N);
lemda1 = 0.6;
lemda2 = 1 - lemda1;
count = 0;
for i = 1:N
i
%模拟环境影响损耗,用随机的方式产生
EnvLoss3g = 10 + 0.3*randn;
EnvLosswf = 10 + 0.3*randn;
%将接收到的数据保存到寄存器中
Reg = FRAME(length(tmps)*(i-1)+1:length(tmps)*i);
%检测S,来识别是否是帧的起始位
for j = 1:length(Reg)
if Reg(1) == S(1) && Reg(2) == S(2) && Reg(3) == S(3) && Reg(4) == S(4) &&...
Reg(5) == S(5) && Reg(6) == S(6) && Reg(7) == S(7) && Reg(8) == S(8)
flag = 1;%说明检测到帧了
else
flag = 0;%说明没有检测到帧
end
end
%如果检测帧头了,则开始位置信息的计算
if i > 1
if flag == 1
%获得序列序号
INDEXbin = Reg(9:9+15);
INDEXdec = func_bin2dec2(INDEXbin);
if mod(INDEXdec,10) == 2
%转换为十进制
X0 = Reg(33+8:33+31+8);
Y0 = Reg(65+8:65+31+8);
X = func_bin2dec(X0);
Y = func_bin2dec(Y0);
else
%转换为十进制
X0 = X0;
Y0 = Y0;
X = func_bin2dec(X0);
Y = func_bin2dec(Y0);
end
%*****************************************************************************
%计算3G距离
L3g= sqrt((X - X3g)^2 + (Y - Y3g)^2);
%计算WIFI距离
Lwf= sqrt((X - Xwf)^2 + (Y - Ywf)^2);
%距离切换
if Lwf >= L3g
f2(i) = 1;%3G
end
if Lwf < L3g
f2(i) = 0;%WIFI
end
%计算3G能量
%计算当前位置3G信号能量的衰减,慢衰减
%快衰减,这里暂时不考虑快衰减
Loss3g = func_Power_Attenuation_3G(Fre_3g,L3g,EnvLoss3g);
%计算信号能量
POWER_3G = Power_3g - Loss3g;
%计算WIFI能量
%计算当前位置WIFI信号能量的衰减,慢衰减
%快衰减,这里暂时不考虑快衰减
Losswf = func_Power_Attenuation_WIFI(Fre_wf,Lwf,EnvLosswf);
%计算信号能量
POWER_WIFI = Power_wf - Losswf;
%*****************************************************************************
%切换判决
.........................................................................
%计算累计切换次数
if abs(f0(i)-f0(i-1))>0.1
count = count + 1;
end
Ttmps(i) = 0.5*max(POWER_3G,POWER_WIFI);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Len = 32;
if i <= Len
T = mean(Ttmps(1:i));
%权值的初始定义
for jj = 1:Len
Ws(jj) = 1/Len;
end
else
for jj = 1:Len
T_ser(jj) = Ttmps(i-Len+jj);
%定义误差
if jj == 1
err(jj) = 0;
else
err(jj) = T_ser(jj)-T_ser(jj-1);
end
end
err = err/100;
T = sum(Ws.*T_ser);
%计算步进
a = 0.5;
b = 1;
u = a*(log(2) - log(1+exp(-b*err.*err)));
%权值跟新
for jj = 1:Len
Ws(jj) = Ws(jj) + 2*u(jj)*err(jj);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%统计累积切换次数
CUT(i) = count;
end
%%
%产生切换结果仿真图
figure;
plot(f0,'b','Linewidth',2);
hold on;
plot(1:N,0.5*ones(1,N),'r','Linewidth',2);
grid on;
xlabel('Times');
ylabel('判决门限');
axis([0,N,-0.2,1.2]);
text(N/4,1.1,'接入3G')
text(3*N/4,0.1,'接入WIFI')
title('本课题算法(加软切换)');
figure;
plot(1:N,CUT,'r','Linewidth',2);
grid on;
xlabel('Times');
ylabel('切换次数');
title('本课题算法(加软切换)');
save Result1.mat f0 N CUT
A01-89
三、测试结果
在matlab2021a中仿真得到如下的效果: