m基于自适应门限软切换的3G和Wifi垂直切换算法的matlab仿真

1.算法概述

这里还是考虑位置信息和强度联合切换判决的方法,如果你的设备没法提供具体的位置信息的话,那么就把位置信息的权值设置为0。强度判决的权值设置为1即可。


需要传输的数据格式如下:





一个字节为8个bit,


因此,一个传输帧,基本格式为:


S   |  16bit长度的节点需要   |  8bit长度的数据类型   |  64bit长度的数据内容   |  #


其中“S”对应的ASCII码为01010011


“#”对应的ASCII码为0010 0011


这里,我们将数据帧结构的产生做如下的设置,


即每次发送一帧数据,然后每过N帧,发送一帧带有位置信号作为数据的帧数据。


目前的算法流程如下:


第1,预先设置切换处理延迟时间t和能量强度门限值T;


第2,分别对3G网络和WIFI网络的信号能量进行计算;


第3,根据传输得到的数据帧中提取对应的位置信号;


第4,判决:


如果计算能量均小于T,那么不进行切换,保持原来的状态;


如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;


如果两个能量值均大于门限值,那么再做如下的判决:


------------------------------------------------------------------------------------------------


如果3G网络的信号强度大于WIFI网络的信号强度,系统首先接入到3G网络,然后在时间t之后,即完成3G的连接之后,断开与WIFI的连接,完成从WIFI到3G网络的切换。


同样道理,如果WIFI网络的信号强度大于3G网络的信号强度,系统首先接入到WIFI网络,然后在时间t之后,即完成WIFI的连接之后,断开与3G的连接,完成从3G到WIFI网络的切换。当3G网络和WIFI信号强度接近的时候,则维持在原先的网络进行数据的传输,并进行切换处理。由于信号能量强度会出现各种变化的情况,比如当3G信号强度突然大于WIFI的信号强度(假设网络的信号强度是不变,而外部的干扰发生突然改变),并持续一段时间,然后此时,设置距离3G网络更近些,因此当出现这种情况的时候,设备不应该发生突然的切换。


根据这个问题,本算法加入了位置信号的判决:








2.仿真效果预览

MATLAB2022A仿真结果:



3.核心MATLAB预览

...................................................


%产生信号

%S   |  16bit长度的节点需要   |  8bit长度的数据类型   |  64bit长度的数据内容   |  #

%其中“S”对应的ASCII码为: 01010011

%“#”对应的ASCII码为    : 0010 0011

X     = 0;

Y     = 0;

FRAME = [];

%切换处理延迟时间t

t     = 20;

%能量强度门限值T

T     = 8;

PER   = 10;%每10帧加入I个位置信息



for i = 1:N

figure(1);

plot(X3g,Y3g,'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','r','MarkerSize',10);

text(X3g+2,Y3g+2,'3G Device');

hold on

plot(Xwf,Ywf,'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',10);

text(Xwf+2,Ywf+2,'WIFI Device');

%S | 16bit长度的节点需要 | 8bit长度的数据类型 | 64bit长度的数据内容 | #

%S

S     = [0,1,0,1,0,0,1,1];

%16bit长度的节点需要

Index = func_dec2bin(i,16);

%8bit长度的数据类型

Type  = [0,0,1,1,0,0,1,1];

%字节数

Nums  = [0,0,0,0,1,1,1,1];


%64bit长度的数据内容

if mod(i,10) == 2

i

%模拟简单的运动

X    = X + (7 +   rand(1,1))/10;

Y    = Y + (4 + 6*rand(1,1))/10;

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,120,0,120]);

drawnow;

hold off

end


X0 =[];

Y0 =[];

X  =[];

Y  =[];

%%

%开始切换算法

f1       = zeros(1,N);

f2       = zeros(1,N);

f        = zeros(1,N);

f0       = zeros(1,N);

CUT      = zeros(1,N);

lemda1   = 0.6;

lemda2   = 1 - lemda1;

%初始状态假设为3G网络

STATE    = zeros(1,N);%1:3G;2:WIFI

STATE(1) = 2;  

count    = 0;

for i = 1:N

i

%模拟环境影响损耗,用随机的方式产生

EnvLoss3g = 15 + randn;

EnvLosswf = 12 + 4*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 & STATE(i-1) == 1

f2(i) = 0;%3G -> WIFI

end

if Lwf >= L3g & STATE(i-1) == 2

f2(i) = 1;%WIFI -> WIFI

end       

if Lwf < L3g  & STATE(i-1) == 1

f2(i) = 1;%3G -> 3G

end

if Lwf < L3g  & STATE(i-1) == 2

f2(i) = 0;%WIFI -> 3G

end      

%计算3G能量

%计算当前位置3G信号能量的衰减,慢衰减

%快衰减,这里暂时不考虑快衰减

Loss3g = func_Power_Attenuation_3G(Fre_wf,Lwf,EnvLoss3g);

%计算信号能量

POWER_3G = Power_3g - Loss3g;


%计算WIFI能量

%计算当前位置WIFI信号能量的衰减,慢衰减

%快衰减,这里暂时不考虑快衰减

Losswf = func_Power_Attenuation_WIFI(Fre_3g,L3g,EnvLosswf);

%计算信号能量

POWER_WIFI = Power_wf - Losswf;


%*****************************************************************************

%切换判决

%如果计算能量均小于T,那么不进行切换,保持原来的状态;

if (POWER_3G < T & POWER_WIFI < T)

f1(i) = 1;%3G->WIFI

end   

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G < T & POWER_WIFI >= T) & STATE(i-1) == 2

f1(i) = 0;%WIFI->WIFI

end

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G < T & POWER_WIFI >= T) & STATE(i-1) == 1

f1(i) = 1;%3G->WIFI

end                 

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G >= T & POWER_WIFI < T) & STATE(i-1) == 2

f1(i) = 1;%WIFI->3G

end

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G >= T & POWER_WIFI < T) & STATE(i-1) == 1

f1(i) = 0;%3G->3G

end            

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G >= T & POWER_WIFI >= T) & (POWER_3G > POWER_WIFI) & STATE(i-1) == 1

f1(i) = 0;%3G->3G

end                 

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G >= T & POWER_WIFI >= T) & (POWER_3G > POWER_WIFI) & STATE(i-1) == 2

f1(i) = 1;%WIFI->3G

end               

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G >= T & POWER_WIFI >= T) & (POWER_3G <= POWER_WIFI) & STATE(i-1) == 1

f1(i) = 1;%3G->WIFI

end                 

%如果其中一个超过门限值,一个没有超过没限制,那么切换到对应能量大的网络上;    

if (POWER_3G >= T & POWER_WIFI >= T) & (POWER_3G <= POWER_WIFI) & STATE(i-1) == 2

f1(i) = 0;%WIFI->WIFI

end              

%计算最后的切换值

f(i) = lemda1*f1(i) + lemda2*f2(i);

%引入软切换判决

if i > t

Check(i) = mean(f(i-t+1:i));

Check2   = mean(Check(i-t+1:i));

f0(i)    =(sign(Check2-0.3)+1)/2;

else

Check(i) = mean(f(1:i));  

Check2   = mean(Check(1:i));

f0(i)    =(sign(Check2-0.3)+1)/2;

end

else

%如果没有检测当前的帧头信息,则保持原切换状态

f(i)  = f(i-1);  

f0(i) = f(i);  

end

%计算累计切换次数

if f0(i) ~= f0(i-1)

count = count + 1;

end

Ttmps(i) = 0.5*max(POWER_3G,POWER_WIFI);

if i > t

T = mean(Ttmps(i-t+1:i));

else

T = mean(Ttmps(1:i));  

end

end

%统计累积切换次数

CUT(i) = count;

end

01_087_m

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容