這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。
在第3部分中,我們的目標(biāo)是了解如何將正弦信號(hào)從時(shí)域轉(zhuǎn)換到頻域。這個(gè)操作過(guò)程很重要,因?yàn)槟梢砸源肆私庠陬l率范圍內(nèi)可以確定多少信息。例如,ECG(心電圖)中如果僅有時(shí)域信號(hào),信息量是不夠的,因?yàn)樗话穗S時(shí)間變化的心跳記錄(即信號(hào))。但是,在ECG中補(bǔ)充頻域分析就能夠提供一段時(shí)間內(nèi)信號(hào)幅度變化發(fā)生次數(shù)的有關(guān)信息。頻域信息以此方式展示了在一定頻率范圍內(nèi),信號(hào)在每個(gè)給定的頻率帶是如何分布的。使用傅里葉變換(FT)可以完成時(shí)域和頻域之間的信號(hào)轉(zhuǎn)換。
硬件
? Arduino Uno
? 用于Arduino的MAX9812L駐極體麥克風(fēng)傳感器板
軟件
Arduino IDE
步驟 1:傅里葉變換簡(jiǎn)介
我們首先了解一下相關(guān)定義。信號(hào)是“傳遞某種現(xiàn)象的行為或?qū)傩孕畔⒌囊环N函數(shù)?!?時(shí)域表示信號(hào)的幅度是如何隨時(shí)間變化的,而頻域則表示隨頻率變化的幅度頻。讓我們?cè)俅慰匆幌滦碾妶D(ECG)示例。心電圖顯示的是重復(fù)的信號(hào)波,可以觀察到這些信號(hào)波的特征是如何隨時(shí)間變化的(即信號(hào)是如何演化的)。很難對(duì)一段較長(zhǎng)時(shí)間內(nèi)記錄的ECG的每個(gè)重要成分都進(jìn)行分析。在這種情況下,您可以將信號(hào)轉(zhuǎn)換到頻域,并觀察在特定時(shí)間間隔內(nèi)重復(fù)的每個(gè)分量。這就是傅里葉變換的來(lái)歷。
FT也會(huì)在圖像和視頻壓縮中用到。例如,jpg 和 mp3是使用了快速傅里葉變換(FFT)算法的圖像和聲音的數(shù)字格式。由于必須使用模數(shù)轉(zhuǎn)換器將每個(gè)連續(xù)的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),所以需要以特定頻率對(duì)這些信號(hào)進(jìn)行采樣。這樣,我們可以利用離散傅里葉變換獲取離散信號(hào)。
傅里葉級(jí)數(shù)的有趣之處在于,每個(gè)波形都可以寫(xiě)成正弦和余弦的總和,但是具有離散頻率分量。使用TF,我們可以將波形分解為正弦波。
讓我們看一下由多個(gè)正弦波組成的信號(hào)。該圖顯示了一個(gè)來(lái)自現(xiàn)實(shí)世界的具有多個(gè)頻率分量的信號(hào):
圖1:初始信號(hào)
我們將會(huì)通過(guò)下面的所有步驟來(lái)逐步添加正弦波,以確定該信號(hào)是如何形成的。
f1 = 1;
f2 = 0.5;
f3 = 1.5;
f4 = 4;
t = 0:0.01:4;
A1 = 0.5;
A2 = 2.5;
A3 = 7.5;
A4 = 3.5;
x1 = A1*sin(2*pi*f1*t)
x2 = A2*sin(2*pi*f2*t)
x3 = A3*sin(2*pi*f3*t)
x4 = A4*sin(2*pi*f4*t)
x = x1 + x2+ x3+ x4
添加到圖形中的第一個(gè)信號(hào)如下:
figure %Figure 2
subplot(2,1,1)
plot(t,x,t,x1)
subplot(2,1,2)
plot(t,x1)
圖2:形成圖1信號(hào)的第1步
在圖2中,正弦波(底部)被繪制在初始信號(hào)(頂部)中。初始信號(hào)還包含許多其它信號(hào)。我們將嘗試獲取頂部圖形中的藍(lán)色信號(hào),證明任何信號(hào)都可以表示為一些正弦信號(hào)之和。
figure %Figure 3
subplot(3,1,1)
plot(t,x,t,x1+x2)
subplot(3,1,2)
plot(t,x2)
subplot(3,1,3)
plot(t,x1+x2)
以下信號(hào)應(yīng)該盡可能接近原始信號(hào)。在隨后的每個(gè)圖中將具有以下三個(gè)子圖:
1.subplot(3,1,1):在同一坐標(biāo)圖中繪制兩個(gè)圖形,藍(lán)色表示初始信號(hào),由不同頻率的正弦波疊加而成,綠色表示獲得原始信號(hào)之前的所有步驟中所添加信號(hào)的總和。
2.subplot(3,1,2):當(dāng)前步驟中所添加的信號(hào),由另一個(gè)幅度和頻率來(lái)表達(dá)。
3.subplot(3,1,3):信號(hào)總和 – subplot(3,1,1) 中的綠色信號(hào),沒(méi)有重疊部分。
圖3:形成初始圖像的第2步
從圖3中可以看出,信號(hào)已經(jīng)開(kāi)始形成初始信號(hào)的波形。在subplot(3,1,3)中,您可以觀察到形狀由于添加了更多的信號(hào)而發(fā)生了變化。從這一步開(kāi)始,信號(hào)不再是標(biāo)準(zhǔn)的正弦曲線形狀。
figure %Figure 4
subplot(3,1,1)
plot(t,x,t,x1+x2+x3)
subplot(3,1,2)
plot(t,x3)
subplot(3,1,3)
plot(t,x1+x2+x3)
圖4:形成原始信號(hào)的第3步
在圖4中,我們可以觀察到subplot (3,1,3)的信號(hào)幅度是如何演變的。A3 = 7.5 表明,當(dāng)添加多個(gè)信號(hào)時(shí),所得信號(hào)的幅值是由每個(gè)信號(hào)的幅值相加得到的。
figure %Figure 5
subplot(3,1,1)
plot(t,x,t,x1+x2+x3+x4)
subplot(3,1,2)
plot(t,x4)
subplot(3,1,3)
plot(t,x1+x2+x3+x4)
在正弦信號(hào)相加過(guò)程的最后一步中,演示了原始信號(hào)是如何形成的。最后添加的信號(hào)相比于上一步中添加的信號(hào)具有更高的頻率。與上圖相比,我們可以觀察到圖5中的subplot(3,1,3)包含更多的曲線波形。
圖5:形成原始信號(hào)的最后一步
如圖5所示,subplot(3,1,1)的綠色信號(hào)與subplot(3,1,3)的藍(lán)色信號(hào)之間沒(méi)有任何區(qū)別。該示例很重要,因?yàn)樗故玖?b>傅里葉級(jí)數(shù)的邏輯,即將一個(gè)信號(hào)可以描述為不同頻率正弦波之和。
傅里葉變換被用于那些需要在頻域中執(zhí)行的操作(例如濾波)。在頻域中獲得結(jié)果后,我們可以將信號(hào)轉(zhuǎn)換回時(shí)域,以便于在后續(xù)處理中使用。
步驟2:背后的算法
復(fù)數(shù)是傅里葉變換算法中的一個(gè)重要概念。復(fù)數(shù)可以表示為z = a + bi,其中a & b為實(shí)數(shù),i是虛數(shù),為x2-1的解(因?yàn)樵撌經(jīng)]有實(shí)數(shù)解,所以解被認(rèn)為是虛數(shù))。
下圖顯示了如何用圖形表示復(fù)數(shù)。您可以通過(guò)Argand 圖對(duì)復(fù)數(shù)進(jìn)行幾何表示。x軸表示復(fù)數(shù)的實(shí)部,y軸表示復(fù)數(shù)的虛部。
圖6:復(fù)數(shù)的實(shí)部和虛部
時(shí)域和頻域的每個(gè)分量都由包含了N個(gè)復(fù)數(shù)點(diǎn)的信號(hào)來(lái)描述。每個(gè)點(diǎn)都由用于描述信號(hào)分量的實(shí)部和虛部組成。有一個(gè)應(yīng)用于現(xiàn)實(shí)生活中的電氣工程領(lǐng)域的實(shí)例:使用傅里葉變換可以幫助我們分析變化的電壓和電流。
圖7: 傅里葉變換中使用的實(shí)部和虛部展示
快速傅里葉變換(FFT)的過(guò)程是將一個(gè)包含N個(gè)樣本點(diǎn)的時(shí)域信號(hào)分解為N個(gè)時(shí)域信號(hào),每個(gè)時(shí)域信號(hào)表示一個(gè)樣本點(diǎn)信息。第二步是計(jì)算這N個(gè)時(shí)域信號(hào)相對(duì)應(yīng)的N個(gè)頻譜。最后,將N個(gè)頻譜合為一個(gè)頻譜。
點(diǎn)擊此處可以找到有關(guān)傅里葉變換的更多信息。
圖8:時(shí)域分解
使用傅里葉變換時(shí)的一些重要規(guī)則如下:
? 時(shí)域中的點(diǎn)數(shù)等于頻域中的點(diǎn)數(shù)。
? 假設(shè)您有一個(gè)包含DC值的正弦波 – 頻譜中的第一個(gè)點(diǎn)將具有零頻率值(DC值),而下一個(gè)點(diǎn)為正弦頻率。
? 當(dāng)從時(shí)域轉(zhuǎn)為頻域時(shí),可以使用第n個(gè)點(diǎn)的頻率進(jìn)行繪制:f = (n-1) SR/N,其中N為樣本點(diǎn)數(shù)。
? 頻率為f = 1/T,其中T為周期。
讓我們來(lái)看一下下面的代碼,以了解在MATLAB中是如何實(shí)現(xiàn)傅里葉變換的。
t = 0:1/1000:1-1/1000;
x = sin(2*pi*30*t);
plot(t,x)
從向量t中可以觀察到,點(diǎn)采樣是在1/1000范圍內(nèi)進(jìn)行的,因此采樣率為1000 Hz(1000 1s或 s-1)。您還記得之前的文中提到的采樣率應(yīng)該是信號(hào)頻率的兩倍嗎?
下面的正弦波的頻率為30Hz。
圖9:在MATLAB中生成的正弦波
當(dāng)我們想要進(jìn)行傅里葉變換時(shí),使用fft(x)指令。
y = fft(x);
f = (0:length(y)-1)*1000/length(y);
plot(f,abs(y))
當(dāng)我們?cè)陬l域中繪圖時(shí),x軸將除以2。
使用傅里葉變換后,我們只需要一半的采樣率即可觀察到信號(hào)的頻譜分量。
圖10:MATLAB中的fft函數(shù)圖
當(dāng)在正弦信號(hào)上應(yīng)用FFT時(shí),其唯一的屬性是與時(shí)域中所描述的頻率點(diǎn)相對(duì)應(yīng)的頻譜分量,在本例中為30 Hz。
如果將長(zhǎng)度指令應(yīng)用于向量t,則返回:
>> length(t)
ans =
1000
如圖 11所示,當(dāng)我們對(duì)所有點(diǎn)進(jìn)行繪制時(shí),可以觀察到一個(gè)有趣的現(xiàn)象: 970 Hz(1000-30 Hz)處還有一個(gè)頻譜分量。這意味著y軸以500 Hz為中心發(fā)生了鏡像翻轉(zhuǎn),對(duì)應(yīng)了采樣率除以2的結(jié)果。
目前為止,我們的項(xiàng)目已經(jīng)快要完成了。請(qǐng)繼續(xù)閱讀下一篇文章來(lái)了解如何添加失真濾波器使信號(hào)發(fā)生變形。然后,我們將在使用MATLAB創(chuàng)建的GUI上繼續(xù)對(duì)聲音信號(hào)進(jìn)行處理。
審核編輯黃宇
-
數(shù)字信號(hào)
+關(guān)注
關(guān)注
2文章
997瀏覽量
48303 -
傅里葉變換
+關(guān)注
關(guān)注
6文章
443瀏覽量
43118
發(fā)布評(píng)論請(qǐng)先 登錄
進(jìn)群免費(fèi)領(lǐng)FPGA學(xué)習(xí)資料!數(shù)字信號(hào)處理、傅里葉變換與FPGA開(kāi)發(fā)等
[共享] 數(shù)字信號(hào)處理及其MATLAB實(shí)現(xiàn)
數(shù)字信號(hào)處理—理論、算法與實(shí)現(xiàn)
數(shù)字信號(hào)處理
數(shù)字信號(hào)處理的PPT課件合集免費(fèi)下載
數(shù)字信號(hào)處理教程之傅里葉變換與濾波器形狀的資料說(shuō)明

數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn).第3版英文
使用MATLAB進(jìn)行數(shù)字信號(hào)處理-第2部分

評(píng)論