關(guān)于使用MSGEQ7音頻頻譜分析儀芯片的所有您想知道(但又害怕問到)的信息。
多年來,我已經(jīng)在幾欄中討論過使用MSGEQ7頻譜分析儀芯片的問題,但是我仍然收到問題,因此我認(rèn)為將所有相關(guān)信息集中到一個(gè)位置可能是個(gè)好主意。
音頻響應(yīng)項(xiàng)目
首先,讓我們進(jìn)行場景設(shè)置。假設(shè)我們想創(chuàng)建一些對聲音有反應(yīng)的東西,例如我當(dāng)前的Audio-Reactive Box項(xiàng)目。您可能還記得,這涉及到一個(gè)裝有假真空管的小假古董手提箱。這些燈管將使用三色LED聚寶盆從下面照亮。下圖反映了剛安裝完電子管后盒子的狀態(tài)-下一步是在電子設(shè)備上工作(我將在以后的專欄中進(jìn)行討論)。
如果我們希望我們的項(xiàng)目(在這種情況下為盒子)對外部聲音做出反應(yīng),那么我們將需要一個(gè)麥克風(fēng)。此類項(xiàng)目的一個(gè)很好的解決方案是MEMS駐極體麥克風(fēng)(一種基于靜電電容的麥克風(fēng)),并在分線板(BOB)上配有一個(gè)小型放大器。
選項(xiàng)1:將音頻輸入到MCU中(不進(jìn)行FFT)
一種選擇是將麥克風(fēng)BOB的輸出直接輸入到微控制器(MCU)上的模擬輸入。對于我的大多數(shù)項(xiàng)目,我喜歡使用廉價(jià)而快樂的Arduino Nano,Uno或Mega MCU開發(fā)板。盡管這些在性能上都受到一些限制(8位數(shù)據(jù)總線,16MHz時(shí)鐘,各種內(nèi)存以及不同數(shù)量的輸入/輸出引腳),但我真的很喜歡這些小技巧。
將音頻信號直接饋送到MCU(來源:Max Maxfield)
觀察到我已經(jīng)顯示了七個(gè)從MCU發(fā)出的LED(或LED串)。實(shí)際上,由于我們將要使用基于WS2812的NeoPixels,它們可以菊花鏈連接在一起并且可以單獨(dú)控制,因此我們可以用單個(gè)引腳驅(qū)動(dòng)所有LED,但是顯示7串字符串將使事情變得更加清晰。
理想情況下,對于此設(shè)置,麥克風(fēng)BOB的輸出應(yīng)具有2.5V的DC偏置和5V的pp(峰峰值)擺幅,這與Arduino Nano / Uno / Mega的電源匹配(一個(gè)選項(xiàng)這是來自Adafruit的具有可調(diào)增益的MAX4466)。Arduino使用10位模數(shù)轉(zhuǎn)換器(ADC)。這意味著當(dāng)我們對音頻信號執(zhí)行AnalogRead()函數(shù)時(shí),Arduino會將0至5V之間的輸入電壓映射為0至1023之間的整數(shù)值。
現(xiàn)在,您可能在想,由于我們的LED要求控制值的范圍是0到255,所以這意味著我們需要將ADC的0到1023的值映射到LED的0到255的等效值,但是還不止這些這很復(fù)雜。假設(shè)我們從5Vpp正弦波開始,如下圖(a)所示:
處理正弦波(來源:Max Maxfield)
在這種情況下,如果我們在一定數(shù)量的讀數(shù)上對樣本取平均值,則最終的平均值為511。問題是,如果我們要對4Vpp信號中的多個(gè)樣本取平均值,我們將獲得相同的511值。一個(gè)3Vpp信號,或者…您明白了。
因此,我們需要做的第一件事就是校正信號,如上面的(b)所示。我們可以使用一個(gè)簡單的公式來做到這一點(diǎn),如下所示:如果數(shù)字樣本的值等于或大于512,我們將其保持原樣。如果它的值為511或更低,則將其從1,023中減去。接下來,我們需要消除直流偏置,這是通過從每個(gè)值中減去511來實(shí)現(xiàn)的,如上面的(c)所示。
最后,我們需要將0到511的值映射到LED所需的0到255的值,如上面的(d)所示。我們可以使用Arduino的map()函數(shù)來實(shí)現(xiàn)這一點(diǎn)。另外,我們可以簡單地將0到511的值除以2,或者將它們向右移一位,這兩者將具有相同的效果。(如果BOB的輸出具有不同的DC偏置和/或較小的pp擺幅-例如1.25V的DC偏置和2Vpp擺幅,則可以在軟件中適當(dāng)?shù)刂匦驴s放/預(yù)處理信號。)
使用上述基本設(shè)置,每次采樣時(shí),我們可以從音頻信號中收集到的唯一信息就是其當(dāng)前幅度。關(guān)于驅(qū)動(dòng)我們的LED,我們可以利用這些信息做幾件事。例如,我們可以用相同的顏色驅(qū)動(dòng)所有LED,同時(shí)根據(jù)音頻信號的幅度改變它們的強(qiáng)度?;蛘撸覀兛梢詫⑺蠰ED完全驅(qū)動(dòng),同時(shí)根據(jù)音頻信號的幅度改變它們的顏色。而且,當(dāng)然,我們可以結(jié)合使用這些技術(shù)。
記住我們正在設(shè)想七串(組)LED,另一種可能性是將音頻信號分成七個(gè)“振幅帶”。每次采樣信號時(shí),我們都會決定要點(diǎn)亮哪些LED。如果信號落入最低振幅帶,我們可以簡單地點(diǎn)亮第一串LED。如果信號落入下一個(gè)振幅帶,我們可以僅驅(qū)動(dòng)第二串LED,或者我們可以決定同時(shí)驅(qū)動(dòng)第一串和第二串LED。依此類推,直到信號落入最高振幅帶,此時(shí)我們只能驅(qū)動(dòng)第七串LED,或者我們可以決定驅(qū)動(dòng)所有的LED。而且,當(dāng)然,我們還可以嘗試各種琴弦的振幅和顏色。
選項(xiàng)2:使用FFT軟件將音頻輸入到MCU中
如果我們決定將音頻信號分成單獨(dú)的頻段,事情將變得越來越有趣。例如,在這種情況下,我們可以使用底鼓的節(jié)拍來控制一組LED,而另一組可以響應(yīng)較高的頻率,例如一分錢的汽笛聲。
盡管隨著年齡的增長,我們聽到較高頻率的能力會下降,但是人類的正常聽力范圍會覆蓋20到20,000Hz之間的頻率。假設(shè)我們將0到20,000Hz的范圍分成以63Hz,160Hz,400Hz,1,000Hz,2,500Hz,6,250Hz和16,000Hz為中心的七個(gè)重疊頻段,如下所示:
將音頻信號劃分為七個(gè)頻段(來源:Max Maxfield)
在這種情況下,我們可以使用七個(gè)頻帶的幅度來控制七組LED的強(qiáng)度和/或顏色,但是如何從麥克風(fēng)BOB的音頻信號中提取該頻帶信息呢?
不錯(cuò),一種選擇是使用在MCU上運(yùn)行的軟件算法來實(shí)現(xiàn)FFT(快速傅立葉變換)功能。此功能可用于將我們的信號從其原始時(shí)域形式轉(zhuǎn)換為頻域中的相應(yīng)表示形式。
將音頻信號直接饋送到運(yùn)行SW FFT的MCU(來源:Max Maxfield)
軟件(SW)FFT可能需要計(jì)算,但是如果您真的想走這條路,可以使用許多Arduino FFT庫(有關(guān)更多信息,請參見Adafruit的Piccolo Music Visualizer項(xiàng)目)。
說實(shí)話,如果我想使用軟件FFT的,我可能會使用一個(gè)32位Teensy 3.2(72MHz的的Cortex-M4型)或Teensy 3.6(基于的Cortex-M4F-180MHz的)單片機(jī)開發(fā)板從PJRC,以及出色的音頻FFT庫。但是,我個(gè)人更喜歡使用硬件(HW)FFT替代方案,如下所述。
選項(xiàng)#3:通過MSGEQ7音頻頻譜分析儀提供音頻
讓我們從建議的系統(tǒng)的高級視圖開始。在這種情況下,來自麥克風(fēng)BOB的輸出被饋入一個(gè)名為MSGEQ7的漂亮的8針小芯片,該芯片由一家名為Mixed Signal Integration的公司創(chuàng)建。該音頻頻譜分析儀芯片可與3.3V和5V MCU配合使用,將音頻信號劃分為前面討論的七個(gè)頻段,并以一種易于我們的MCU輕松訪問的形式顯示與這些頻段相關(guān)的幅度數(shù)據(jù)。稍后)。
通過MSGEQ7硬件FFT饋送音頻信號(來源:Max Maxfield)
這種方法的最好之處在于,它可以消除您(和您的MCU)的所有辛苦工作。您要做的就是從MSGEQ7訪問頻帶幅度數(shù)據(jù),然后決定如何使用它來驅(qū)動(dòng)LED。
非常重要:該MSGEQ7數(shù)據(jù)表是不是很有益,因?yàn)槿藗兛赡芟M?,但它意味著該裝置預(yù)計(jì)有0.3Vpp(即300mVpp)擺動(dòng)的音頻輸入。這意味著您必須相應(yīng)地選擇麥克風(fēng)。我將在以后的專欄中討論不同的麥克風(fēng)替代品。就目前而言,我只是注意到我的好友史蒂夫·曼利(Steve Manley)已成功將MSGEQ7與來自SparkFun的男生和女歌手的INMP401 MEMS麥克風(fēng)BOB配合使用(該視頻的鏈接在本專欄的稍后部分將展示史蒂夫的解決方案)。據(jù)說該BOB“在話筒保持臂長并以正常的對話音量進(jìn)行通話時(shí),具有約200mV的峰峰值輸出?!?/p>
介紹MSGEQ7
因此,我們來介紹一下MSGEQ7本身。通孔(LTH)和表面貼裝技術(shù)(SMT)封裝都提供這種小流氓。LTH版本可從SparkFun獲得,價(jià)格僅為4.95美元(也提供MSGEQ7 BOB;我們將在短期內(nèi)返回這些內(nèi)容)
8針MSGEQ7頻譜分析儀芯片和引腳排列(來源:Max Maxfield)
觀察到只有一個(gè)DATA_OUT信號,那么我們?nèi)绾问褂盟鼇碓L問與七個(gè)頻段關(guān)聯(lián)的數(shù)據(jù)?為了回答這個(gè)問題,我們需要考慮一下MSGEQ7內(nèi)部的框圖,如下所示:
MSGEQ7框圖(來源:Max Maxfield)
這種工作方式是,我們使用來自MCU的兩個(gè)數(shù)字輸出來驅(qū)動(dòng)RESET和STROBE信號,并且使用MCU上的模擬輸入來從DATA_OUT信號中讀取值。首先,我們在RESET信號上使用一個(gè)正向脈沖來告知MSGEQ7,我們正在準(zhǔn)備訪問其數(shù)據(jù),然后在STROBE信號上使用一系列的七個(gè)負(fù)向脈沖來讀取與這七個(gè)頻率相關(guān)的數(shù)據(jù)樂隊(duì)。此數(shù)據(jù)表示為0V至5V之間的模擬電壓(對于3.3V供電的MCU /系統(tǒng),則為0V至3.3V),如果是Arduino及其10位ADC,則將轉(zhuǎn)換為0到1023之間的整數(shù)值。
MSGEQ7時(shí)序圖(來源:Max Maxfield)
當(dāng)然,我們會反復(fù)進(jìn)行此操作,從MSGEQ7讀取數(shù)據(jù),然后使用此數(shù)據(jù)來決定我們希望如何驅(qū)動(dòng)LED。下面是一個(gè)示例Arduino函數(shù),用于訪問此數(shù)據(jù)并將其存儲在7個(gè)元素的整數(shù)數(shù)組中,這些整數(shù)稱為bands []:
觀察到我并沒有費(fèi)心在兩個(gè)對RESET信號進(jìn)行脈沖的digitalWrite()語句之間添加延遲,因?yàn)樗恢付樽钚≈禐?00ns(0.1us),該最小值很小,以至于它被固有的延遲所淹沒。函數(shù)調(diào)用自己。
MSGEQ7電路圖和分支電路板
如果計(jì)劃使用單個(gè)MSGEQ7處理單個(gè)(單聲道)音頻流,則要使用的電路圖如下所示:
具有單聲道輸入的單個(gè)MSGEQ7(來源:Max Maxfield)
觀察到C2顯示為0.1uF(該電容器可消除輸入音頻信號中的任何DC偏置)。官方MSGEQ7數(shù)據(jù)手冊中的等效電容器顯示為0.01uF,但這是不正確的。
如果您希望使用單個(gè)MSGEQ7來處理雙(立體聲)音頻流,則可以通過添加一個(gè)額外的22KΩ電阻來修改上圖的輸入,如下所示:
支持立體聲輸入的單個(gè)MSGEQ7(來源:Max Maxfield)
與自己進(jìn)行接線相反,您可以從eBay購買MSGEQ7 BOB。售價(jià)$ 15.95加上運(yùn)費(fèi),這雖然有點(diǎn)貴,但這確實(shí)意味著您可以實(shí)地工作。需要注意的一點(diǎn)是,默認(rèn)情況下,它將附帶5針接頭連接器和立體聲插孔。如果您愿意,賣方將保留這些附件,但您下訂單時(shí)必須要求。
正如您在本視頻中看到的那樣,在Cunning Chronograph中實(shí)現(xiàn)音樂模式時(shí),我使用了一個(gè)帶有雙輸入的MSGEQ7。
在這種情況下,與使用麥克風(fēng)不同,我直接從iPod的耳塞/耳機(jī)插孔中喂入了MSGEQ7。相比之下,正如您在本視頻中看到的那樣,我的好友史蒂夫·曼利(Steve Manley)使用我們之前簡要提到的SparkFun的INMP401 MEMS麥克風(fēng)BOB在他的狡猾計(jì)時(shí)碼表中駕駛了MSGEQ7。
當(dāng)然,對于某些事情(例如我的BADASS顯示器),您想要實(shí)現(xiàn)真正的立體聲功能。在這種情況下,您可以使用兩個(gè)MSGEQ7芯片來處理左右聲道的音頻流(您可以使用MCU的單個(gè)輸出來驅(qū)動(dòng)兩個(gè)MSGEQ7上的RESET引腳;類似地,您可以使用單個(gè)輸出來驅(qū)動(dòng)STROBE引腳)。
通過觀看BADASS顯示器早期原型的視頻,您可以更好地了解所有這些工作原理。
編輯:hfy
-
led
+關(guān)注
關(guān)注
242文章
23847瀏覽量
674215 -
mcu
+關(guān)注
關(guān)注
146文章
17984瀏覽量
367096
發(fā)布評論請先 登錄
使用MSGEQ7頻譜分析儀的技巧和竅門
掃頻頻譜分析儀、矢量信號分析儀及實(shí)時(shí)頻譜分析儀的工作原理及差異

什么是頻譜分析儀
Bird微波射頻頻譜分析儀分析
與 MSGEQ7 一起使用的最佳 MEMS 麥克風(fēng)

使用MSGEQ7和32x8 NeoPixel的頻譜分析儀

實(shí)時(shí)音頻頻譜分析儀開源分享

掃頻頻譜分析儀的結(jié)構(gòu)框圖

使用Arduino制作32波段音頻頻譜分析儀/可視化儀

評論