1、回顧傅立葉變換的基本理論

傅立葉變換主要是在幹嘛

透過傅立葉變換,可以將時域訊號分解一系列不同頻率下的正弦/餘弦訊號,如下圖所示:

MATLAB訊號分析與處理---FFT(一)

圖上所示:時域內接近於方波的訊號,透過傅立葉變換後得到的是一系列頻率不同,幅值也不大一致的正弦/餘弦訊號;可以理解為,任意一個時域訊號都可以分解為不同頻率下的正弦訊號,透過傅立葉變換,可以得到他們的頻率成分。

時域圖:橫軸是時間,縱軸是訊號值

頻譜圖:橫軸是頻率,縱軸是該頻率成分訊號的幅值。

將訊號分解為正弦訊號、餘弦訊號有以下好處:

1、正弦訊號往往比原始訊號簡單,更容易研究,且已經充分研究

2、對於線性系統,輸入正弦訊號,輸入仍是正弦訊號,只是幅值和相位會發生變化,但是頻率不會發生變化,這一點很具有工程價值。

3、在頻域上,可以分析到很多在時域圖無法分析到的結果。

傅立葉變換的週期性

MATLAB訊號分析與處理---FFT(一)

連續傅立葉變換(FS):時域非週期連續訊號——頻域非週期連續頻譜

MATLAB訊號分析與處理---FFT(一)

連續傅立葉級數(FT):時域週期連續訊號——頻域非週期離散頻譜

MATLAB訊號分析與處理---FFT(一)

離散傅立葉變換(DTFT):時域非週期離散訊號——頻率週期連續頻譜

MATLAB訊號分析與處理---FFT(一)

離散傅立葉級數(DFS):時域週期離散訊號——頻域週期離散頻譜

由於計算機只能處理離散的資料序列,要求時域和頻域序列都要是離散的,上圖中的四種變換,只有離散傅立葉級數DFS時域和頻域都是離散的,但是又因為DFS處理的均為無窮長的週期序列,也不適合計算機進行處理。不過對DFS進行改造,就能夠得到適合計算機處理的離散傅立葉變換DFT。

DFS--DFT

透過一系列推導。。。。。

MATLAB訊號分析與處理---FFT(一)

DFT--FFT

按照訊號課本里的說法,一個長度為N的序列,用DFT去算,需要進行N*N次運算才可以計算出結果,如果資料量大,處理器光進行DFT計算就需要很多時間,實際應用起來很困難。

因此,又在DFT上面發展出了一種快速演算法FFT, 計算次數可以大大降低,長度為N的序列,FFT運算只要(N/2)log2(N) 次。

FFT只是加快了運算,並不是新的訊號理論。

MATLAB訊號分析與處理---FFT(一)

2、在MATLAB裡進行fft(DFT)計算

MATLAB裡面提供了fft函式來進行DFT變換的數值計算。

clear

clc

close

all

x

=[

1。33

4。2

0。09

-

5。43

1。06

13。11

14。8

-

6。02

1。8

5。1

];

% 離散時間序列 x

N

=

length

x

);

% 計算訊號長度

n

=

0

N

-

1

% 序號

X

=

fft

x

);

% 計算出來的fft是個複數

%% 繪製頻域序列 X 的實部和虛部, 觀察頻域序列 X 的對稱性

figure

subplot

2

1

1

stem

n

real

X

))

% 繪製實部

grid

on

xlabel

‘序號n’

ylabel

‘X 實部’

subplot

2

1

2

stem

n

imag

X

))

% 繪製虛部

grid

on

xlabel

‘序號n’

ylabel

‘X 虛部’

繪製出來的結果如下:

MATLAB訊號分析與處理---FFT(一)

從圖中可以觀察出DFT結果的兩個重要特點:

1、X(0)和X(N/2) 的虛部為零,即結果是個實數。

2、X以N/2為中心,實部偶對稱,虛部奇對稱,即X以N/2為中心,互相共軛。

還是以上述序列為例,資料經過fft計算後,得到的是複數序列,從複數序列我們可以得到幅值和相位角。

%% 幅值和相位角

A=abs(X); %計算幅值

Pha=angle(X); %計算相位角 rad

figure

figure

subplot(2,1,1)

stem(n,A) % 繪製頻域序列 X 的幅值

grid on

xlabel(‘序號 n’)

ylabel(‘X 幅值’)

subplot(2,1,2)

stem(n,Pha) % 繪製頻域序列 X 的相角

grid on

xlabel(‘序號 Seq’)

ylabel(‘X 相角’)

MATLAB訊號分析與處理---FFT(一)

幅值和相角同樣存在著對稱性。

3、頻率刻度計算

上面畫出來的圖,橫座標不是頻率,還不算頻譜圖,需要將橫座標轉換為頻率。

假設上述例子中,十個點都是均勻取樣的,取樣時間間隔是Ts=0。01s,則取樣頻率是100hz,

序列的長度是N=10,則取樣頻率間隔是10hz,頻率範圍是[-50,50]hz, 考慮到負頻率只有統計意義沒有物理意義,捨棄負頻率。

又由於正頻率部分與負頻率部分具有對稱性,故將正負頻率成對合並起來,重新按照正的頻率範圍來繪圖。

Ts

=

0。01

Fs

=

1

/

Ts

%頻率

df

=

Fs

/

N

%頻率間隔

f

=(

0

1

N

/

2

*

df

% 頻率刻度

Y

=

X

1

N

/

2

+

1

);

% 提取正頻率的部分

Y

2

end

-

1

)=

2

*

Y

2

end

-

1

);

% 負頻率合併到正頻

A

=

abs

Y

);

% 計算頻域序列Y的幅值

Pha

=

angle

Y

);

% 計算頻域序列Y的相角 弧度

figure

subplot

2

1

1

stem

f

A

% 繪製頻域序列Y的幅頻圖

grid

on

xlabel

‘頻率 [Hz]’

ylabel

‘幅值’

subplot

2

1

2

stem

f

Pha

% 繪製頻域序列Y的相頻圖

grid

on

xlabel

‘頻率 [Hz]’

ylabel

‘相角’

MATLAB訊號分析與處理---FFT(一)