與 MSGEQ7 配合使用的音頻包絡生成電路
出處:維庫電子市場網(wǎng) 發(fā)布于:2023-12-19 17:14:54 | 592 次閱讀

典型的 MAX9814 輸出(Max Maxfield,波形來自 pixabay.com)
之所以出現(xiàn)這個問題,是因為我們使用的 MSGEQ7 音頻頻譜分析儀芯片更喜歡 300 mVpp 信號。我們解決這個問題的方法是向 MSGEQ7 的輸入添加一個分壓器?! ∥覀兘酉聛硪紤]的是,除了MAX9814的AGC功能外,MAX9814 BOB還具有主GAIN輸入。使用此輸入,我們的 Arduino(或您選擇的微控制器)可以指示 BOB 將其主增益設置為 60 dB (1,000)、50 dB (~316) 或 40 dB (100)。為了知道如何以及何時執(zhí)行此操作,Arduino 必須了解正在發(fā)生的情況。因此,除了將 MAX9814 BOB 的輸出饋送到分壓器的輸入之外,我們還建議通過一個未定義的“黑匣子”(我們稱之為“電路”)饋送它。正在前往 Arduino 的模擬輸入之一(下圖中的輸入 A2)。

提議的 MAX9814 BOB 和 MSGEQ7 實現(xiàn)(Max Maxfield)
這里的想法是,我們需要某種方式讓 Arduino 計算出來自麥克風 BOB 的信號有多大。如果 BOB 設置為 40 dB,并且其輸出在一段時間內(nèi)處于較低水平(實際持續(xù)時間待確定),則 Arduino 可以決定將增益提高到 50 dB 或 60 dB。相比之下,如果 BOB 設置為 60 dB 并且其輸出在一段時間內(nèi)全開,則 Arduino 可以決定將增益降至 50 dB 或 40 dB。
那么Arduino是如何判斷發(fā)生了什么事情的呢?好吧,我們可以替換我們的“?電路?” 用一根簡單的電線進行阻擋,并在軟件中完成所有這些。如果我們假設在代碼中將模擬引腳 A2 稱為“PinMicBob”,那么我們可以執(zhí)行以下操作:
aSig = analogRead(PinMicBob);
aSig = abs(aSig - DC_OFFSET); 在這種情況下,DC_OFFSET 先前被定義為 256,相當于 Arduino 模擬輸入上的 1.25 V,其中 0V 到 5V 模擬值映射到 0 到 1023 的數(shù)字等效值。取決于讀取的時間執(zhí)行后,這將導致 Arduino 從下面所示的波形中的某個位置“看到”樣本:

處理后的 MAX9814 輸出(Max Maxfield,波形來自 pixabay.com)
這里的問題是單個樣本是不夠的。Arduino 可以隨機地擊中響亮序列中間的狹窄下沉,或者可以擊中安靜音樂片段中出現(xiàn)的狹窄尖峰中間的高值。
這里的一個解決方案是在一段時間內(nèi)采集一系列樣本。根據(jù)我們想要做什么(即我們試圖產(chǎn)生什么效果),我們可以尋找樣本期間出現(xiàn)的最小值和最大值,或者我們可以計算平均值,或者......有很多事情我們可以在這里做。
一方面,我確實喜歡在軟件中執(zhí)行操作的想法,因為它消除了對額外組件的需求,并且使事情可以在您進行過程中輕松更改。另一方面,我喜歡使用 Arduino Nano、Uno 和 Mega 板,但它們的 8 位處理器僅以 16 MHz 運行,如果我們給它們加載太多任務,它們很快就會失去動力。因此,另一種基于硬件的解決方案是取代我們的“?電路?” 具有“包絡”生成電路的塊,如下所述。
包絡生成電路 在物理學和工程學中,振蕩信號的“包絡”是一條描繪其極值的平滑曲線。因此,包絡概括了恒定幅度的概念。因此,我們想要做的是創(chuàng)建一個電路,接受來自麥克風 BOB 的音頻信號作為輸入,然后輸出與上包絡相對應的電壓,如下圖所示:

帶有上下包絡的原始波形(上)和僅上包絡(下)(Max Maxfield,波形來自 pixabay.com)
請記住,上面的插圖只是我在 Visio 中拼湊而成的內(nèi)容 - 現(xiàn)實世界的版本可能看起來略有不同。我們想要的是選擇用于創(chuàng)建電路的元件值,使其響應足夠慢,以平滑任何狹窄的正向或負向尖峰,同時仍然設法足夠快地響應,為我們提供如下的“感覺”:發(fā)生的事情。
我以前說過,現(xiàn)在我再說一遍:我是一名數(shù)字硬件設計工程師,因此不穩(wěn)定的模擬信號和電路往往會讓我感到混亂。因為我不喜歡混亂(我不像以前那么年輕了),所以我打電話給我的EEWeb 專家好友Peter “Traneus Rex”Anderson來幫助討論一些想法?! ”说瞄_始胡言亂語地嘗試“使用電容器和兩個二極管的半波倍頻器”,但我開始感到頭暈,所以我們決定最簡單的選擇是使用單個二極管作為半波整流器,然后RC 濾波器,如下圖所示(已選擇組件標識符 R3a、R3b、R3c 和 C3 的名稱,以便它們不會與我們之前的任何電路發(fā)生沖突):

音頻包絡生成器的擬議實現(xiàn)(Max Maxfield)
現(xiàn)在,請記住,MAX9814 BOB輸出上的直流偏置為1.25 V。1N4001二極管上的壓降為1.1 V,因此即使沒有音頻信號,二極管的輸出也將為1.25 V ? 1.1 V = 0.15 V,因此,這是電容器充電的基值。
任何高于直流偏置的音頻信號都會通過電阻器 R3a 和電容器 C3 形成的 RC 濾波器對電容器充電。同時,電阻器R3c用于在音頻信號強度下降時對電容器進行放電。最后但并非最不重要的一點是,我們添加了電阻器 R3b 來保護 Arduino 的輸入。 將 MAX9814 BOB 與包絡生成電路結(jié)合使用,我們期望看到的 Arduino 模擬輸入信號應如下所示:

包絡發(fā)生器的輸出,以 MAX9814 BOB 作為信號源(Max Maxfield)
當然,如果我們愿意,我們可以在軟件中消除殘留的 0.15-VDC 偏置。另外,如果我們愿意的話,我們可以在軟件中重新調(diào)整信號的大?。ūM管這樣做確實沒有任何意義)。
當然,我們?nèi)匀粫谛欧庵锌吹健胺濉焙汀肮取?,因此我們可能希望通過每毫秒左右采樣來保持“滾動平均值”,但至少所有“尖峰東西”都有已被刪除。
所以我打賭您想問我們?nèi)绾蔚贸霭j生成器中顯示的組件值。事實上,這出奇地簡單,而且一點也不讓我感到疲倦。我對彼得說,“我們應該使用什么組件值?” 他回答說:“讓我們從 R3a 和 R3b 為 1 kΩ、R3C 為 100 kΩ、C3 為 0.47 μF 開始,看看我們?nèi)绾螐哪抢镩_始 - 我們可以隨時調(diào)整它們?!?我不了解你的情況,但我發(fā)現(xiàn)很難反駁這樣一個合理的論點。
那么接下來會發(fā)生什么呢?
顯而易見的下一步是實際將這個電路組合在一起 - 完整的 enchilada,包括分壓器和包絡發(fā)生器 - 看看會發(fā)生什么(不要忘記 MSGEQ7 需要更多的電阻器和電容器,正如我的“ MSGEQ7 提示和技巧》專欄): 與 MSGEQ7 配合使用的音頻包絡生成電路

與以往一樣,問題是我的時間非常緊迫。令人高興的是,來自孟加拉國達卡的EEWeb 社區(qū)成員Nazmul Hasan也在玩這類事情(我們不斷地通過電子郵件交換想法和建議)。
下一篇:簡單的麥克風音頻放大器
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權(quán)利。














