複數是傅立葉變換演算法中的一個重要概念。複數可以表示為z = a + bi,其中a & b為實數,i是虛數,為x2= -1 的解(因為該式沒有實數解,所以解被認為是虛數)。
下圖顯示了如何用圖形表示複數。您可以通過Argand 圖對複數進行幾何表示。x軸表示複數的實部,y軸表示複數的虛部。
時域和頻域的每個分量都由包含了N個複數點的訊號來描述。每個點都由用於描述訊號分量的實部和虛部組成。有一個應用于現實生活中的電氣工程領域的實例:使用傅立葉變換可以説明我們分析變化的電壓和電流。
快速傅立葉變換(FFT)的過程是將一個包含N個樣本點的時域訊號分解為N個時域訊號,每個時域訊號表示一個樣本點資訊。第二步是計算這N個時域訊號相對應的N個頻譜。最後,將N個頻譜合為一個頻譜。
點擊此處可以找到有關傅立葉變換的更多資訊。
使用傅立葉變換時的一些重要規則如下:
讓我們來看一下下面的代碼,以瞭解在MATLAB中是如何實現傅立葉變換的。
t = 0:1/1000:1-1/1000;
x = sin(2*pi*30*t);
plot(t,x)
從向量t中可以觀察到,點採樣是在1/1000範圍內進行的,因此取樣速率為1000 Hz(1000 1s或 s-1)。您還記得之前的文中提到的取樣速率應該是訊號頻率的兩倍嗎?
下麵的正弦波的頻率為30Hz。
當我們想要進行傅立葉變換時,使用fft(x)指令。
y = fft(x);
f = (0:length(y)-1)*1000/length(y);
plot(f,abs(y))
當我們在頻域中繪圖時,x軸將除以2。
使用傅立葉變換後,我們只需要一半的取樣速率即可觀察到訊號的頻譜分量。
當在正弦訊號上應用FFT時,其唯一的屬性是與時域中所描述的頻率點相對應的頻譜分量,在本例中為30 Hz。
如果將長度指令應用于向量t,則返回:
>> length(t)
ans =
1000
如圖 11所示,當我們對所有點進行繪製時,可以觀察到一個有趣的現象:970 Hz(1000-30 Hz)處還有一個頻譜分量。這意味著y軸以500 Hz為中心發生了鏡像翻轉,對應了取樣速率除以2的結果。
目前為止,我們的項目已經快要完成了。請繼續閱讀下一篇文章來瞭解如何添加失真濾波器使訊號發生變形。然後,我們將在使用MATLAB創建的GUI上繼續對聲音訊號進行處理。