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(ij,1) 代表矩陣%1 行第 i 列到第 j 列的所有元素。

plot(y(1:50)),title('Noisy time domain signal')

%plot(x,y) 可描繪 xy 相對應的元素圖形,其中陳列 x 為橫%座標,而陳列 y 為縱座標。如果省略 y,只寫成 plot(x) 時,%則是以矩陣 x 元素指標為橫座標,而以 x 陳列為縱座標,%MATLAB 繪圖的功能相當強,可以同時繪多條線,立體圖,

%或是其他各式各標的圖形,您可選取繪圖功能展示來觀察了%解。

Y=fft(y,256);

Pyy=Y.*conj(Y)/256;

Y=[];y=[];

%對於整個矩陣或陳列的運算而言,我們可以直接

%用+-*/等符號來做,而兩個陣列中元素對元素的

%算數運算則前面須加入"."符號,例如:A.*B即代表

%A B 個別元素乘積所得之矩陣。但這裡必須要注意

%兩個矩陣 AB之維度 (DIMENSION)的問題,否則

%會出現錯誤的訊息。在此先將 y 陣列作 FFT,再求出

%頻譜之強度值。最後將兩個陣列:Y 陣列及 y 陣列

%記憶空間釋放。

f=1000/256*(0:127);

plot(f,Pyy(1:128)),title('Power spectral density'),...

xlabel('Frequency (Hz)')

%最後繪出頻譜之圖形

在上例中未曾使用流程控制之指令,如果用其他程式語言來設計,難免要有許許多多的流程控制之指令,其實是因為MATLAB之程式設計太容易了,因此許多情況根本不需費心去安排流程控制方面的問題。MATLAB 之流程控制方面有 forendwhilereturnbreakifelse if else 迴圈,其作法與其他程式語言大同小異,我們將於後面補充說明。


      1.離散時間....  2.離散系統之.... 3.信號取樣.... 4.離散傅氏.... 5.快速傅利葉轉換

                            回首頁  回文字版首頁 上一頁