該項目用于使用Arduino制作32頻段音頻(音樂)頻譜分析儀/可視化器。
硬件組件:
- Arduino Nano R3× 1
- 電阻10k歐姆× 1
- 電阻4.75k歐姆× 3
- 電容器100 nF× 2
- 電阻100k歐姆× 2
- SparkFun按鈕開關12mm× 1
- 32x8 LED矩陣顯示器× 1
手動工具和制造機器:
- 烙鐵(通用)
該項目用于使用Arduino制作32頻段音頻(音樂)頻譜分析儀。該項目的預期受眾是任何音頻愛好者,學生或初學者,他們對電子元件,Arduino和C編程有基本的了解。該項目中使用的組件是低成本的項目,易于組裝。
該頻譜分析儀的主要特點:
- 使用易于安裝的庫“arduinoFFT”和“MD_MAX72xx”
- 支持五種不同的顯示模式,可通過按鈕切換
- 音頻信號的左右聲道都是混合的,這樣你就不會錯過任何節(jié)拍
- 原型使用32x8 LED矩陣顯示器,這可以改變和輕松修改
- 音頻可以從耳機輸出或音樂系統(tǒng)/放大器的線路輸出饋送
電阻值不是很嚴格,您可以選擇任何最接近的值。請確保R1和R2(參考原理圖)具有相同的值。
程序流程圖:
系統(tǒng)描述:
Arduino板(ATmega328P)內(nèi)置模數(shù)轉換器(ADC),用于將輸入音頻信號轉換為數(shù)字樣本。ADC配置為采樣時鐘頻率為38.46khz的輸入信號。這是通過將ADC預分頻器配置為32來實現(xiàn)的。采樣頻率為38.64Khz意味著數(shù)字樣本可以再現(xiàn)高達19.32Kz(奈奎斯特定理)的輸入頻率,這對于音頻信號來說已經(jīng)足夠了。
正如我在開始時提到的,該項目的目的是顯示音頻音樂信號的頻譜。因此,左右音頻通道混合在一起并饋入ADC的A0模擬輸入。您可以使用音頻分配器電纜,以便您可以將相同的音樂同時饋送到頻譜分析儀和另一個放大器(如果需要)。
ADC配置為使用外部參考電壓。在這個項目中,參考電壓來自Arduino板上的3.3v穩(wěn)壓電源。當模擬信號在零電壓電平之上和之下振蕩時,我們需要在ADC的模擬輸入端產(chǎn)生直流偏置。這可確保ADC輸出不會截斷輸入信號的負周期。相同的3.3v穩(wěn)定電壓由兩個電阻R1和R2分壓,然后饋入模擬輸入以進行直流偏置。使用此直流偏置,即使輸入信號斷開,ADC也會在輸出中產(chǎn)生512。稍后在代碼中,這個由DC偏置引起的512被減去,使得讀數(shù)代表實際的輸入信號變化。
ArduinoFFT庫是將輸入模擬信號轉換為頻譜的代碼的核心。我發(fā)現(xiàn)這個庫易于使用,并為該項目生成了最準確的輸出。Prototype配置為生成64個樣本,并使用這些樣本進行FFT。ArduinoFFT庫可以對16到128之間的樣本進行FFT,這可以在程序中進行配置。但arduinoFFT庫計算速度慢,有128個樣本,因此我堅持64個樣本中最好的最高。
本項目使用的顯示為32列×8行LED矩陣。MD_MAX72xx庫使顯示控制部件非常容易。該庫提供打開/關閉該程序中正在使用的列中任意數(shù)量的LED的功能。每個頻帶的幅度被映射在0到8之間,這取決于每個列中的LED的相應數(shù)量的LED被接通。
該程序提供五種顯示模式,基本上通過在每列的不同位置打開/關閉LED來實現(xiàn)。您可以輕松修改/創(chuàng)建不同的模式。這里使用按鈕來改變顯示模式,轉動顯示圖案移動到下一個,最后重置為默認模式。按鈕連接到其中一個數(shù)字輸入,并在每一輪顯示刷新后掃描該輸入。
頻率響應:
經(jīng)驗證,系統(tǒng)能夠響應高達18.6Khz的頻率。