2008年6月27日 星期五

我的C++程式

#include
using std::cout;
using std::endl;

#include

int main()
double Simulation_Status;
{
if (Simulation_Status == 0) // load parameters
{
double PacketArrivalTime = 0.0;
double MeanPacketLength = 0.0;
int BufferSize = 0;
double LineSpeed = 0.0;
double SimulationTime = 0.0;
double TimeStamp = 0.0;
PoissonArrival TrafficModel;
int channel_state = 0;

long total_data_packets = 0;
long total_departed_pakcets = 0;
double total_packet_system_time = 0.0;
double total_packet_queueing_time = 0.0;
long number_of_packet_queued = 0;
long number_of_blocked_data = 0;

double channel_time = 0.0;

Q.Scheduled_Time = TrafficModel.next_arrival(PacketArrivalTime);
Q.Create_Time = Q.Scheduled_Time;
Q.length = TrafficModel.frame_length(MeanPacketLength);
Q.event = new_packet_arrival; Q.data_type = DATA;
Q.seq_no = Schedular.seq_no++;
Schedular.join_from_head(Q);

button1->Text = "Running...";
Simulation_Status = 1;
button1->Enabled = false;

textBox5->AcceptsReturn = true;
textBox5->AppendText("Simulation starts at " + DateTime::Now.ToLongTimeString() + "\n");

while (TimeStamp<1000)
{
Schedular.get_event(Q);
if (Schedular.seq_no > 200000000)
Schedular.seq_no = 0;

switch(Q.event)
{
case new_packet_arrival:
if (TimeStamp > Q.Scheduled_Time)
textBox5->AppendText("error410\n");
else
{
TimeStamp = Q.Scheduled_Time;
if (channel_state == 0)
{
Q.event = departure;
Q.Scheduled_Time = ((floor(Q.length) * 8) / LineSpeed) + TimeStamp; ++channel_state;
Schedular.join_from_end(Q);

textBox5->AppendText(Q.seq_no + " enters server \n");
}
else if (DataBuffer.count < BufferSize)
{
Q.event = queued;
DataBuffer.join_from_end(Q);
textBox5->AppendText(Q.seq_no + " enters queue \n");
}
else
{
textBox5->AppendText(Q.seq_no + " blocked! \n");
}
Q.data_type = DATA;
Q.event = new_packet_arrival;
Q.Scheduled_Time = TrafficModel.next_arrival(PacketArrivalTime) + TimeStamp; Q.Create_Time = Q.Scheduled_Time;
Q.length = TrafficModel.frame_length(MeanPacketLength);
Q.seq_no = Schedular.seq_no++;
Schedular.join_from_end(Q);
}
break;
case departure:
if (TimeStamp > Q.Scheduled_Time)
textBox5->AppendText("error447\n");
else
{
TimeStamp = Q.Scheduled_Time;
--channel_state;
if (Q.data_type == DATA)
{
}
if (DataBuffer.count != 0)
{
DataBuffer.get_event(Q);
Q.event = departure;
Q.Scheduled_Time = ((floor(Q.length) * 8) / LineSpeed) + TimeStamp; ++channel_state;
Schedular.join_from_end(Q);
total_packet_queueing_time += (TimeStamp - Q.Create_Time);
}
}
break;
}
}
textBox5->AppendText("Simulation ends at " + DateTime::Now.ToLongTimeString() + "\n");
button1->Text = "Finished"; Simulation_Status = 0;

double packet_loss_rate = double(number_of_blocked_data) / double(total_data_packets);

double average_delay = total_packet_system_time / double(total_departed_pakcets);

double average_queueing_delay = total_packet_queueing_time / double(total_departed_pakcets);

double average_queueing_delay2 = total_packet_queueing_time / double(number_of_packet_queued);
textBox5->AppendText("封包遺失率 = " + Convert::ToString(packet_loss_rate) + "\n"); textBox5->AppendText("平均延遲時間 = " + Convert::ToString(average_delay) + " sec.\n");
textBox5->AppendText("平均排程時間 = " + Convert::ToString(average_queueing_delay) + " sec.\n");
textBox5->AppendText("平均排程時間 if queued = " + Convert::ToString(average_queueing_delay2) + " sec.\n");
}
}
{
Simulation_Status = 0;
}

9428132 葉育辰 期末程式

老實說我沒有寫過C++的經驗


我只是依循以前寫C的經驗去改這個程式


一開始進行編譯的時候他總是會跳出某些主要的錯誤 :


expected unqualified-id before XXXXX




#include的部分我有上網查了一下功能加了進去


#include的部分不知道要定義甚麼所以就沒加進去了


總之這個程式還是跑不出來結果

http://impulse502.blogspot.com/2008/06/c.html

這個程式只有開頭不一樣後面的我幾乎沒有改

2008年6月26日 星期四

NS2技能的自我檢視

Q1 : nsBench的應用



  • 雖然nsBench主要是用來產生有線網路的模擬TCL碼 , 但它並不支援無線網路 ,
    所以我想問別的軟體可以模擬兩者的TCL碼 .



Q2 : 模擬網路狀況的環境



  • 為什麼我們不選擇用Linux系統的環境去模擬網路傳輸狀況呢 ? 它的指令跟cygmin
    差不多 , 可是論未來發展的話Linux系統是不可或缺的 , 為什麼不用它來做練習並增
    加熟練度呢 ? 而且可以取代NSG2的有NUTUns , 所以我一直有疑問就是為何要在
    windows系統使用NS2模擬 , 而不是直接用Linux系統做模擬 ? 還是說NS2有特別好用
    的東西嗎 ?



Q3 : TCL碼的疑問



  • 第四章的 wired-measure.tcl 裡有一行寫到 set null [new Agent/mUdpSink]
    附註是說新增的接收Agent , 可以把接收封包資訊紀錄到檔案中
    那意思是我可以設2個以上的Agent進而分別觀察封包資訊紀錄並互做比較嗎
    還是說在這個程式裡只能用一個 ? 是因為沒寫入路由表規則的原因嗎?




Q4 : 影像傳輸問題



  • 第六章實驗主要目的是模擬出一個有畫面遺失的影像檔 , 我的問題是我們一定要
    YUV(原始) --> m4v --> mp4 --> 經由etmp4產生有畫面遺失的影像檔 -->YUV(遺失畫面)
    一定要經過這麼複雜的程序才能模擬出我們想要的YUV檔嗎?



Q5 : sd 檔 與 rd 檔

  • 為什麼每模擬一次 tcl 檔它都只會產生sd 和 rd , 不會產生sd1 和 rd1 .......
    例如:第一次模擬tcl 檔產生sd 和 rd
    第二次模擬tcl 檔產生sd1 和 rd1 (不會覆蓋之前的sd 和 rd )


































2008年5月7日 星期三

實驗十一 : 無線網路效能分析探討(三)

本實驗主要比較在802.11b和802.11e下影片傳輸的服務品質

(802.11)(我覺得是802.11b)



數值跟書上差一些些,不過應該沒問題才是


(802.11e)



這次的數值卻跟課本的一樣!!


從以上的模擬結果可以得知,若是影片透過802.11e中的video service傳送,
除了可以得到較佳的傳送品質,且平均的延遲時間也會比較小

2008年5月1日 星期四

實驗十 : 無線網路效能分析探討(二)

這次實驗用的小工具在lab10裡面有


試用小工具
1.cbrgen
我直接下圖的方式執行結果檔案產生不出來


要在後面加.tcl才能執行


產生出來的檔案部分內容


2.setdest
用法如下圖


例子:兩節點在範圍300m*300m內不停移動,最大速度20m/s,模擬時間10秒,則指 令如下所示


此為檔案部分內容


範例一

使用cbrgen產生traffic patern


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


執行tcl檔和效能評估程式:

DSDV

執行tcl檔後會產生此檔案



AODV



DSR




範例二

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


執行tcl檔和效能評估程式:

DSDV



AODV



DSR



對照一下課本後,結果是合理的!

2008年4月27日 星期日

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

先進入lab8的資料夾裡


使用ffmpeg程式去對YUV檔案轉成m4v的檔案,在這裡我把qscale的數值改成25
下面所有的數據都是因為我把數值改成25的結果,只有一部分數值會改變,不過結果應該是合理的


使用MP4Box檔案將影片再轉成mp4檔案
不過正要執行時,出現了缺少msvcr70.dll的訊息


先去下載放到lab8資料夾裡


結果是OK的


利用mp4trace成是將影片中的每一個frame相關資訊擷取出來並放到副檔名為st的檔案中


利用NS2工具執行lab8.tcl


模擬完後如以往的結果一樣會產生記錄檔sd,rd
接下來經由etmp4程式產生一個有畫面遺失的影片mp4檔


使用ffmpeg程式將上一步驟所得之重建後之mp4檔回復成yuv影片檔


使用avgpsnr程式去針對重建後的yuv影片檔及原始檔yuv影片檔,獲得重建後的yuv影片的平均PSNR值大小

  • 影響影像傳輸因素之探討

a.產生GOP length 9 的方式:

b.產生GOP length 15 的方式:

之後我重新把qscale的數值改成31後數據都和課本是一樣的
所以只要數值在2~31之間實驗依然能成功進行


實驗七 : MyEalvid-NT

一開始先去網路上抓取video traffic trace file
不過在lab7的資料夾裡面已經有檔案存在了





雖然不用去網路抓取video traffic trace file,不過我沒有UltraEdit所以趣網路上下載



按照書上說要先把前兩行刪除,可是一開啟檔案發現好像沒有書上說要刪除的那兩行



進入lab7的資料夾裡



用NS2工具模擬lab7.tcl


模擬完後會有紀錄檔sd,rd



轉換trace file的格式



使用et這個程式去進行評估分析的動作




封包平均延遲和最大延遲:


繪圖:


紅色字是寫說連續兩次不小心按到Enter
所以紅框裡的字可以忽略



畫面平均延遲和最大延遲:


繪圖:




封包抖動率:




畫面抖動率:




如果要驗證的話課本的內容有記載