發表文章

[Note] 在 ubuntu 上用 python 連接 mySQL

參考:  https://www.opencli.com/perl/python-install-mysqldb 和 Java, C 引入 library 的方法不同, 對 python 而言, 所使用的套件需要先安裝 (如這篇文章), 或是, 將 make 好後的檔案放入指定路徑 (如 libsvm 的方法), 在這篇文章中, 使用 pip 的方式, 安裝連接 mySQL 的套件, 因此, 第一個步驟, 就是安裝或是升級 pip: $ apt-get install python-pip $ pip install -U pip 如果在升級 pip 後, 出現以下錯誤: Traceback (most recent call last):   File "/usr/bin/pip", line 9, in <module>     from pip import main ImportError: cannot import name main 需要修改 /usr/bin/pip 中的變數為: from pip import __main__ if __name__ == '__main__':     sys.exit(__main__._main()) 接著, 安裝必要套件與 python 插件: $ apt-get install python-dev libmysqlclient-dev $ pip install MySQL-python 我們一樣寫一隻簡單的程式來操作 mySQL database, 參考自:  http://www.runoob.com/python/python-mysql.html import MySQLdb db = MySQLdb.connect("localhost", "USERNAME", "PASSWORD", "DB_NAME", charset='utf8' ) cursor = db.cursor() cursor.execute("SELECT VERSION()...

[Note] 在 ubuntu 上以 python 執行 libsvm

參考:  https://blog.csdn.net/letsseehow/article/details/10483729 首先, 利用 wget 下載 libsvm, 並解壓縮, 下載網址請參照 libsvm 的官網:  https://www.csie.ntu.edu.tw/~cjlin/libsvm/ 或是直接用此連結: libsvm連結 假設解壓縮完的資料夾路徑為: ~/libsvm-3.23 需要 make 兩次, 一次在 ~/libsvm-3.23, 另一次在 ~/libsvm-3.23/python/, 完成後, 應該可以找到: ~/libsvm-3.23/libsvm.so.2 把檔案移到 python2.7 的資料夾下, 指令如下: sudo cp ~/libsvm-3.23/python/*.py /usr/lib/python2.7/dist-packages/ sudo cp ~/libsvm-3.23/libsvm.so.2 /usr/lib/python2.7/ 接著, 我們來寫一個簡單的 SVM 測試程式: from svmutil import * from svm import * y, x = [1,-1], [{1:1, 2:-1}, {1:1,2:1}] prob  = svm_problem(y, x) param = svm_parameter('-t 0') model = svm_train(prob, param) yt = [1] xt = [{1:1, 2:-1}] p_label, p_acc, p_val = svm_predict(yt, xt, model) print(p_label) 其中, y 是 label, x 是分類輸入, 舉例來說: {1:1, 2:-1} 代表有兩個 feature, 第一個數值為 1, 第二個數值為 -1, svm_parameter 為 SVM 所用到的參數, 請參照 libsvm 的說明, yt, xt, 則是用來 testing 的資料, 執行結果如下: $ python svmtest.py * optimization finished,...

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", ...