一、實驗目的
(1)加深對快速傅里葉變換(FFT)基本理論的理解。
(2)了解使用快速傅里葉變換(FFT)計算有限長序列和無限長序列信號頻譜的方法。
(3)掌握用MATLAB語言進行快速傅里葉變換時常用的子函數。
二、實驗涉及的MATLAB子函數
(1)fft
功能:一維快速傅里葉變換(FFT)。
調用格式:y=fft(x);利用FFT算法計算矢量x的離散傅里葉變換,當x為矩陣時,y為矩陣x每一列的FFT。當x的長度為2的冪次方時,則fft函數采用基2的FFT算法,否則采用稍慢的混合基算法。
y=fft(x,n);采用n點FFT。當x的長度小于n時,fft函數在x的尾部補零,以構成n點數據;當x的長度大于n時,fft函數會截斷序列x。當x為矩陣時,fft函數按類似的方式處理列長度。
(2)ifft
功能:一維快速傅里葉逆變換(IFFT)。
調用格式:y=ifft(x);用于計算矢量x的IFFT。當x為矩陣時,計算所得的y為矩陣x中每一列的IFFT。
y=ifft(x,n);采用n點IFFT。當length(x)<n時,在x中補零;當length(x)>n時,將x截斷,使length(x)=n。
三、實驗原理
(1)用MATLAB提供的子函數進行快速傅里葉變換
從理論學習可知,DFT是唯一在時域和頻域均為離散序列的變換方法,它適用于有限長序列。盡管這種變換方法是可以用于數值計算的,但如果只是簡單的按照定義進行數據處理,當序列長度很大時,則將占用很大的內存空間,運算時間將很長。
(2)快速傅里葉變換是用于DFT運算的高效運算方法的統稱,FFT只是其中的一種
FFT主要有時域抽取算法和頻域抽取算法,基本思想是將一個長度為N的序列分解成多個短序列,如基2算法、基4算法等,大大縮短了運算的時間。
MATLAB中提供了進行快速傅里葉變換(FFT)的子函數,用fft計算DFT,用ifft計算IDFT。
四、實驗任務
(1)?認真閱讀實驗原理,明確本次實驗任務,讀懂例題程序,了解實驗方法,結合基本原理理解每一條語句的含義。
(2)運行例題程序,編寫實驗程序。
(3)列寫調試通過的實驗程序,打印或描繪實驗程序產生的圖形和數據。
五、實驗程序及運行結果
(1)已知一個長度為8點的時域離散信號,n1=0,n2=7,在n0=4前為0,n0以后為1。對其進行FFT變換,作時域信號及DFT、IDFT的圖形。
MATLAB程序:
n1 = 0;
n2 = 7;
n0 = 4;
n = n1:n2;% 創建時域信號的時間序列
N = length(n);% 計算序列長度
xn = (n - n0) >= 0; % 建立時域信號,使用邏輯索引創建單位階躍序列
% 顯示時域信號
subplot(2, 2, 1);
stem(n, xn);
title('x(n)'); % 設置標題
% 計算信號的快速傅里葉變換(FFT)
k = 0:N-1;
Xk = fft(xn, N);
% 顯示頻域信號的幅度
subplot(2, 1, 2);
stem(k, abs(Xk));
title('X(k) = DFT(x(n))'); % 設置標題
% 使用逆快速傅里葉變換(IFFT)計算信號的IDFT
xn1 = ifft(Xk, 'symmetric'); % 指定'symmetric'選項以獲得實數結果
% 顯示逆變換后的時域信號
subplot(2, 2, 2);
stem(n, xn1);
title('x(n) = IDFT(X(k))'); % 設置標題
運行結果:
六、實驗心得
?在實驗中,我對FFT的基本理論有了更深入的理解,并學習了如何使用MATLAB進行快速傅里葉變換。掌握fft和ifft函數來分析信號的頻譜特性,讓我對信號處理的頻率域分析方法有了更加全面的認識。實驗中對FFT和IFFT的應用,以及觀察變換結果的過程,讓我對信號的頻域特性分析技術有了更加深刻的理解。