FFTDEMO.M 的重要內容及說明 :
t=0:.001:.25;
x=sin(2*pi*50*t)+sin(2*pi*120*t);
y=x+2*randn(size(t));
x=[];t=[];
%我們先建立 t 陣列,再利用 t 陣列建立 x 信號陣列,其組成
%為 50Hz 及 120Hz 正弦波信號,然後再加入雜訊,令其為
%y。最後將兩個陣列:t 陣列及 x 信號陣列記憶空間釋放。在
%命令列的結尾如果我們加入 ";" 符號,則執行的結果不會列
%印在螢幕上,這點在進行大規模的計算時,可以節省不少時
%間。
%":" 冒號是一個相當重要的符號,它可代表全部的或從這裡到%那裡的意思,例如:x(i,:)代表矩陣 x 的第 2 列所元元素。%x(:,;) 代表矩陣 x 的第 j 行所有元素。 x(i:j,1) 代表矩陣%第1 行第 i 列到第 j 列的所有元素。
plot(y(1:50)),title('Noisy time domain signal')
%plot(x,y) 可描繪 x和 y 相對應的元素圖形,其中陳列 x 為橫%座標,而陳列 y 為縱座標。如果省略 y,只寫成 plot(x) 時,%則是以矩陣 x 元素指標為橫座標,而以 x 陳列為縱座標,%MATLAB 繪圖的功能相當強,可以同時繪多條線,立體圖,
%或是其他各式各標的圖形,您可選取繪圖功能展示來觀察了%解。
Y=fft(y,256);
Pyy=Y.*conj(Y)/256;
Y=[];y=[];
%對於整個矩陣或陳列的運算而言,我們可以直接
%用+-*/等符號來做,而兩個陣列中元素對元素的
%算數運算則前面須加入"."符號,例如:A.*B即代表
%A 和B 個別元素乘積所得之矩陣。但這裡必須要注意
%兩個矩陣 A與 B之維度 (DIMENSION)的問題,否則
%會出現錯誤的訊息。在此先將 y 陣列作 FFT,再求出
%頻譜之強度值。最後將兩個陣列:Y 陣列及 y 陣列
%記憶空間釋放。
f=1000/256*(0:127);
plot(f,Pyy(1:128)),title('Power spectral density'),...
xlabel('Frequency (Hz)')
%最後繪出頻譜之圖形
在上例中未曾使用流程控制之指令,如果用其他程式語言來設計,難免要有許許多多的流程控制之指令,其實是因為MATLAB之程式設計太容易了,因此許多情況根本不需費心去安排流程控制方面的問題。MATLAB 之流程控制方面有 for,end,while,return,break,if,else if 及 else 迴圈,其作法與其他程式語言大同小異,我們將於後面補充說明。
1.離散時間.... 2.離散系統之.... 3.信號取樣.... 4.離散傅氏.... 5.快速傅利葉轉換