發表文章

LTE筆記: 5G NR frame structure

圖片
工研院 陳仁賢 博士 @ 交通大學 3GPP標準會議現況與趨勢研討會 5G NR 的目標: 使用兩個不同的頻帶 (sub-6GHz, mmWave-28GHz) 在此兩個不同通道特性的頻帶上, 提供一致的通道接取 來自:  https://news.samsung.com/global/everything-about-5g-samsung-publishes-5g-nr-standards-whitepap 4G LTE 的通訊協定 (TDD 部分) TDD 有 7 種不同的配置 (靜態, 固定) 使用 CP 保護 data (CP 長度和 coverage 相關) sub-carrier spacing: 15 KHz  對於 5G NR mmWave 的新問題: 通訊距離過短, 需要 beam-training 的技術 => 需要大量的資訊回報, 較適合 TDD 的架構 Small cell => 覆蓋範圍變小 => 減少 CP 的需求 => 縮短 CP, 或是拉寬 sub-carrier spacing Small cell => 動態的 UL/ DL 的需求 => 使用者少, UL/ DL 的使用需求隨著時間改變 => 動態的 TDD 分配架構 => slot configuration 更寬的頻帶使用, 20MHz => 200 MHz => 寬頻帶來大量的 sub-carrier, 以及 FFT 的需求 => 推升電路複雜度, 並使裝置更耗電 => Bandwidth Part (BWP) => 只接收部分的頻寬 5G NR 的新框架: 動態的 sub-carrier spacing 以 15 KHz 作為一個單位 (numerologies = 0) 15 KHz * 2^n (n = 0, 1, 2, 4) 不同的設定對應到不同的 CP 長度 來自:  https://www.slideshare.net/3G4GLtd/5g-nr-key-features-and-enhancements 5G NR 的新框架: dynamic TDD 模式 3 types ...

[REST] REST API 的 client 程式開發 (node-rest-client)

圖片
在之前的 文章 中, 我們介紹了如何建立一個 json-server, 通常, 這樣的架構是為了作為 RESTful API 的介面, 在文章的安裝步驟中, 事實上, 有暗示此 JSON server 是以 NodeJs 的架構撰寫, 考慮到 NodeJS 對網頁端的支援, 也的確是一個合適的選擇. 傳送到 json-server 的資訊將被放到一個 .json 文件中暫存, 然而, 考慮到 json-server 並非設計作為資料庫使用, 當暫存資料過大時, 就會讓讀取/寫入失去效率, 因此, 我們需要寫一隻程式, 從 json-server 中取值, 處理, 再刪除數值, 架構如下圖所示: 資料處理的架構 當然, 更好一點的架構是直接用 NodeJs 來架設 REST API Server, 但考慮到平台的熟悉程度, 還是先用寫好的套裝程式來改, 應該比較穩定一些, 雖然犧牲不少效率... 在實作範例中, 我們使用 node-rest-client 作為開發套件, node-rest-client 建立在 NodeJs 之上, 可以參考: https://www.npmjs.com/package/node-rest-client 在其官網上, 有許多範例, 因此就不再多述如何安裝 node-rest-client, 以及每一個 REST 函數的呼叫, 在進入程式之前, 只提醒兩件事情: NodeJs 有原生的平行化架構, 因此, 當使用多個 client 時, 要注意每個 client 的執行並不會依照程式的順序. 相同的, 由於平行化架構, global variable 的存取順序可能和預期不同, 要自己想好順序, 並包在同一個 client 中. 因此, 本程式的目標流程有以下三個: 讀取 json 總數 => 取出最後一個 json 物件 => 刪除最後一個 json 物件 以下是所實作的程式: var Client = require('node-rest-client').Client; var client = new Client(); // get the number of json object // refer to the ...

[REST] 網頁開發環境: LAMP + WordPress

圖片
為了建立一個簡單的網頁介面, 我們在 Linux (ubuntu 16.04) 上建立一個標準的網頁開發環境, 也就是所謂的 LAMP: Linux, Apache, MySQL, PHP 這部分滿簡單的, 可以參考:  https://jerrynest.io/ubuntu16-04-wordpress/ 只需要輸入以下指令: sudo apt-get update sudo apt-get upgrade sudo apt-get install lamp-server^ sudo apt-get install phpmyadmin 其中, phpmyadmin 為一個可以透過 php 讀取 mySQL 的介面, 完成安裝之後, 記得把 php 網頁專案放到 /var/www/html/ 底下, 確保外部的存取, 指令如下: cd /var/www ln -s /usr/share/phpmyadmin 完成後, 可以透過 http://yourip:port/phpmyadmin 來查看 mySQL 的設定, 進入網頁後, 帳號為 root, 密碼為安裝 mySQL 時輸入的密碼, 就可以利用圖形化介面操作 mySQL, 接下來, 要建立一個動態網頁的環境, 在動態網頁的架構下, 通常我們將網頁分成三部分: 框架 (html), 排版 (css), 計算 (php), WordPress 是一個基於 PHP 技術的網頁模板, 並提供大量的模板參考, 在參考的文章中, 使用 apt-get 的方式來安裝 WordPress, 但在實測環境中, 因為不是純粹的 localhost 環境, 並透過 NAT 進行 port-to-port 的對應, 因此無法直接套用生成的 config 檔. 因此, 我們參考 WordPress 的教學, 直接對環境進行設定. 教學來自:  https://codex.wordpress.org/Installing_WordPress 此教學分成 5 個部分, 下載 WordPress: wget https://wordpress.org/latest.tar.gz 設置資料庫 (帳...

LTE筆記: 3D beam-forming in 3GPP

圖片
[2D vs. 3D beamforming] 5G NR 中的 beamforming 的技術主要利用天線陣列, 以及控制每一個天線陣列的相位, 來達成波束指向, 因此, 當天線排成一列時, 方向在一個平面上切換, 為 2D beamforming, 當天線排成一個長方形時, 方向可以在一個錐狀空間切換, 為 3D beamforming, 我們可以將各式排放方式以下圖表示: 來自:  http://www.sharetechnote.com/html/5G/5G_MassiveMIMO_FD_MIMO.html 圖片引用的文章中, 有 beamforming 的技術細節, 有興趣的讀者可以閱讀, 以下內容, 主要摘要自:  http://4g5gworld.com/blog/3gpp-stands-fd-mimo-3-d-beam-forming 在 3GPP R13 的規範中, 將 beam forming 的技術推廣至 3D, 此技術可以支援 Active Antenna System (AAS) 技術, 在此技術中, 討論一個 2D 的天線陣列, 擁有 8 個以上的 TXRUs (transceiver units), 每一個 TXRU 擁有獨立的震幅 (amplitude ) 和相位 (phase) 控制, 來自:  http://4g5gworld.com/blog/3gpp-stands-fd-mimo-3-d-beam-forming 而在最近 3GPP 會議 (3GPP TSG RAN #65) 中, 就討論要如何驗證其效能, 該研究分成兩個階段: 在第一階段: 將探討不同數量 TXRU 的影響 (8, 16, 32, 64), 並探討同構與異構在不同情境下的效能, 與可行性研究. 每一個 TXRU 的大小, 間距, 頻率以及極化設定, 並決定如何為其建立虛擬化的模型 在 R12 MIMO 的架構下模擬其效能, 設定為: 8x1 的天線陣列 (水平擺放於基地台頂端), 並分別模擬 Macro (3D-UMa) 和 Urban Micro (3D-UMi) 兩種不同設定 在第二階段: 在Macro (3D-UMa) 和 U...

[REST] 利用 postman 建立測試環境

圖片
此 db.json 文件中, 定義了三種不同的 JSON 資源: posts, comments, profile, 並定義每一種資源的內容, 以 posts 為例, 就是: id, title, author, 要去存取此 JSON 資源最簡單的方式, 就是透過 URL, 但也有一些方便的工具, 例如: postman, 可以讓我們快速開發, 以下為操作範例, 首先, 我們先測試 POST (開立一個新的 JSON 項目), 首先, 我們要先輸入 JSON Server 的位址與對應的 JSON 資源 (http://localhost:3000/posts) 接著, 到 Body 的部分填入數值, 選擇 x-www-form-urlencoded 的格式, 按照定義, 我們在 posts 資源中, 有 title, author 兩個項目, 填入對應數值, 接著, 回到 Params 的項目, 輸入 id 也就是主要的查詢鍵 (key), 在這裡 id 的數值會自動是 posts 中最低數值加一, 在下方的視窗中, 我們就可以看到產生出來的 JSON 格式, 按下送出後, 也可以看到來自 JSON Server 的回應: 201 Created 從此回應也可以用來確認是否程式有問題. 所輸入的資料也就會保存在 db.json 這個文字檔中, 我們可以在 JSON Server 上透過 vim 打開 db.json, 可以看到多出來的一個條目: "posts": [ { "id": 1, "title": "json-server", "author": "typicode" }, { "id": 2, "title": "newline", "author": "jxk" }, { "title": "xxx", ...

[REST] JSON 格式和 RESTful API

圖片
在建立一個簡易的 JSON Server 之後, 我們可以來簡單的測試一下其功能, 在開始之前, 我們先介紹一下 JSON 以及 RESTful API 的一些基本概念, RESTful (REpresentational State Transfer) API 的名稱雖然有點難以解釋, 不過可以簡單的想像這是一個建立在 HTTP 協定上的一種通訊規格, 其特色就是透過 URL (網址, IP 和 port 的組合) 對資源進行操作, 而所謂操作對應到 HTTP 協定中的: GET, POST, PUT, DELETE, GET 為查詢 JSON 資源, 只需要填入正確的 URL, 例如: http://localhost:3000/posts/1, 就是查詢 id 為 1 的 posts JSON 內容, POST 為發布一個新的 JSON 資源,  PUT 為更新一則 JSON 資源, 至於 DELETE 則是刪除某一則 JSON 資源, 這部分, 我們會在下一篇文章中利用 postman 來作操作範例, 在一般的網頁瀏覽中, HTTP 承載的內容格式為 HTML (以靜態網頁為例), 並透過瀏覽器將 HTML 的資源轉成圖文並茂的網頁內容, 但在 RESTful API 中, 承載的內容則為 JSON 或是 XML, 其共通之處在於透過 key-value 的形式儲存資料, 而其中, JSON 又因為其輕量簡便的特性, 而受到廣泛的使用. 在上一篇文章中, 我們以 json-server db.json 開啟一個 JSON Server, 其中 db.json 就隱含了 JSON 的格式, 我們可以將此文件打開, 內容如下: { "posts": [ { "id": 1, "title": "json-server", "author": "typicode" } ], "comments": [ { "id": 1, "body": ...

[REST] JSON Server on Ubuntu 16.04

圖片
沒想到也會有要寫 JSON 的一天... 由於按照網路上的教程都無法好好在 Ubuntu 16.04 環境上, 建立 JSON Server, 因此記錄一下自己安裝的步驟: 以下是參考過的資料: https://andy6804tw.github.io/2018/02/01/json-server-intro/ https://oomusou.io/json-server/intro/ https://medium.com/codingthesmartway-com-blog/create-a-rest-api-with-json-server-36da8680136d https://blog.csdn.net/csqingchen/article/details/48495353 https://stackoverflow.com/questions/47767370/package-npm-has-no-installation-candidate 在教程中, 只要一行指令就可以完成 JSON Server 的安裝: npm install -g json-server 然而實際操作之後, 在 16.04 上安裝會出現以下兩個問題: 第一, 存取權限的限制, 這個部分使用 sudo 就可以解決: sudo npm install -g json-server 第二, nodejs 的版本過舊 (4.2.6), 因此, 使用以下兩個指令: sudo npm install n - g sudo n stable 這兩個指令 (作為版本管理) 來升級 nodejs 的套件, 升級後, 就可以適用上述指令安裝 JSON Server. 完成後, 輸入 json-server db.json 就可以從 localhost:3000 看到 JSON server 的介面,  如下圖所示:  這樣就可以確定完成了 JSON Server 的安裝, 接下來, 我們會進一步去研究怎麼進行簡單的操作, 包含: PUSH, GET, POST 的常見的 RESTful API 操作