陳章寶,鄧運生
(蚌埠學院電子與電氣工程學院,安徽 蚌埠 233030)
基于離散傅里葉變換(DFT)和快速傅里葉變換(FFT)的信號頻譜分析、信號處理算法是數字信號處理課程的重要教學內容。傅里葉變換是數學史上十大經典的算法之一,是信號處理類課程如“信號與系統”“數字信號處理”“數字圖像處理”“語音信號處理”理論分析和應用開發不可或缺的重要工具[1]。DFT在信號及其頻譜分析、系統及其頻率特性分析、系統響應求解等教學中被廣泛應用[2],是進行工程應用開發的基礎。王靜等[3]從信號時頻域的對應關系入手,分析了傅里葉變換各個性質之間的關系。姜恩華等[4]借助時域采樣定理和頻域采樣定理,分析了各種信號傅里葉變換之間的關系和推理過程。趙潔等[5]以二維圖像信號為分析對象,給出了圖像頻譜與內容之間對應關系的教學案例設計。
在數字信號處理課程中對傅里葉變換的介紹非常詳盡透徹,課程內容包括四種傅里葉變換(CTFT、CTFS、DTFT、DTFS)、離散傅里葉變換(DFT)、快速傅里葉變換(FFT),算法的代碼實現到工程應用[6],構成了一個完整的體系。本文從連續周期信號的傅里葉級數引入四種信號(連續周期、連續非周期、離散周期、離散非周期)的傅里葉變換,再到工程中普遍應用的DFT及其快速算法FFT,給出其理論推導和代碼實現的教學案例,最后給出傅里葉變換在語音信號頻譜分析、數字圖像信號頻譜分析的教學案例設計。
首先,從連續周期信號這一簡單概念開始,“連續周期信號(方波信號、三角波信號等)可以分解為不同頻率(直流分量、基波分量、各次諧波分量)正弦信號的加權疊加”是學生初次接觸的傅里葉變換的概念。以周期方波信號(周期T=1 s,脈沖寬度為0.5,幅度A=2)為例,如圖1(a)所示,其三角函數形式的傅里葉級數展開式見式(1),其模擬角頻率ω0=2×π/t,各正弦項的系數即為其傅里葉級數。
(a)方波信號
(1)
借助MATLAB進行可視化,方波信號及其合成圖如圖1所示。
通過仿真案例分析,學生可以直觀地看到方波信號可以分解為直流分量、基波分量和各次諧波分量,以及合成原信號過程的可視化效果。隨著諧波次數的增加,合成波形越來越接近于原信號波形。此案例也是介紹Gibbs現象的最佳案例,如圖1(b)和(c)所示,在信號不連續點處,有限項諧波合成出現了約9%的起伏峰值,說明在連續周期信號的不連續點處,只能滿足能量意義下的收斂,不滿足一致收斂。
傅里葉變換給出了信號的時域和頻域之間的變換關系,嚴格意義上說,自然界的信號皆為連續非周期信號,某些具有節奏感或頻率相對固定的信號也可以看作是周期信號,現代信號處理系統都是由計算機實現的,數字信號處理系統需要對自然信號進行采樣,得到離散信號并進行處理。根據信號在時域的四種表現形式,對應有四種不同的傅里葉變換,分別為連續時間傅里葉變換(Continuous Time Fourier Transform,CTFT)、連續時間傅里葉級數(Continuous Time Fourier Series,CTFS)、離散時間傅里葉變換(Discrete Time Fourier Transform,DTFT)、離散時間傅里葉級數(Discrete Time Fourier Series,DTFS),其傅里葉正變換如式(2-a)至(2-d)所示。
(2-a)
(2-b)
(2-c)
(2-d)
在教學過程中,學生需要掌握四種變換的數學概念、物理意義,才能深刻理解傅里葉變換,從數學角度考慮,傅里葉變換實現信號的時域表達函數x(·)和頻域表達函數X(·)的相互轉換,時域函數自變量為t(連續信號)或n(離散信號),頻域函數自變量為Ω(模擬角頻率)、ω(數字角頻率)或k(代表離散,實際為kΩ0或kω0);每個變換的核函數不同,核函數Φ(·)是一個包含了時域函數和頻域函數兩個函數自變量的函數;傅里葉變換表達式為積分或求和運算,如果公式右邊為連續函數,則傅里葉變換表達式為積分運算,如果公式右邊為離散函數,則傅里葉變換表達式為求和運算。
在物理意義上,四種傅里葉變換不是并行關系,而是依次出現的,其解析過程如圖2所示,傅里葉變換的大部分知識點都可以聯系該圖進行講解。
圖2 五種傅里葉變換關系圖
(ii)CTFT到DTFT,信號的CTFT變換中,信號的時域函數和頻域函數皆為連續函數,要用計算機對信號的時域和頻域函數進行分析,必須對連續函數離散化,時域函數抽樣前要求進行抗混疊低通濾波,這里進行時域抽樣定理分析;信號時域離散化導致其頻域函數周期化,所以頻域函數X(ejω)為一個周期為2π的連續函數,其傅里葉變換為DTFT,如式(2-c)所示。
(3)
DFT運算的時域和頻域函數皆為長度為N點的序列,為傅里葉變換的計算機實現提供了極大的方便和可能。自然信號傅里葉變換的計算機實現的本質是DTFS,實現的方法是DFT,DFT運算隱含周期性,這在DFT運算原理和性質教學中是尤其要強調的內容。
DFT運算中時域函數x(n)和頻域函數X(k)皆為長度為N的離散序列,DFT運算如式(3)所示,可以通過矩陣運算實現,如式(4)所示。
X=WN·x,
(4)
其中,WN為N點DFT運算的變換矩陣。
由DFT變換表達式到變換矩陣有一系列的推導過程,教學過程中要進行嚴格的理論推導,讓學生了解由DFT運算表達式到程序實現的過程,這里直接給出其變換矩陣,如式(5-a)和(5-b)所示。
(5-a)
(5-b)
根據式(5-a)(5-b),進行DFT運算的MATLAB編程,矩陣運算效率高,代碼非常簡潔,示例代碼及其注釋如下:
function [xk] = dft(xn) %DFT函數定義
N = length(xn); %獲取x長度
N = 0∶1∶N-1; %獲取變換矩陣WNnk
K = 0∶1∶N-1;
WN = exp(-j*2*pi/N);
Nk = n’*k;
WNnk = WN.^nk;
Xk = WNnk*xn; %矩陣乘法實現DFT運算
(a)x(n)波形
圖3中序列取前200點進行顯示,圖3(a)為時域的隨機序列,圖3(b)為通過矩陣乘法實現DFT獲得的幅度譜,圖3(c)為FFT運算獲得的幅度譜,可見隨機信號頻譜在整個頻率軸上為均勻頻譜。通過對比實驗可以發現,圖3(b)和(c)的波形完全相同,說明DFT和FFT運算結果完全相同。對運算進行計時結果顯示,DFT運算時間為34.397 1 s,而FFT運算時間為0.000 268 5 s,運算速度大大提升。通過運算速度對比實驗,使學生對FFT如何實現快速運算產生了極大的興趣。
FFT運算理論推導復雜,利用核函數的周期性、可約性、共軛對稱性和一些特殊點的值,實現將長序列變為短序列的DFT運算,以降低運算次數,核心運算是蝶形運算,在FFT知識點教學中重點介紹DIT-FFT算法推理及其代碼實現過程,N=8點序列的DIT-FFT運算的信號流如圖4所示。
圖4 DIT-FFT蝶形運算流圖
function xk = ditfft(xn) %DIT-FFT函數定義
%初始化:補零,倒位序,定義WN
for m = 1∶L %第m級運算
for n =1∶ (2.^(L-m)) %蝶形塊運算
for o = 1∶2.^(m-1)%蝶形運算
循環體:計算參數r
循環體:蝶形運算
end
end
end
課堂教學中,可以設計如上文3.1節的相似實驗,進行DFT、DIT-FFT、FFT的對比實驗,實驗結果相同,計算時間分別為34.397 1 s、0.000 865 s、0.000 268 s,說明MATLAB內置函數FFT運算速度最快,借此引導學生學習基4FFT算法、混合基FFT算法等更加快速高效的傅里葉變換算法。
傅里葉變換在信號及其頻譜分析中應用廣泛,綜合性仿真案例教學中,對于一維信號可采用語音信號及其頻譜分析的仿真案例教學。運用MATLAB函數audiorecorder()驅動計算機聲卡進行語音信號采集[8],分別采集了男聲和女聲“好了”兩個字的語音信號,采樣頻率為11 025 Hz,截取采樣點數為7 500點,利用FFT求其頻譜,信號時域波形及其頻譜如圖5所示,圖中顯示0~11 025/2(折疊頻率)之間的頻譜。
(a)女聲時域波形
從圖5可以看出,男女聲的時域波形沒有什么區別,但是從其頻譜圖可知,男女聲信號的頻譜主要分布于50~2 600 Hz之間,女聲信號的頻譜主要分布在1 000 Hz以上,分布范圍較寬,而男聲信號的頻譜主要分布在1 000 Hz以下,分布范圍較窄,3 000 Hz以上能量較低的部分頻譜應為語音錄制時的噪聲,可以通過低通濾波濾除。
灰度圖像是典型的二維離散信號,二維信號的傅里葉變換的實質是分別在每一個維度上進行一維FFT運算,二維傅里葉變換經常用于圖像譜分析,圖像譜是將圖像灰度值分解為不同頻率和方向的正弦平面波的加權疊加。圖像的空間域增強是實現圖像處理、特征提取和模式識別的基礎,傅里葉變換實現了從頻率域進行圖像增強的重要手段。圖像頻譜的低頻部分反映了圖像的背景,即灰度變化較為緩慢的部分,高頻部分反映了圖像的邊緣和細節,即灰度變換較快的部分;圖像幅度譜反映了圖像的灰度信息,而相位譜反映了圖像的結構信息[9],這些都可以通過如圖6所示的教學案例進行說明。
圖6 圖像幅度譜和相位譜關系
通過交換人和貓的圖像的相位譜合成新的圖像,其案例實現過程為:①用二維傅里葉變換分別獲取人和貓圖像的頻譜;②提取兩個圖像的幅度譜和相位譜;③交換相位譜,合成兩個新的圖像頻譜矩陣;④對兩個圖像頻譜矩陣進行二維傅里葉反變換,取絕對值;⑤顯示變換后的圖像如圖6(c)和(d)所示。由圖6可以明顯看出,相位譜決定了圖像的結構信息。這也可以讓我們聯想到,在深度學習用卷積神經網絡進行貓狗分類的實驗中,可以通過圖像的相位譜矩陣作為輸入信號進行貓狗的分類識別。
離散傅里葉變換是數字信號處理類課程的重要教學內容,需要從數學概念、物理意義和工程應用等方面深刻理解傅里葉變換及其在信號頻譜分析中的應用。本文通過理論分析并結合代碼實現,運用MATLAB軟件進行一系列可視化教學案例設計。通過仿真案例教學,使學生掌握傅里葉變換嚴謹的數學推導及其代碼實現過程,真正理解信號頻譜的概念及其在信號分析和處理中的應用,激發了學生的學習興趣,提升了學生的理論分析能力和工程應用開發能力。