【MORE协议】基于MORE的改进协议设计的MATLAB仿真
0.完整源碼獲得方式
方式1:微信或者QQ聯(lián)系博主
方式2:訂閱MATLAB/FPGA教程,免費(fèi)獲得教程案例以及任意2份完整源碼
1.軟件版本
MATLAB2021a
2.本算法理論知識(shí)
? ? ? ?隨著無線通信和移動(dòng)計(jì)算技術(shù)的飛速發(fā)展,人們對(duì)無線寬帶接入提出了更高的要求。作為一種可以解決“最后一公里”瓶頸問題的新型網(wǎng)絡(luò)結(jié)構(gòu),無線網(wǎng)狀網(wǎng)(wireless mesh network, WMN)正受到普遍的關(guān)注。無線網(wǎng)狀網(wǎng)絡(luò)也稱為“多跳(multi-hop)”網(wǎng)絡(luò),它是一種與傳統(tǒng)無線網(wǎng)絡(luò)完全不同的新型無線網(wǎng)絡(luò)技術(shù)。在傳統(tǒng)的無線局域網(wǎng)(WLAN)中,每個(gè)客戶端均通過一條與固定接入點(diǎn)(access point, AP)相連的無線鏈路來訪問網(wǎng)絡(luò),用戶之間如果要進(jìn)行相互通信,必須首先訪問一個(gè)AP,這種網(wǎng)絡(luò)結(jié)構(gòu)被稱為單跳網(wǎng)絡(luò)。而在無線網(wǎng)狀網(wǎng)絡(luò)中,任何無線設(shè)備節(jié)點(diǎn)都可以同時(shí)作為AP和路由器,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都可以發(fā)送和接受信號(hào),每個(gè)節(jié)點(diǎn)都可以與一個(gè)或者多個(gè)對(duì)等節(jié)點(diǎn)進(jìn)行直接通信。這種結(jié)構(gòu)的最大好處在于如果最近的AP由于流量過大而導(dǎo)致?lián)砣脑?#xff0c;那么數(shù)據(jù)可以自動(dòng)重新路由到一個(gè)通信流量較小的鄰近節(jié)點(diǎn)進(jìn)行傳輸。依此類推,數(shù)據(jù)包還可以根據(jù)網(wǎng)絡(luò)的情況,繼續(xù)路由到與之最近的下一個(gè)節(jié)點(diǎn)進(jìn)行傳輸,直到到達(dá)最終目的地為止。這樣的訪問方式就是多跳訪問。
? ? ? ?但是這種通過路由策略來解決擁塞,并不能真正有效的提高整個(gè)網(wǎng)絡(luò)的吞吐量。因?yàn)樵趥鹘y(tǒng)的網(wǎng)絡(luò)中,端到端信息采用存儲(chǔ)轉(zhuǎn)發(fā)機(jī)制來傳送數(shù)據(jù)。當(dāng)若干個(gè)獨(dú)立的數(shù)據(jù)包同時(shí)到達(dá)某個(gè)中轉(zhuǎn)節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)在一個(gè)時(shí)間單元內(nèi)僅能轉(zhuǎn)發(fā)其中一個(gè)數(shù)據(jù)包,而其余的數(shù)據(jù)包將被送至節(jié)點(diǎn)的輸出隊(duì)列中。當(dāng)網(wǎng)絡(luò)負(fù)載增大時(shí),由于輸出隊(duì)列長(zhǎng)度的限制會(huì)出現(xiàn)節(jié)點(diǎn)轉(zhuǎn)發(fā)的數(shù)據(jù)丟失和重傳的情況。這種現(xiàn)象會(huì)造成網(wǎng)絡(luò)擁塞,降低網(wǎng)絡(luò)的吞吐量。可見,通過路由策略只能緩解網(wǎng)絡(luò)擁塞對(duì)端到端通信的影響,但是無助于提高整個(gè)網(wǎng)絡(luò)的吞吐量。如何提高整個(gè)網(wǎng)絡(luò)的吞吐量以及有效解決網(wǎng)絡(luò)擁塞問題,已成為無線網(wǎng)狀網(wǎng)絡(luò)的研究熱點(diǎn)。隨著網(wǎng)絡(luò)信息論的引入,機(jī)會(huì)路由和網(wǎng)絡(luò)編碼技術(shù)受到越來越多的關(guān)注。因此,本文將基于網(wǎng)絡(luò)編碼的機(jī)會(huì)路由協(xié)議作為研究?jī)?nèi)容進(jìn)行研究。
3.核心代碼
clc; clear; close all; warning off;%% %模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境 %模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境 %模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境%模擬產(chǎn)生網(wǎng)絡(luò)環(huán)境 %每次產(chǎn)生的隨機(jī)數(shù)固定 s = RandStream.create('mt19937ar','seed',1); RandStream.setDefaultStream(s); %首先頂一個(gè)無線傳感器網(wǎng)絡(luò)環(huán)境 noOfNodes = 30;%網(wǎng)絡(luò)節(jié)點(diǎn)個(gè)數(shù),仿真的時(shí)候,網(wǎng)絡(luò)節(jié)點(diǎn)不易過多,會(huì)out of memory L = 50; R = 20; %相鄰規(guī)則,小于R,表示相鄰 MAX_INTER = 50;%最大迭代次數(shù) rand('state', 3); %節(jié)點(diǎn)狀態(tài)初始化figure; clf;grid on; hold on; netXloc = rand(1,noOfNodes)*L; netYloc = rand(1,noOfNodes)*L; for i = 1:noOfNodesplot(netXloc(i), netYloc(i), 'r.');text(netXloc(i)+3, netYloc(i)+3, num2str(i));for j = 1:noOfNodesdistance = sqrt((netXloc(i) - netXloc(j))^2 + (netYloc(i) - netYloc(j))^2);%標(biāo)志相鄰節(jié)點(diǎn),使用1表示if distance <= Rmatrix(i, j) = 1; % there is a link;line([netXloc(i) netXloc(j)], [netYloc(i) netYloc(j)], 'LineStyle', ':');elsematrix(i, j) = 0;endend end %matrix為節(jié)點(diǎn)連接圖,如果matrix(i,j)=1,說明節(jié)點(diǎn)i和節(jié)點(diǎn)j相鄰,否則不相鄰%% %基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸 %基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸 %基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸%基于傳統(tǒng)MORE協(xié)議進(jìn)行傳輸 %每包大小 dd = 0;for K = 80:5:160;%每個(gè)組的數(shù)據(jù)段的比特?cái)?shù) N_byte = floor(5000/K);%定義編碼矩陣 % c = [1 1 1 1; % 1 2 3 4; % 1 0 0 0; % 0 1 0 0]; c = round(10*rand(K,K)); c(1+K/2:K,:) = 0; c(1+K/2:K,1:K/2) = eye(K/2); %成功發(fā)送概率 df = 0.95; %成功到達(dá)概率 dr = 0.95; %定義一個(gè)計(jì)數(shù)器,統(tǒng)計(jì)接收包計(jì)數(shù)器 Count = 0; %定義應(yīng)答信號(hào) ACK = 0; %設(shè)置固定的探測(cè)包大小S S = 32;%設(shè)置探測(cè)包的大小為32 %定時(shí)間隔 T = 0.15; T_sub = 10/512;%定義每次傳輸時(shí)延 NN = 0; alpha = 0.5;%本算法是基于固定報(bào)文長(zhǎng)度的探測(cè)方法的原MORE協(xié)議設(shè)計(jì) %下面利用MORE協(xié)議進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的傳輸 for i = 1:noOfNodesfor j = 1:noOfNodesNN = NN + 1;NNwaitbar(NN/(noOfNodes*noOfNodes));%******************************************************************if matrix(i, j) == 1%進(jìn)行傳輸 %隨機(jī)產(chǎn)生二進(jìn)制比特率數(shù)據(jù)作為發(fā)送的數(shù)據(jù)%對(duì)多次結(jié)果求平均for mm = 1:1s = RandStream.create('mt19937ar','seed',mm);Data_source = double(rand(1,K*N_byte)>=0.5); %分批次發(fā)送n1 = 0;ACK = 1;times = 0;PS = 0;Num = 0;Count = 0;tmp = T/T_sub;throughs = 0;S = 32; while(n1 < N_byte) %定義一個(gè)計(jì)數(shù)器,統(tǒng)計(jì)接收包計(jì)數(shù)器if ACK == 1%接收到應(yīng)答信號(hào),則發(fā)送下一段數(shù)據(jù)%分段n1 = n1 + 1;Data_trans{n1} = Data_source(K*(n1-1)+1:K*n1);else%否則重復(fù)發(fā)送當(dāng)前的信號(hào)n1 = n1; Data_trans{n1} = Data_source(K*(n1-1)+1:K*n1);end %進(jìn)行線性編碼Data_Encode{n1} = c*Data_trans{n1}';%向節(jié)點(diǎn)B發(fā)送兩個(gè)%成功發(fā)送概率事件Pf = 1 - rand();if Pf > 1 - dfData_Encode_rightB{n1} = Data_Encode{1,n1}(1:K-2);%成功發(fā)送elseData_Encode_rightB{n1} = 0*Data_Encode{1,n1}(1:K-2);%錯(cuò)誤發(fā)送end%向節(jié)點(diǎn)C發(fā)送兩個(gè)%成功發(fā)送概率事件Pf = 1 - rand();if Pf > 1 - dfData_Encode_rightC{n1} = Data_Encode{1,n1}(2:K-1);%成功發(fā)送elseData_Encode_rightC{n1} = 0*Data_Encode{1,n1}(2:K-1);%錯(cuò)誤發(fā)送end %向節(jié)點(diǎn)D發(fā)送兩個(gè)%成功發(fā)送概率事件Pf = 1 - rand();if Pf > 1 - dfData_Encode_rightD{n1} = Data_Encode{1,n1}(3:K);%成功發(fā)送elseData_Encode_rightD{n1} = 0*Data_Encode{1,n1}(3:K);%錯(cuò)誤發(fā)送end %成功接收概率事件Pr = 1 - rand();if Pr > 1 - drData_Decode_right{1,n1} = [(Data_Encode_rightB{1,n1}(1:K-2))',(Data_Encode_rightC{1,n1}(K-2))',(Data_Encode_rightD{1,n1}(K-2))'];%成功發(fā)送elseData_Decode_right{1,n1} = 0*[(Data_Encode_rightB{1,n1}(1:K-2))',(Data_Encode_rightC{1,n1}(K-2))',(Data_Encode_rightD{1,n1}(K-2))'];%錯(cuò)誤發(fā)送end %進(jìn)行解密Data_Decode{n1} = double(inv(c)*(Data_Decode_right{n1})'>0.5);%計(jì)數(shù)器計(jì)數(shù)for iii = 1:Ktmpss(iii) = (Data_Decode{1,n1}(iii) == Data_trans{1,n1}(iii));endif sum(tmpss) == KACK = 1;%成功接收了ACK=1;elseACK = 0;%不成功接收了ACK=0;end%對(duì)于傳統(tǒng)MORE,S值不改變if times > TS = alpha * PS/Num + (1-alpha)*S;PS = 0;Num = 0;times = 0;Count = Count;elseS = S;PS = PS + 1;%假設(shè)發(fā)送數(shù)據(jù)包大小psi為1Num = Num + 1; times = times + T_sub;Count = Count + 1; end%計(jì)算每次發(fā)送成功需要的次數(shù)if n1 == 1EXT(n1) = 1/(Pf*Pr);elseEXT(n1) = EXT(n1-1) + 1/(Pf*Pr); endendThroughput2(mm) = tmp*N_byte/(Count*T_sub); end%計(jì)算吞吐量Throughput(NN) = mean(Throughput2); endend%****************************************************************** enddd = dd + 1; Throughput_sum(dd) = sum(Throughput); endind = 0;for i = 80:5:160;ind = ind + 1;ns(ind) = i-70; endfigure; plot(ns,Throughput_sum,'b-o'); xlabel('包個(gè)數(shù)/段'); ylabel('吞吐量bps'); grid on; axis([10,90,20000,150000]);save MORE+_fig1.mat ns Throughput_sum4.操作步驟與仿真結(jié)論
? ? ? ?其中代碼文件夾中,有普通MORE文件夾和改進(jìn)MORE文件夾以及兩個(gè)算法的對(duì)比仿真m文件。分別運(yùn)行MORE,MORE+,compared.m可以對(duì)MORE算法和MORE+算法進(jìn)行仿真吞吐量分析,以及最后結(jié)果的對(duì)比。
? ? ? ?隨每段中數(shù)據(jù)包個(gè)數(shù)的變化,MORE與MORE+(此時(shí)MORE+的值固定,分別取0.1和0.5,也就是兩條𝛂值不同的MORE+曲線)的吞吐量對(duì)比,例如:傳輸500個(gè)數(shù)據(jù)包,讓每段中數(shù)據(jù)包的個(gè)數(shù)(即K值)從10到100變化,繪制K與吞吐量的關(guān)系曲線;
? ? ? 這里取K=0.5.兩個(gè)算法的仿真對(duì)比效果如下所示:
? ? ? 隨著傳輸數(shù)據(jù)包個(gè)數(shù)的變化,MORE與MORE+(此時(shí)MORE+的值固定,分別取0.1和0.5)的吞吐量對(duì)比,此時(shí)每段中數(shù)據(jù)包的個(gè)數(shù)K固定,如50.改變傳輸數(shù)據(jù)包的個(gè)數(shù),如從50到500,繪制傳輸數(shù)據(jù)包個(gè)數(shù)與吞吐量的關(guān)系曲線。
? ? ? 這里取K=0.5.兩個(gè)算法的仿真對(duì)比效果如下所示:
5.參考文獻(xiàn)
[1]王曉燕. 無線傳感器網(wǎng)絡(luò)機(jī)會(huì)路由協(xié)議—MORE的優(yōu)化[J]. 電腦開發(fā)與應(yīng)用, 2012, 25(2):4.
A-12-06
總結(jié)
以上是生活随笔為你收集整理的【MORE协议】基于MORE的改进协议设计的MATLAB仿真的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SVM】通过SVM对数据进行训练和分类
- 下一篇: 【光斑定位】空间激光通信、光斑定位、CC