2008年6月27日 星期五

期末程式

先複製了老師給的 Demo.cpp、PoissonArrival.h和DynamicQueue
然後開始慢慢的一個一個Debug
不過還是有問題
執行結束後的時間有問題
程式

半成品...= =

2008年6月26日 星期四

9676049 阮文正 NS2技能的自我檢視

問題1.awk & perl
描述:書中用了兩個可以做為分析的程式,perl作者只在實驗四的時候有用到,後面就沒出現過,都是使用awk,是作者的偏愛?還是awk優於perl?

問題2. Seed的設定
描述:在使用亂數的時候,需要給seed 0或1來決定產生的亂數是每次都一樣或者是每次都不一樣,但實驗時都是使用seed 1,那為什麼還要保留seed 0的設定?

問題3.$awk ‘{print $1 $4}’ rd_udp > cbr_delay
描述:這裡並沒有寫awk程式,為什麼可以如此使用?perl也能這樣用嗎?

問題4.set?
描述:在TCL中,常會出現如set udp0 [new Agent/UDP]然後接著就可以使用$udp0 set packetSize_ 1500,這中間從set到可以使用$udp0來設定UDP的參數是如何做到的?

問題5.實驗十的cbrgen產生traffic pattern和setdest產生無線網路移動場景
描述:在做實驗錢都要先用這兩個小工具先產生我們需要的traffic pattern和無線網路移動場景,是不是能夠將這樣的功能擴充到NS2裡面,這樣就可以只要在TCL上編輯,而不需要分段進行?

2008年5月22日 星期四

NS2的擴充方法(一)

這個方法是看完老師的,以及NS by Example的網頁之後
自己試著使用已有的C程式來新增加到NS2裡面去

供我們方便使用

首先先下載ex-linkage.c這個檔案到ns-2.29資料夾裡

這裡我有新增加一個資料夾放這個檔案

接下來我需要編輯ns-2.29裡的Makefile這個檔案

在"OBJ_CC = \"和"$(OBJ_STL)"之間輸入

newC/ex-linkage.o \

然後存檔

接著因為ex-linkage.c裡面有設定兩個變數

所以我需要到ns-2.29/tcl/lib的ns-default.tcl設定這兩個變數的初值

Agent/MyAgentOtcl set my_var1_otcl 10

Agent/MyAgentOtcl set my_var2_otcl 5.5

設定完成後存檔

開啟cygwin

到ns-2.29

然後重新編譯($ make)

編譯完成後我要做測試

先下載ex-linkage.tcl檔案

然後執行


測試OK!

因為有設定初值,所以不會出現warning message

2008年5月21日 星期三

ns路徑問題解決

打開檔案.bashrc
在下面有一行
紅色是我新加入的部分
export PATH=$NS_HOME/ns-2.29:$NS_HOME/nam-1.11:$NS_HOME/tcl8.4.11/unix:$NS_HOME/tk8.4.11/unix:$NS_HOME/bin:$PATH

經過這個步驟
在cygwin執行時不再需要將ns.exe這個檔案放到要執行的資料夾了
也不會再出現找不到的訊息

2008年5月7日 星期三

實驗十、無線網路效能分析探討(二)AdHoc網路路由協定效能分析探討

◎實驗目的:
1.瞭解如何在NS2中建立無線隨意網路(Wireless Ad Hoc network)。
2.學習分析無線隨意網路路由協定(Ad Hoc routing protocols)的效能。

◎實驗背景:
在無線隨意網路中,如何決定最有效,最迅速的傳送路徑,是一個很重要的課題,這個實驗是要探討各種不同的路由協定,然後做比較,要拿來做比較的是:DSDV,AODV,DSR。

●介紹兩個小工具:cbrgen, setdest
cbrgen:能產生TCP flow或CBR flow,程式所在目錄是ns-allinone-2.29\ns-2.29\indep-utils\cmu-scen-gen裡面的cbrgen.tcl,用法如下:
ns cbrgen.tcl [-type cbrtcp] [-nn nodes] [-seed seed] [-mc connections] [-rate rate]
-type:指定產生的資料流是tcp flow 或 cbr flow。
-nn:指定有多少個節點。
-seed:指定random number generator中的種子。
-mc:指定最大連接數。
-rate:每秒送出去多少個封包,如果是使用CBR,則封包固定為512bytes。

setdest:可以用來隨機產生無線網路模擬所需要的節點移動場景。這個程式放在ns-allinone-2.29\ns-2.29\indep-utils\cmu-scen-gen\setdest/目錄下,使用前必須先make產生執行檔,其用法如下
-n:指定場景中有多少個節點。

-p:指定當某節點到達目的地後要停留多少時間,如果設為0.0就表示不停流馬上往下一個目的地前進。

-M:指定節點隨機移動時速度的最大值,單位是m/sec,其速度將在[0, max speed中]隨機選擇。

-t:指定模擬場景的持續時間,單位是秒。
-x:指定移動區域的長度,x軸方向,單位是公尺。

-y:指定移動區域的長度,y軸方向,單位是公尺。

◎實驗:

●範例一:

此實驗有100個無線節點組成,模擬時間為100秒,pause time設為100秒,在模擬這段時間沒有mobility,另外設定使用CBR flow,最大連線數目為10條,每一條送出十個封包。

○使用cbrgen產生traffic pattern。


要特別注意的地方是rate的值一定要寫10.0,不可以只寫10,不然會有錯誤!
這個指令會有一個輸出結果被存放到cbr_n100_m10_r10中。其內容是產生TCP或CBR的TCL。

○使用setdest產生無線網路移動場景。


○執行模擬以及用效能評估程式觀看結果

DSDV:


AODV:


DSR:


從實驗結果可以看出,使用DSDV可以比較收到第一個封包,這是因為DSDV是table-driven protocol,資料傳送前,已經知道路徑,所以不需要再去尋找新的路徑,因此會收到較早收到第一個封包。

●範例二:

這個實驗是100個無線節點所組成,模擬時間為100秒,pause time設為0秒,也就是在模擬這段時間節點隨時都在移動中,另外設定使用CBR flow,最大連線數目為十條,每一條每秒送出十個封包。

○使用setdest.exe產生無線網路移動場景。

○執行模擬以及用效能評估程式觀看結果

DSDV:

AODV: DSR:

這裡有點奇怪,因為由書本上告訴我這個實驗的結果應該會看到使用AODV或DSR的可以使的第一個封包接收的時間較早,但是我模擬之後的分析結果卻不是這樣書本上的DSDV的第一個接收時間是12.225 s,但我的卻是2.561 s。照理說應該會比較慢才對,因為實驗的場景是在節點隨時都在移動的場景,DSDV必須花時間更新路由表,所以應該會較慢。

2008年5月6日 星期二

實驗九、無線網路效能分析探討(一)隱藏節點和暴露節點問題

◎實驗目的:
1.瞭解什麼是隱藏節點和暴露節點問題。
2.瞭解RTS/CTS是如何降低隱藏節點問題發生的機會,以提升系統效能。
3.瞭解NS2中無線傳輸模型和門檻的觀念。

◎實驗步驟:
隱藏節點問題和暴露節點問題都跟有效傳輸距離有關係,所以如何計算出有效的傳輸距離和相對應的參數就變得很重要,在NS2中有提供一個小工具讓使用者輸入想要使用的傳輸模型和有效的傳輸距離後,就會把相對應的參數數值顯示出來。

首先,書本上告訴我第一次使用要先編譯程式(程式在indep-utils/propagation目錄下)

下圖是使用說明


接下來做一個範例

以Two Ray Ground,希望有效傳輸距離為250公尺為例

從這個結果得知若要設定有效傳輸距離為250公尺時,需要在模擬的TCL中設定傳輸功率為0.281838,傳輸頻率為9.14e+08,傳送天線增益為1,接收天線增益為1,傳送高度為1.5,接收天線告度為1.5,RxThresh_須設定為3.6526e-10。

用公式驗證RxThresh_的值:

(0.281838×(1.5^2)×(1.5^2))/(250^4)=3.652e-10

接下來用TC模擬程式驗證

首先確定lab9目錄下的test_2nodes.tcl裡面所設的參數是否設成上述我們得到的參數數值

然後進行模擬

模擬結束後發現產生傳送記錄檔(sd)和接收記錄檔(rd),且rd記錄接收到的封包資訊

接著我更改了TCL裡面的距離設定

原先的傳輸距離是設定為250公尺

我將它改成251公尺

結果發現模擬結束之後產生的rd檔案中是空的

表示只有傳送,但是卻沒收到任何的封包。

●隱藏節點問題:

情境描述:節點A到節點B的距離為100公尺,節點B到節點C的距離也是100公尺,而節點之間的carrier sense距離是150公尺,可以傳送資料的有效距離是120公尺

○先使用threshold.exe求出相對應的參數

設定的有效傳輸距離為120公尺時,需要的相關參數為傳送功率0.281838,傳送頻率9.14e+08,傳送天線增益為1,接收天線增益為1,傳送天線高度1.5,接收天線高度1.5,最後RxThresh_為6.88081e-09。

書本上因為CSThresh_的設定和RXThresh_使用的公式是相同的,所以可以直接把RXThresh_的結果拿來用,這裡CSThresh_是由下圖所示設有效傳輸距離為150所得到的值為2.81838e-09

然後來執行模擬以及看模擬的結果

○先看沒有RTS/CTS時(TCL裡面的要寫Mac/802_ 11 set RTSThreshold_ 3000)

然後跑模擬

跑完之後得到兩個發送端記錄檔(sd1,sd2)和兩個接收端記錄檔(rd1,rd2)

sd1送出1689個封包,rd1收到154個封包,sd2送出1627個封包,rd2收到105個封包。

○接下來換看有RTS/CTS時(TCL裡面的要寫Mac/802_ 11 set RTSThreshold_ 0)

sd1送出1689個封包,rd1收到739個封包,sd2送出1627個封包,rd2收到783個封包。

從這個結果看來使用RTS/CTS可以降低隱藏節點問題。

●暴露節點問題:

情境描述:節點S1和節點S2同時想要分別傳送資料到R1和R2,節點之間的距離都為100公尺,而carrier sense距離為120公尺,可以傳送資料的有效距離為100公尺。

使用threshold.exe求出相對應的參數

因為有效距離120公尺剛剛已經做過,所以就不再做一次了。

接著設定好參數進行模擬

○先模擬沒有RTS/CTS的情況(設定方式同隱藏節點時的做法)

執行完會產生sd1,sd2,rd1,rd2的記錄檔

sd1送出1689個封包,rd1收到926個封包,sd2送出1627個封包,rd2收到796個封包。

○當有RTS/CTS的情況

sd1送出1689個封包,rd1收到829個封包,sd2送出1627個封包,rd2收到783個封包。

這個結果顯示RTS/CTS並不能有效的解決暴露節點問題。

2008年5月1日 星期四

實驗八、影像傳輸效能分析與評估

實驗目的:
1.瞭解各種影響影像傳輸之因素。
2.瞭解各種因素之間的相關性。

背景知識:
在網路上傳輸的各種多媒體資料,其傳輸的品質會因為不同的壓縮參數、網路參數及網路狀況而導致不同的品質。此實驗使用MyEvalvid所模擬出來的傳輸結果得到這些參數之間的相關聯性。
通常會對網路上傳輸的多媒體產生影響的因素大致包含以下幾個,GOP(Group of Picture) pattern、壓縮量化參數(Quantization value)、封包長度(Packet Size)和封包錯誤率(Packet Error rate)。

實驗步驟:
網路架構:Video Server會經由Internet和無線網路傳送影像到Video Receiver,介於Video Server和無線Access Point的連接為有線的連接,並且我們假設此有線連接上不會發生封包遺失。另外,介於Internet和Video Receiver的連接為無線802.11連接,在此無線連接上會發生封包遺失的情況,所以會導致影像品質變差。這個網路架構和上一個實驗是一樣的。
然後針對影像去使用MyEvalvid做PSNR的評估(在此跟前面章節的實驗步驟不同處為在壓縮影像時,有設定不同的Quantization Scale去壓縮出不同的影像品質,這部分不清楚可以在往前看課本的實驗六)

Step1:開Cygwin,且換到ns-allinone-2.29/ns-2.29/book2/lab8的目錄下

Step2:使用ffmpeg程式去對YUV檔案轉成m4v的檔案(這是用foreman影片當例子,跟之前做過的實驗用同樣的例子),使用這個程式時多加了一個qscale(使用不同量化程度)的選項(其值範圍為2~31,做這個實驗我用31)。

Step3:接著再使用MP4Box將m4v檔案轉成mp4,注意這裡使用不同的封包大小去傳輸視訊串流,用mtu的選項設定,這個選項也要跟後面NS2模擬環境所使用的封包大小一致。(注意,這裡執行MP4Box前要記得把msvcr70.dll放進去lab8資料夾裡面,這地方跟實驗六的情況一樣)

Step4:接下來利用mp4trace程式將影片中的每一個frame相關資訊擷取出來並存放到附檔名為st的檔案中(這裡設成foreman_qcif.st)Step5:接下來利用得到的st檔案,使用NS2模擬工具去模擬網路效能(這裡記得封包大小值要設成跟剛剛設的一樣(1024))Step6:上一個步驟的模擬過程結束之後會產生傳送記錄(sd)、接收記錄(rd),把這兩個檔案再加上影片記錄檔foreman_qcif.st檔案和mp4檔案,經由etmp4程式產生一個有畫面遺失的影片mp4檔(檔名是foreman_qcife)Step7:再度使用ffmpeg程式,將上一步驟得到的重建後的mp4檔回復成yuv影片Step8:最後,使用avgpsnr程式去針對重建後的yuv影片檔及原始tuv影片檔,獲得重建後的yuv影片的平均PSNR值大小。


PSNR=26.609726

下面是將原始圖和重建所得的圖show出來

結果

GOP length(g)較短的影像品質比較長的好

壓縮量化(qscale)的值越大影像品質越差

封包長度(mtu)越長影像品質越高

2008年4月30日 星期三

實驗七、MyEalvid-NT

實驗目的:
1.瞭解經由更改MyEalVid所得之MyEalVid-NT的系統架構。
2.瞭解可解畫面比例(Decodable Frame Rate)此效能評量指標的意義。
3.瞭解可解畫面比例的分析模型。
4.瞭解如何使用MyEalVid-NT去評量多媒體網路的效能。
5.使用MyEalVid-NT去驗證所得知可解畫面比例分析模型。
背景知識:
這次使用修改MyEvalVid形成的另一個工具組MyEvalVid-NT。
他跟MyEvalVid的差別在於將Evaluate Trace(ET)做了修改,使它能
計算出可解畫面比例(Decodable Frame Rate)、封包/畫面遺失率
(packet/frame loss rate)、封包/畫面的端點與端點延遲(packe/frame
delay)與封包/畫面的抖動率(packet/frame jitter)。

實驗步驟:
先簡單介紹這個實驗的網路架構,Video Server會經由Internet和無線
網路傳送影像到Video Receiver,介於Video Server和無線Access Point
的連接為有線的連接,並且我們假設此有線連接上不會發生封包遺失。
另外,介於Internet和Video Receiver的連接為無線802.11連接,在此
無線連接上會發生封包遺失的情況,所以會導致影像品質變差。

Step1:先到網站抓取video traffic trace file
Step2:抓取下來的video traffic trace file 之後,打開這個檔案,把前兩行的敘述移除
不過事實上,我打開這個檔案已經沒有那兩行了!

Step3:開cygwin,切換到lab7的目錄下

Step4:進此資料夾之後,直接執行NS2去進行模擬。
整個模擬過程結束之後會產生傳送的記錄檔(sd)和接收的記錄檔(rd)
接下來的效能評估程式et就是使用影片記錄檔、傳送紀錄檔和接收記
錄檔來做分析的動作。附帶說一下,這個模擬過程要稍微等一下下,
一開始只看到SORTING LISTS ...DONE,之後會有一段時間沒看到
動作,稍微等一下下之後,模擬過程結束後就會在繼續顯示後四行文字
(上圖有顯示)

Step5:要做評估分析之前要先轉換trace file的格式,我使用lab7資料夾裡面提
供給的convert.awk來做轉換的動作

這個步驟獲得的Verbose_StarWarsIV.st檔案是影片紀錄檔

Step6:接下來就要使用et這個程式去進行評估分析的動作,他是利用之前的

sd、rd、Verbose_StarWarsIV.st去做比較,如此就可以得知這情況下

,可解畫面數有多少,可解畫面比例的大小為多少。

分析的結果可以得到下列的統計數據:

總共傳送了163682個封包,其中包含28770個I-frame封包,

45339個P-frame封包,89573個B-frame封包

遺失的封包共1595個,其中包含281個I-frame封包,433個P-frame封包

881個B-frame封包。

frame的統計數據:

總共傳輸89998個畫面,其中包含7500個I-frame,22500個P-frame和

59998個B-frame,而遺失的畫面總共1578個,其中包含275個I-frame,

424個I-frame和879個I-frame

然後從這些數據得到可解畫面比例(the decodable frame rate)是

0.913543的大小

Step7:使用lab7資料夾內的delay.awk計算平均延遲時間和最大延遲時間

使用awk擷取資料來繪圖 使用gnuplot繪圖

畫面平均延遲和最大延遲計算

使用awk擷取數據來繪圖 使用gnuplot繪圖 Step8:封包與畫面的抖動率(packet/frame jitter)

封包抖動率,使用awk擷取數據

使用gnuplot繪圖
畫面抖動率,使用awk擷取數據 使用gnuplot繪圖

2008年4月16日 星期三

實驗六、MyEvalVid

實驗目的:
1.瞭解EvalVid的系統架構並得知其優缺點。
2.瞭解整合EvalVid和NS2所得之MyEvalVid的系統架構。
3.瞭解如何使用MyEvalVid來模擬和評估多媒體影像傳輸。
------------------------------------------------------------------------------
先開Cygwin,然後接換到lab6的資料夾
然後使用ffmpeg程式去對yuv檔案轉成m4v
-s : set frame size(qcif是指176*144)
-vcodec : 指定要壓縮的方式(這裡指定用mpeg4去壓縮)
-r : set frame rate(這裡設定每秒30個畫面)
-g : set the group of picture size(這裡設定每一個gop有九個畫面)
-bf : use 'frame' B frame(這裡設定I與P之間或P與P之間有兩個B frame)
-i : input file name(輸入影片檔名為foreman_qcif.yuv,輸出檔案為foreman_qcif.m4v)

轉成m4v的檔案囉!~
接下來要用MP4Box將m4v檔案再轉成mp4
結果出現找不到mvscr70.dll的訊息
上網找了一下,很快就從google找到msvcr70.dll囉!下載下來放到lab6的資料夾
在執行一次MP4Box.exe
OK!成功了!出現foreman_qcif.mp4的檔案

接下來利用mp4trace成是把影片中的每一個frame相關資訊擷取出來並存到foreman_qcif.st的
檔案中
出現foreman_qcif.st檔案下面是檔案內容
使用NS2模擬工具去模擬網路效能
模擬的時候採用random uniform error model和multicast傳送
錯誤率設為0.01,seed為1,最大封包大小為1024

模擬結束後,產生傳送紀錄檔(sd)和接收紀錄檔(rd)

傳送記錄檔,看到送出659個封包
接收紀錄檔,看到收到652個封包,所以遺失率是(659-652)/659=0.011
使用模擬過程產生的傳送紀錄檔(sd)、接收紀錄檔(rd)和影片紀錄檔foreman_qcif.st檔案
和mp4檔案,經由etmp4程式產生一個有畫面遺失的影片foreman_qcife.mp4檔
執行完之後產生了好幾個檔案
接著使用ffmpeg程式將上一步驟得到的重建後的mp4檔回復成yuv影片檔
得到foreman_qcife.yuv檔案
利用avgpsnr程式針對重建後的yuv影片檔及原始yuv影片檔
獲得重建後yuv影片的PSNR值的大小
PSNR=33.607902
使用YUVviewer程式去觀看重建後的影片和原始影片的差別
左邊是原始影片,右邊是重建後的影片
很明顯右邊的影像品質較差
是因為在上面的網路模擬傳輸過程中,有封包遺失率0.011
在傳輸過程中有某些封包丟掉
所以導致重建後的影片品質較原始影像差