初探Matlab - 音樂訊號分析與檢索 第一週

Posted by JSON on March 9, 2016

安裝Matlab不在此贅述,執行Matlab可用以下指令查看版本:

version
ver

version僅印出Matlab版本號,而ver將連同各個Toolbox版本號一起印出。

bench指令可用來測試電腦速度:

matlab benchmark

使用LU分解、傅立葉轉換、2D 3D rendering…等計算所需花費的時間來測試速度,數值越小表示計算越快。

Matlab基本知識

在命令視窗可直接輸入計算式按下Enter就可以算出結果,trivial..不多談。

  • 若無指定變數儲存計算結果,Matlab預設會將計算結果存放在ans變數。 ans variable
  • 在計算式的結尾加入分號;可避免計算結果的印出。
  • 不必事先宣告變數,預設的資料型態為Double佔8byte儲存
  • 註解:%單行註解%{區塊註解...%}
  • x = [1 2 3] 製造向量,x = [1 2; 3 4] 製造矩陣
  • x'x矩陣的轉置transpose
  • 透過指定值為空向量,來達到刪除元素或刪除列、欄的需求,如:
    • x(3)=[] 刪除向量的第三個元素
    • x(2,:)=[] 刪除矩陣的第二列
  • 常用向量計算函數:min, max, mean, sum, sort
  • help指令可用來查詢指令的用法,例如:help mean
  • lookfor用來尋找未知的指令,待找出指令名稱後,再利用help指令
  • which可用來查找指令檔案所在的路徑,例如:which mean
  • whoswho可用來檢視工作空間的變數。
  • tic;...;toc可用來測量執行速度,例如:tic;lu(magic(10));toc;

迴圈、流程控制

>> for i=1:5
fprintf('%d\n', i^2);
end
1
4
9
16
25

由於for會迭代column,所以也可以指定成為matrix,如此i每次會拿到向量:

>> for i=magic(3)
fprintf('%d\n', sum(i));
end
15
15
15

while, if…,trivial..不多談

.m檔案

副檔名.m為matlab程式檔,分成ScriptFunction兩類, Script即是把想執行的指令依照順序寫在檔案裡,因此執行過程的變數均會保留在工作空間, 而Function只有輸出變數被保留,其它在function內的變數隨執行結束後消失, 可用Scope的觀念去想。習慣function應與檔案同名。

% myFunc.m
function out=myFun(n)
out=prod(1:n);

即可在命令視窗執行myFun(5)

在撰寫程式碼的時候盡量控制單行不要超過一定寬度,可利用...來換行,例如:

blackList = find(ismember(uniqueArtists, ...
    {char([32769 27468]) char([19981 35443]) 'unknown'}));

.m檔內使用特殊字元

.m檔內無法存放特殊字元,即使是註解都會在存檔後變成問號,可能會遇到的問題例如: 比較一個含有中文的字面字串。其中一種解決方法是先將特殊字元字串轉換成unicode整數,如下:

strcmp(str,'中文字串');

這能夠在命令視窗中執行,但若想寫成function存成檔案後再重新開啟,會發現中文字串四個字變成問號,使用 Unicode code converter 先將文字轉換成Decimal code points,再以char轉換回字串:

strcmp(str,char([20013 25991 23383 20018]));