搜尋

Generate Network Topology part I - BS topology

上次說明圖(一)流程中設定WiSE參數(LoadParameters()與LoadScenarioParameters())後,程式就會進入GenerateNetworkTopology(),此步驟主要是布建BS以及灑UE,本篇主要按照specifications的規範,初步布建基地台資訊(但我們先不考量Wrapped around,後續再來說明如何寫 Wrapped around 的基地台布建),而灑UE的部分也未來再說明。

圖(一) WiSE程式流程圖 與 C++程式框架

GenerateNetworkTopology()主要的檔案有Spec.h、Network.h與SpecNetworkTopologyGenerator.h以及SpecNetworkTopologyGenerator.cpp,這些檔案的關係圖如圖(二);Spec.h設定參數後,程式進入Network.h檔,Network.h裡有SpecNetworkTopologyGenerator Function,就開始布建BS以及UE。

圖(二) Network Topology程式流程圖

 

在WiSE SpecNetworkTopologyGenerator.h裡我們產生一個CSpecNetworkTopologyGenerator Class,其架構如圖(三),接下來我將依序說明:

1.GenerateMacroCellTopology

2.GenerateInHOfficeMacroCellTopology

3.GenerateIndoorHotspotMacroCellTopology

圖(三) CSpecNetworkTopologyGenerator Class

 

Let’s GO~!

1.GenerateMacroCellTopology

功能為產生Macro cell topology,如圖(四),此為我們熟知的BS布建,每個Node有三個sectors,但它是如何布建的呢?就來看程式囉!讀者如想知道這部分TR來源,可參考TR 36.814 UMa, UMi, RMa。

圖(四) 19個Nodes布建

 

圖(五) MacroCellTopology I

BS布建其實很簡單,邏輯通了,就什麼都通了,程式碼如圖(五)。至於要產生幾個Node呢?我們可參考圖(五)的第42行,cNode.resize(1+uRing*(2*6+(uRing-1)*6)/2),uRing我們可以在Spec.h中設定,uRing=0、1 、 2產生Node的數量分別為1、7、19,我們可參考圖(六)。

 

圖(六) uRing與Node關係

圖(五)的第43行,Matrix<double> mdLocation(cNode.size(),2),mdLocation矩陣開的維度為cNode.size() By 2,2包含要放X軸與Y軸兩個位置;初始化一切就緒後,就進入45行的for迴圈裡面,第一次進入時:n=0,index=0

dAngle=-120;

mdLocation[index][0]=dInterNodeDistance*n; // dInterNodeDistance 為Node間距離

mdLocation[index][1]=0;

dOffsetX=dInterNodeDistance*cos(dAngle/180*PI);

dOffsetY=dInterNodeDistance*sin(dAngle/180*PI);

因n=0所以不會進入53行的for迴圈裡

所以得到mdLocation[index][0]=0(X軸值)與mdLocation[index][1]=0(Y軸值),就擺好第一個Node位置,如圖(七)。

圖(七) n=0

再來又回到圖(五)的第45行:n=1,index=0,也就是要開始擺放第二圈Node,

可參考圖(五)程式碼與圖(八)說明圖,注意:相對應的顏色,綠色、黃色、藍色顏色是有意義的歐!

 

圖(八) n=1

圖(五)的第45行:n=1,index=0第一層for迴圈就會擺好圖(八)中index=0的那個Node,而其他的Node則是第53行for迴圈裡面來完成。

完成n=1後,又回到圖(五)的第45行:n=2,index=0,也就是要開始擺放第三圈Node,其方法跟n=0與n=1一樣,可參考圖(九)。

圖(九) n=2

擺好所有BSs位置後,程式就會進入如圖(十)的程式

圖(十) MacroCellTopology II

cNode[i].uID                // Node編號

cNode[i].dLocation[0]        // Node X軸值

cNode[i].dLocation[1]        // Node Y軸值

cNode[i].dLocation[2]        // Node 高度

cNode[i].cCell.resize(vdAzimuth.size()); // vdAzimuth size 是3,把cell都開成3個

圖(十)72與73行將座標(0,0)移到左下角,如圖(十一),主要是因為我們之前在擺Node位置時,是以中心點為(0,0)位置。

圖(十一) 移中心點(0,0)

圖(十) MacroCellTopology II主要是將每個Node與Node裡面的Cells資訊填進去,其中值得注意的是第82與84行,一個Node裡面三個不同方向的Sectors如圖(十二)。

圖(十二) 一個Node裡面三個不同方向的Cells

2.GenerateInHOfficeMacroCellTopology

在Indoor Office裡,總共有12個Nodes,每個Node裡面一樣有三個不同方向的Cells,想了解可參考TR 38.900;我想,有了前面較為複雜的GenerateMacroCellTopology經驗後,這個就相對簡單多了,我直接把程式碼與示意圖放在一起,如圖(十三),讀者就可以直接對應。

圖(十三) InHOfficeMacroCellTopology

3.GenerateIndoorHotspotMacroCellTopology

在Indoor Office,總共有12個Nodes, 圖(十四) , 每個Node只有一個Cell,而且值得注意的是,每個Node是垂直於天花板,所以程式碼第184行cNode[i].cCell[j].dRotation[1]=90.0。

圖(十四) IndoorHotspotMacroCellTopology

GenerateInHOfficeMacroCellTopology與GenerateIndoorHotspotMacroCellTopology不用考慮 Wraped around ,GenerateMacroCellTopology則需要,圖(十五)。

圖(十五) Wrapped around

後續再跟大家分享 Wrapped around 這部分,有任何問題留言跟我聯絡歐! 掰掰~

留言

請先登入後再回覆文章