振蕩信號(hào)的“包絡(luò)”是一條平滑的曲線,概述了其極端情況。我們可以使用這樣的包絡(luò)來(lái)幫助我們控制音頻反應(yīng)產(chǎn)物。
您可能還記得我以前與MEGEQ7相關(guān)的專欄文章“與MSGEQ7一起使用的最佳MEMS麥克風(fēng)”,我們把事情留在了懸崖峭壁上。
我們的想法是,我們要?jiǎng)?chuàng)建動(dòng)態(tài)范圍大的音頻無(wú)反應(yīng)的工件。讓我們假設(shè)工件的輸出包括閃爍的三色LED(在我的項(xiàng)目中,這是一個(gè)相當(dāng)安全的假設(shè))。如果環(huán)境安靜,那么理想情況下,只需在房間的一半處單擊手指或輕聲說(shuō)話,即可觸發(fā)明顯的響應(yīng)?;蛘撸绻覀儽恍[的音樂(lè)轟炸,那么,不是所有的LED都飽和到全開(kāi)狀態(tài),而是如果系統(tǒng)可以繼續(xù)以有意義的方式響應(yīng),那就太好了。
帶有自動(dòng)增益控制的MAX9814我們最后要看的麥克風(fēng)是基于Maxim基于MAX9814的駐極體麥克風(fēng)放大器,帶有自動(dòng)增益控制(AGC)突破板(BOB),Adafruit的價(jià)格僅為7.95美元。該BOB的一個(gè)小問(wèn)題是它輸出具有1.25V直流偏置的2V峰峰值(Vpp)信號(hào),如下所示。
典型的MAX9814輸出(來(lái)源:Max Maxfield,來(lái)自picture.com)
之所以會(huì)出現(xiàn)此問(wèn)題,是因?yàn)槲覀兪褂玫腗SGEQ7音頻頻譜分析儀芯片更喜歡300 mVpp信號(hào)。在我們解決了這個(gè)辦法是一個(gè)分壓器添加到MSGEQ7的輸入。
我們接下來(lái)要考慮的是,除了MAX9814的AGC功能之外,MAX9814 BOB還具有一個(gè)主GAIN輸入。使用此輸入,我們的Arduino(或您選擇的微控制器)可以指示BOB將其主增益設(shè)置為60 dB(1,000),50 dB(?316)或40 dB(100)。為了知道如何以及何時(shí)執(zhí)行此操作,Arduino必須了解正在發(fā)生的事情。因此,除了將MAX9814 BOB的輸出饋送到分壓器的輸入之外,我們還建議通過(guò)未定義的“黑匣子”(我們稱為“電路?”)饋送它。在通往Arduino模擬輸入之一(下圖中的輸入A2)的途中。
擬議的MAX9814 BOB和MSGEQ7實(shí)現(xiàn)(資料來(lái)源:Max Maxfield)
這里的想法是我們需要某種方式讓Arduino計(jì)算出來(lái)自麥克風(fēng)BOB的信號(hào)有多響。如果BOB設(shè)置為40 dB,并且其輸出在一段時(shí)間內(nèi)處于低電平(實(shí)際持續(xù)時(shí)間待定),那么Arduino可以決定將增益提高到50 dB或60 dB。相比之下,如果BOB設(shè)置為60 dB,并且其輸出在一段時(shí)間內(nèi)處于全開(kāi)狀態(tài),則Arduino可以決定將增益降至50 dB或40 dB。
那么Arduino如何確定發(fā)生了什么呢?好吧,我們可以替換“電路?”用一條簡(jiǎn)單的線進(jìn)行阻止,然后在軟件中完成所有這些操作。如果假設(shè)我們?cè)诖a中將模擬引腳A2稱為“ PinMicBob”,則可以執(zhí)行以下操作:
aSig = analogRead(PinMicBob);
aSig = abs(aSig - DC_OFFSET);
在這種情況下,DC_OFFSET先前已定義為256,等于Arduino模擬輸入上的1.25 V,其中0-V至5-V模擬值映射到0至1023的數(shù)字等效值。執(zhí)行后,這將導(dǎo)致Arduino從如下所示波形中的某處“看到”一個(gè)樣本:
已處理的MAX9814輸出(來(lái)源:Max Maxfield,來(lái)自picture.com的波形)
這里的問(wèn)題是僅憑一個(gè)樣本是不夠的。Arduino可以在大聲序列的中間隨機(jī)擊中一個(gè)狹窄的傾角,也可以在另外一段安靜的音樂(lè)中發(fā)生的狹窄尖峰中擊中一個(gè)較高的值。
這里的一種解決方案是在一定時(shí)間范圍內(nèi)進(jìn)行一系列采樣。根據(jù)我們要執(zhí)行的操作(即,我們?cè)噲D產(chǎn)生的效果),我們可以查找采樣期間發(fā)生的最小值和最大值,或者可以計(jì)算平均值,或者…有很多事情我們可以在這里做。
一方面,我喜歡在軟件中做事的想法,因?yàn)樗藢?duì)其他組件的需求,并且使事情在進(jìn)行過(guò)程中易于更改。另一方面,我喜歡使用Arduino Nano,Uno和Mega板,但是它們的8位處理器僅在16 MHz上運(yùn)行,如果我們將它們負(fù)擔(dān)過(guò)多的任務(wù),它們可能很快就會(huì)耗盡精力。因此,另一種基于硬件的解決方案將取代我們的“電路”。帶有“包絡(luò)”生成電路的模塊,如下所述。
包絡(luò)生成電路
在物理學(xué)和工程學(xué)中,振蕩信號(hào)的“包絡(luò)”是一條平滑的曲線,概述了其極端情況。因此,包絡(luò)概括了恒定振幅的概念。因此,我們要做的是創(chuàng)建一個(gè)電路,將來(lái)自麥克風(fēng)BOB的音頻信號(hào)作為輸入,然后輸出對(duì)應(yīng)于上包絡(luò)線的電壓,如下所示:
原始波形,帶有上,下包絡(luò)線(頂部)和僅上包絡(luò)線(底部)(來(lái)源:Max Maxfield,來(lái)自picture.com)
請(qǐng)記住,上面的插圖只是我在Visio中放在一起的東西-實(shí)際版本可能看起來(lái)略有不同。我們想要的是選擇用于創(chuàng)建電路的組件值,以使其響應(yīng)速度足夠慢,以平滑任何窄的正向或負(fù)向尖峰,同時(shí)仍然設(shè)法快速響應(yīng),從而為我們提供“感覺(jué)”發(fā)生的事情。
我之前已經(jīng)說(shuō)過(guò),我會(huì)再說(shuō)一遍:我是一名行業(yè)的數(shù)字硬件設(shè)計(jì)工程師,所以搖擺不定的模擬信號(hào)和電路會(huì)使我不知所措。因?yàn)槲也幌矚g被搞亂了(我不像年輕時(shí)那樣我曾經(jīng)是),我就打電話給我EEWeb專家密友彼得“Traneus雷克斯”安德森來(lái)幫助反彈一些想法左右。
彼得開(kāi)始嘗試“使用電容器和兩個(gè)二極管的半波倍頻器”,但我開(kāi)始感到頭暈,因此我們決定最簡(jiǎn)單的選擇是將單個(gè)二極管用作半波整流器,然后再使用RC過(guò)濾器,如下所示(已選擇組件標(biāo)識(shí)符R3a,R3b,R3c和C3的名稱,以便它們不會(huì)與我們之前的任何電路發(fā)生沖突):
音頻包絡(luò)發(fā)生器的擬議實(shí)現(xiàn)方式(來(lái)源:Max Maxfield)
現(xiàn)在,請(qǐng)記住,MAX9814 BOB輸出上的直流偏置為1.25V。1N4001二極管上的壓降為1.1 V,因此即使沒(méi)有音頻信號(hào),二極管的輸出也將為1.25 V-1.1 V = 0.15 V,因此,這是電容器要充電的基值。
高于DC偏置的任何音頻信號(hào)都將通過(guò)由電阻器R3a和電容器C3形成的RC濾波器為電容器充電。同時(shí),當(dāng)音頻信號(hào)的強(qiáng)度下降時(shí),電阻器R3c用于使電容器放電。最后但并非最不重要的一點(diǎn)是,我們添加了電阻R3b以保護(hù)Arduino的輸入。
結(jié)合使用我們的MAX9814 BOB和我們的包絡(luò)生成電路,我們期望看到的信號(hào)將被呈現(xiàn)給Arduino的模擬輸入,看起來(lái)應(yīng)該像下面這樣:
信號(hào)源為MAX9814 BOB的包絡(luò)發(fā)生器的輸出(來(lái)源:Max Maxfield)
當(dāng)然,如果需要,我們可以消除軟件中殘留的0.15-VDC偏置。另外,如果需要,我們可以在軟件中重新縮放信號(hào)(盡管這樣做沒(méi)有任何意義)。
當(dāng)然,我們?nèi)匀粫?huì)在信封中看到“峰值”和“谷”,因此我們可能希望通過(guò)每毫秒左右的采樣來(lái)保持“滾動(dòng)平均值”,但至少所有“ spikey”都具有已被刪除。
因此,我敢打賭,您想問(wèn)一下我們?nèi)绾蔚贸鲂欧馍善髦酗@示的組件值。實(shí)際上,這非常容易,而且絲毫沒(méi)有讓我感到疲倦。這種工作方式是我對(duì)彼得說(shuō)的:“我們應(yīng)該使用哪些組件值?”他回答說(shuō):“讓我們從1kΩ的R3a和R3b,100kΩ的R3C,0.47μF的C3開(kāi)始,看看我們?nèi)绾稳ツ抢?我們以后可以隨時(shí)對(duì)其進(jìn)行調(diào)整?!蔽也涣私饽?,但我很難對(duì)這樣一個(gè)合理的論點(diǎn)提出異議。
那么接下來(lái)會(huì)發(fā)生什么呢?
顯而易見(jiàn)的下一步是將電路實(shí)際放在一起-包括分壓器和包絡(luò)發(fā)生器在內(nèi)的整個(gè)enchilada-看看會(huì)發(fā)生什么(不要忘記,MSGEQ7需要更多的電阻和電容,如我在“MSGEQ7技巧和竅門”列):
完整的辣醬玉米餅餡(來(lái)源:Max Maxfield)
一如既往的問(wèn)題是,我迫切需要時(shí)間。令人高興的是,來(lái)自孟加拉國(guó)達(dá)卡的EEWeb社區(qū)成員Nazmul Hasan也正在玩這種事情(我們一直在交換想法和建議的電子郵件)。
納茲穆?tīng)枺∟azmul)從Adafruit訂購(gòu)了MAX9814 BOB,他很樂(lè)意進(jìn)行一些實(shí)驗(yàn),包括在包絡(luò)發(fā)生器中試用組件值,并捕獲示波器的屏幕??截圖,以向我們展示其余情況。
時(shí)間充?!?/strong>
您還記得我的“用愛(ài)迪生燈泡點(diǎn)亮您的言語(yǔ)”專欄嗎?我的想法是,我希望能夠?qū)?ài)迪生燈泡的強(qiáng)度調(diào)節(jié)為語(yǔ)音的函數(shù)(使用聲卡或我自己講話)。好吧,我只是在想這個(gè)包絡(luò)發(fā)生器會(huì)提供一個(gè)很好的起點(diǎn)-我可以使用Arduino來(lái)監(jiān)視包絡(luò)并驅(qū)動(dòng)控制電路,但現(xiàn)在恐怕這個(gè)事不宜人了(太多有趣的事情了)要做的事情,沒(méi)有足夠的時(shí)間來(lái)全部完成)。
同時(shí),我認(rèn)為構(gòu)建一個(gè)集成了MEGEQ7和包絡(luò)發(fā)生器功能的小型電路板將是很棒的。可能是我們還在其中添加了MAX9814 BOB功能。這樣,我們將擁有一塊單板,可以與我們選擇的微控制器一起使用,以在將來(lái)驅(qū)動(dòng)我們所有的音頻反應(yīng)工件。
編輯
-
放大器
+關(guān)注
關(guān)注
143文章
13623瀏覽量
213963 -
mems
+關(guān)注
關(guān)注
129文章
3957瀏覽量
190936 -
麥克風(fēng)
+關(guān)注
關(guān)注
15文章
645瀏覽量
54890 -
振蕩信號(hào)
+關(guān)注
關(guān)注
0文章
24瀏覽量
7302
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論