4. 傅立葉轉換
傅立葉級數為法國數家傅立葉(Joseph Fourier)所提出的三角級數,可以將任何週期函數分解為 sin() 與 cos() 函數的集合,也就是對週期波進行分解,之後可透過傅立葉轉換(Fourier Transform)將函數轉換為另一個函數表現形式。
4.1 傅立葉級數定義(Fourier Series)
若函數 x(t) 定義於時間區間−L≤t≤L
則傅立葉級數為:
x(t)=a0+∑∞n=1[ancos(nπLt)+bnsin(nπLt)]其中:
a0=12L∫L−Lx(t)dtan=1L∫L−Lx(t)cos(nπtL)dtbn=1L∫L−Lx(t)sin(nπtL)dtn=1,2,…
4.2 複數傅立葉級數(Complex Fourier Series)
參考Euler's Formula
ejt=cos(t)+jsin(t)cos(t)=12(ejt+e−jt)sin(t)=12j(ejt−e−jt)
則:
x(t)=∞∑−∞cnejntcn=12π∫π−πx(t)e−jntdt
範例
理想方波函數定義為
δ[n]={−1,if−1<t<01,if0≤t<1
求函數的傅立葉級數
解法
a0=12L∫L−Lx(t)dt=∫1−1x(t)dt=∫0−1(−1)dt+∫10(1)dt=0an=1L∫L−Lx(t)⋅cos(nπtL)dt=∫1−1x(t)⋅cos(nπt)dt=∫0−1(−1)⋅cos(nπt)dt+∫10(1)⋅cos(nπt)dt=[−1nπsin(nπt)]0−1+[1nπsin(nπt)]10=0bn=1L∫L−Lx(t)⋅sin(nπtL)dt=∫1−1x(t)⋅sin(nπt)dt=∫0−1(−1)⋅sin(nπt)dt+∫10(1)⋅sin(nπt)dt=[1nπcos(nπt)]0−1+[−1nπcos(nπt)]10=2nπ−2nπcos(nπ)=2nπ[1−(−1)n]
因此理想方波的傅立葉級數為
x(t)=∑∞n=12nπ[1−(−1)n]sin(nπt)
理想方波的傅立葉級數,若取出部分總和畫圖,可呈現如下圖的效果
下左圖取傅立葉級數前5項總和,下右圖取傅立葉級數前100項總和
可以看到在方波的波峰與波谷部分有跳動現象,稱為Gibbs現象。
繪圖程式如下
import numpy as np
import matplotlib.pyplot as plt
N = eval( input( "Please enter number of terms for partial sum: " ) )
t = np.linspace( -1, 1, 1000 ) # 定義時間陣列
x = np.zeros( 1000 ) # 方波的傅立葉級數
for n in range( 1, N + 1 ):
x += 2 / ( n * np.pi ) * ( 1 - np.power( -1, n ) ) * np.sin( n * np.pi * t )
plt.plot( t, x )
plt.xlabel( 't (second)' )
plt.ylabel( 'Amplitude' )
plt.show( )
4.3 連續時間傅立葉轉換
函數 x(t)
傅立葉轉換:X(ω)=∫∞−∞x(t)e−jωtdt
反傅立葉轉換:x(t)=12π∫∞−∞X(ω)ejωtdω
範例
弦波定義
x(t)=Acos(ω0t)
求傅立葉轉換?
解法
X(ω)=∫∞−∞x(t)e−jωtdt=∫∞−∞Acos(ω0t)e−jωtdt=A∫∞−∞(ejωt+e−jωt2)⋅e−jωtdt=A2[F{ejωt}+F{e−jωt}]=Aπ[δ(ω−ω0)+δ(ω+ω0)]
其中F{ejωt}=2πδ(ω−ω0)上述的傅立葉轉換可畫出下圖
可以看到訊號經過傅立葉轉換後,在頻域會有共軛性
但是在實際應用中,我們並不理會負頻率
此特性要記住,在後續 [5. 頻譜分析]的章節 (待續),
會Demo透過Numpy的FFT計算出的結果也會有這個現象,
然後說明如何在程式中去除負頻率的部分。
4.4 傅立葉轉換性質
時間平移定理 (Time-Shifting Theorem
若 f 為時間函數,且 F 為傅立葉轉換
則:F{f(t−t0)}=F(ω)⋅ejωt0
其中 t0 為平移的時間,且 t0>0頻率平移定理 (Frequency-Shifting Theorem)
若 F 為頻率函數,且 F−1 為反傅立葉轉換
則:F−1{F(ω−ω0)}=f(t)⋅ejω0t
其中 ω0 為平移的時間,且 ω0>0卷積定理
若 f與g 為時間函數,且 F 為傅立葉轉換
則:F{f∗g}=Ff∗Fg
4.5 離散傅立葉轉換 (Discrete Fourier Transform)
現實中在處理資料時型式通常為有限多點的狀況,是對取樣值而非函數來進行處理。在這種情況下我們可透過離散時間傅立葉轉換(DTFT)來處理資料。
若給定離散時間序列
則離散時間傅立葉轉換為:X[k]=∑N−1n=0x[n]⋅e−j2πNkn反離散時間傅立葉轉換為:x[n]=1N∑N−1k=0X[k]⋅ej2πNkn
範例
若數位訊號為:x={1,2,3,4},n=0,1,2,3
其中N=4
求離散傅立葉轉換?
解法
透過離散傅立葉轉換公式
X[k]=∑N−1n=0x[n]⋅e−j2πNkn可求得
X=10,−3+j,0,−3−j
上述習題結果注意幾點
- X[0]為訊號的直流分量 (DC Component)
- X[1]∼X[3]為訊號的交流分量 (AC Component)
- X[1] 與 X[3]互為共軛複數
Ref:
- The Fourier Transform of the Complex Exponential
- 学习探究--实信号与复信号
- 复信号在信号处理中的意义
- 信号处理:<一> 为什么要用复信号
- 從傅立葉級數到快速傅立葉轉換
- 傅立葉級數、傅立葉變換與DFT、FFT之間有何關係?
- THE DFT AND ITS INVERSE RESTATED
- 離散傅立葉轉換
- An Introduction to the Discrete Fourier Transform
- Fourier Transform of Signum Function
- Signals & Systems – Duality Property of Fourier Transform
- 希爾伯特變換
- 常用傅立葉轉換表
- 快速傅里叶变换(FFT)中为什么要“补零”?
- 一幅图弄清DFT与DTFT,DFS的关系
- DFT与DTFT区别是什么?