標籤

C++ (12) Linux (6) MacOSX (4) Makefile (3) Matlab (3) Ubuntu (3) Android (2) C (1) Refactoring (1)

2012年3月28日 星期三

[Matlab] 函式大全

最近因為通訊實驗要跑模擬
只好再度喚起那塵封已久的Matlab

Matlab的說明文件寫的非常詳細
只要知道要呼叫哪個函式、使用哪個指令

在Command Window上輸入後
把游標移上去按F1就可以呼叫出超級強大的說明文件

不過話雖是這麼說
最常遇到的問題不是有了指令不會用
而是根本不知道要用哪個指令
所以我決定把我知道常用的指令都給它記下來

基本指令:
normrnd(mu, sigma)       % 透過Normal Distribution產生random numbers
a = load(filename)          % 開啟一個檔案並存到a(幾乎什麼類型都可以)

plot(x, y)                       % 畫圖
a_double = +a_logical    % 把由logical(TRUE/FALSE)組成的變數轉成double


logical(x);                      % 把x的資料型態轉成boolean
double(x);                      % 把x的資料型態轉成double
uint8(x);                        % 把x的資料型態轉成uint8
uint16(x);                      % 把x的資料型態轉成uint16
uint32(x);                      % 把x的資料型態轉成uint32
uint64(x);                      % 把x的資料型態轉成uint64

矩陣運算:
zeros(m, n)                    % 產生一個m x n 的零矩陣(各元素皆為0)
[1:0.1:10]                     % 產生一個由1到10,間隔為0.1的陣列

N = zeros(10, 8);
X = N(j,:);                     % X為矩陣N的第j列,共有8個元素(橫向)。
Y = N(:,k);                     % Y為矩陣N的第k欄,共有10個元素(縱向)。
m'                                % 取得矩陣m的轉置矩陣
[-10:10] >0               % 產生一個unit step vector。從時間t=-10到t=10。(注意:變數為logical,無法作數字運算)
linspace(a, b, n);             % 產生一個將[a,b]分成n等分的向量(含a和b)。若不指定n則預設為100等分。linspace是linearly spaced的意思。
例如:linspace(0, 100, 101)會得到[0 1 2 3 ... 100]剛好共101個元素。但若是用linspace(0, 100, 100)則會得到[0 1.0101 2.0202 ...100.0000]。


集合運算:
[註:雖然感覺上做研究跑模擬用到集合的情況少之又少,但其實很多資料結構的存取都可以透過集合的運算來達成]
setdiff(A, B)                    % 求出A和B的差集(也就是在A集合裡但不在B集合裡的元素)。可以透過此方法來完成array的erase功能,例如:setdiff(1:5, 3)會得到[1 2 3 4 5]。在這補充一個小撇步,erase也可以用空集合的一寫小技巧來完成,例如:x = [1 3 2 8 4 6],你想把第四個元素8從x中移除掉,可以直接令第四個元素為空白:x(4) = []。
union(A, B)                     求出A和B的聯集



時間函數:
tic(); toc();                     % 顯示tic()和toc()間,總共花多少時間。

數學函數:
abs(x);                          % 求x的絕對值
round(x);                       % 將x四捨五入
ceil(x);                           % 求x的上高斯(比x大的最小整數)
floor(x);                         % 求x的下高斯(比x小的最大整數)

圖像處理:
imwrite(A, filename);      % 將陣列A輸出成圖片。(格式Matlab會自行從附檔名中判定)
saveas(n, filename);       % 將figure n輸出成圖片。(格式Matlab會自行從附檔名中判定)
imread(filename);            % 將圖片讀入並回傳pixel array。(格式Matlab會自行從附檔名中判定)


類Terminal指令:
ls, cd, pwd, mkdir...      % 同Linux/Unix 的Terminal指令。
copyfile(src, dest)          % 等同於Linux下的cp。
rmdir dir_name              % 移除目錄。等同於Linux下的rm -r。

頻譜分析:
freqs(a, b);                    % 畫出以多項式a為分母,多項式b為分子的frequency response
freqz(h);                        % 畫出以h為impulse response的系統,其frequency response。(相當於h的頻譜分析)
downsample(x, n)          % n倍down sampling。
例如 x=[1:100],則downsample(x, 2)就會變成[1 3 5 7... 99]。若想要往左shift得到[0 2 4 6...100],可以用downsample([0, x], 2)。
pwelch(x);                     % 透過Welch's method求出訊號x的PSD(Power Spectral Density

Matlab右下角的
Start > Toolboxes > Signal Processing > Filter Design & Analysis Tool (fdatool)

開啟後,選擇工具列的
File > Import Filter from Workspace

若設計完Filter後,想要進一步觀察Filter的各個性質,可以選擇工具列的
View > Filter Visualization Tool (fvtool)。

沒有留言:

張貼留言