狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

無線網絡協議原理-實驗報告

| 瀏覽次數:

 武

 漢

 工

 程

 大

 學

 計算機科學與工程學院

 《無線網絡協議原理》實驗報告

 專業班級

 實驗地點

 學生學號

 指導教師

 學生姓名

 實驗時間

  實驗項目 實驗二:LEACH 協議仿真實驗 實驗類別 操作性( )

 驗證性()

 設計性( √

 )

 綜合性( )

 其它( )

 實驗目的及要求

 (1)實驗目的 通過此實驗使學生加深理解 leach 成簇協議,分析算法優、缺點。

 (2)實驗要求 a)

 編寫簇頭選舉代碼; b) 編寫普通節點加入簇代碼; c) 編寫能量消耗代碼; d) 和 PEGASIS 協議實驗結果對比并分析原因。

 e) 嘗試對節點初始能量不均勻情況改進簇頭選舉算法。

  成 績 評 定 表 類

 別 評 分 標 準 分值 得分 合

 計 上機表現 積極出勤、遵守紀律 主動完成實驗設計任務

 0 30 分

  程序代碼 比較規范、基本正確 功能達到實驗要求

 0 30 分

 實驗報告 及時遞交、填寫規范 內容完整、體現收獲

 0 40 分

 說明

 評閱教師:

 日 期:

  年

 月

 日

 實 驗 內 容 一、實驗目的 1 編寫 WSN 網絡節點生成代碼 2 編寫簇頭選舉代碼 3 編寫普通節點加入簇代碼 4 編寫路由能量消耗代碼 5 嘗試對節點初始能量不均勻情況改進簇頭選舉算法(可選)

 6 畫出分簇效果圖 7 和 PEGASIS 協議能量消耗性能對比并分析原因

 二、實驗準備

  1、實驗中會用到的庫函數有 rand()函數:隨機數生成函數,即生成 0~1 的隨機數,里面參數表示矩陣大小 Round()函數:四舍五入取整函數 Plot()函數:二維曲線繪圖函數 2、掌握 LEACH 協議的基本類容,根據簇的劃分以及簇頭的選擇編寫代碼

 并得到仿真結果。

 設置區域范圍、節點坐標、區域內節點數目、節點成為簇頭概率以及各種能

  量和最大輪數的設定 利用 rand()函數創建隨機的傳感器網絡,并設定匯聚節點位置 根據節點能量是否大于零來判斷節點是否死亡并在圖中畫出節點的位置,死 亡的節點用紅點表示,沒有死亡的普通節點用“。”表示并用 plot()函數畫出 這些節點的曲線圖 根據 LEACH 協議中簇頭節點的選取要求選出簇頭,根據簇頭節點的坐標用 plot()函數在圖上將簇頭表示黑*,并計算簇頭節點到匯聚節點的距離,將距 離與通信路徑進行比較計算出各簇頭的能量消耗 選取正常節點的相關簇頭,在 n 個節點中選取出節點類型為 N 且能量大于 零的節點,計算這些節點到匯聚界定的距離,設定距離最小最小簇頭數為 1, 計算該節點與各簇頭的距離,取最小距離的簇頭節點為該節點簇頭,并計算 出各普通節點的能量消散 用 plot()函數畫出各簇頭節點和普通節點的劃分圖

 三、實驗步驟

 clear;

 xm=100;

 ym=100;//設置區域為 100*100

 sink.x=0.5*xm;

 sink.y=0.5*ym;//匯聚節點坐標

 n=100 //區域內節點數目

 p=0.1; //節點成為簇頭的概率

 Eo=0.5;//節點初始能量

 ETX=50*0.000000001;//發射單位報文損耗能量

 ERX=50*0.000000001;//接收單位報文損耗能量

 Efs=10*0.000000000001;//自由空間能量

 Emp=0.0013*0.000000000001;//衰減空間能量

 EDA=5*0.000000001;多路徑衰減能量

 rmax=20 最大的輪數 do=sqrt(Efs/Emp);//計算通信路徑 do 1、下面利用 for 循環語句和 rand()函數在 n 個節點中隨機生成普通節點類型的節點,并表示出它的坐標以及初始能量,普通類型節點用‘N’表示。(請按要求在“*”處填上合適的代碼)

 for ****** for i=1:1:n

  S(i).xd=rand(1,1)*xm;

  S(i).yd=rand(1,1)*ym;

  S(i).G=0;

  S(i).type="N";

  S(i).E=Eo;

  end ****

  End 定義匯聚節點的位置坐標 S(n+1).xd=sink.x;

 S(n+1).yd=sink.y; cluster=1; 利用 for 循環語句初始化每個節點的簇頭節點 for r=0:1:rmax

 if(mod(r, round(1/p) )==0)

 for i=1:1:n

 S(i).G=0;

 end

 end

 hold off;

 figure(1); 2、請分析下段代碼的功能。

 for i=1:1:n

  if (S(i).E<=0)

 plot(S(i).xd,S(i).yd,"red .");

 hold on;

  end

 if (S(i).E>0)

 S(i).type="N";

  plot(S(i).xd,S(i).yd,"o");

  hold on;

 end

 end plot(S(n+1).xd,S(n+1).yd,"x");

 plot(S(n+1).xd,S(n+1).yd,"red ."); cluster=1;

 功能:利用 for 語句判斷每個節點是否死亡,如果節點能量小于零則節點死亡,并用 plot()函數在圖上表示出該節點的位置,用‘red.’表示死亡的節點。反之則節點沒有死亡,將節點類型定義為普通節點,并用并用 plot()函數在圖上表示出該節點的位置,用‘。’表示未死亡的普通節點。并表示出匯聚節點的位置,并將其記為第一個簇頭,判斷節點是否死亡 。

 3、利用 for 語句和 if 語句根據 LEACH 協議的簇頭選取規則在 n 個節點中選出簇頭節點,將簇頭節點的類型用‘C’表示,并將選出的接待點的坐標賦值給簇頭 C(cluster),并用 plot()函數將簇頭節點的位置在圖中用‘k*’表示。然后計算該點到匯聚節點的距離并將該距離賦值給簇頭到匯聚節點的距離 C(cluster).distance。并記錄得到的簇頭節點是 n 個節點中的哪一個,給簇頭的 X、Y 坐標賦值并將簇頭總數加一。最后通過比較各簇頭節點到匯聚加節點的距離和通信半徑的距離計算出簇頭節點的能量耗散(請按要求補全下列橫線處的代碼)

 for i=1:1:n //簇頭的選擇

  if(S(i).E>0)

  temp_rand=rand;

  if ((S(i).G)<=0)

  if(temp_rand<= (p/(1-p*mod(r,round(1/p)))))

 S(i).type= “C”

 ;

 S(i).G=round(1/p)-1;

 C(cluster).xd=

 S(i).xd

 ;

 C(cluster).yd=

 S(i).yd

  ;

 plot(

  S(i).xd,S(i).yd,"k*"

 );

 distance=

  sqrt( (S(i).xd-(S(n+1).xd) )^2 + (S(i).yd-(S(n+1).yd) )^2 )

  ;

  C(cluster).distance=

 distance

  ;

 C(cluster).id=

  i

 ;

 X(cluster)=

  S(i).xd

  ;

 Y(cluster)=

 S(i).yd

  ;

 cluster=

 cluster+1

 ;

 distance;

 if (distance>do)

 S(i).E=

 S(i).E-(ETX+EDA)*(4000)+Emp*4000* ( distance*distance*distance*distance ));

  end

 if (distance<=do)

 S(i).E=

 S(i).E- ( (ETX+EDA)*(4000)

 + Efs*4000*( distance * distance ))

  ;

 end

 end

 end

 end

 end 4、利用 for 循環對普通節點進行簇的劃分即對普通節點選取相關簇頭,首先初始化該點的通信最短距離,即該點到匯聚節點的距離,并記錄下它的簇頭為匯聚節點。然后將該普通節點與全部的簇頭節點進行距離計算并與它與匯聚節點的距離進行比較,將距離的最小值賦值給 min_dis。然后計算普通節點和簇頭節點的能量耗散,記錄該普通節點的簇頭節點和到簇頭節點的距離。(請按要求補全下列橫線處的代碼)

 for i= 1:1:n

 //選取正常節點的相關簇頭

  if ( S(i).type=="N" && S(i).E>0 )

  if(cluster-1>=1)

  min_dis=

 sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 )

  ;

  min_dis_cluster=

 1

  ;

  for

 c=1:1:cluster-1

  temp=min(min_dis,

  sqrt( (S(i).xd-C(c).xd)^2 + (S(i).yd-C(c).yd)^2 )

  );

  if ( temp<min_dis )

  min_dis=temp

 ;

 min_dis_cluster=c;

  ;

  end

  end

  if (min_dis>do)

 //普通節點能量耗散

  S(i).E=

 S(i).E- ( ETX*(4000) + Emp*4000*( min_dis * min_dis * min_dis * min_dis));

 ;

  end

  if

 (min_dis<=do)

  S(i).E= S(i).E- ( ETX*(4000) + Efs*4000*( min_dis *

 min_dis))

 ;

  end

 if(min_dis>0)

 //簇頭節點能量耗散

  S(C(min_dis_cluster).id).E =

 S(C(min_dis_cluster).id).E- ( (ERX + EDA)*4000 )

  ;

  end

 S(i).min_dis=

 min_dis

 ;

  S(i).min_dis_cluster=

 min_dis_cluster

  ;

 end

 end

 end

 hold on; 5、分析下列代碼的功能。

 [vx,vy]=voronoi(X,Y);

 plot(X,Y,"r*",vx,vy,"b-");

 hold on;

 axis([0 xm 0 ym]);

 功能:輸出對區域內節點的劃分圖。

 四、實驗分析 請根據仿真結果對測試結果進行分析

  >> LEACH

 n = 100 rmax = 20

推薦訪問: 無線網絡 原理 協議

【無線網絡協議原理-實驗報告】相關推薦

工作總結最新推薦

NEW