麥克風陣列(2)驅動開發及調試


本文記錄麥克風陣列開發涉及的驅動及音頻領域的知識點。

一、框架

1.系統框架如圖

 

2.各部分介紹

  • MIC:采集外界音頻,送入ADC芯片(如ES7210)進行處理。MIC有數字MIC和模擬MIC。
  • ADC芯片:對MIC送來的數據進行模->數轉換,並將數字化的音頻數據通過I2S接口送往應用處理器(AP,SoC)。
  • SoC:一方面,ADC芯片有諸多配置,如采樣率、采樣位數、ADC增益,這部分功能通過I2C接口讀寫ADC芯片的寄存器完成。另一方面,SoC通過I2S接口(或其他音頻接口,如PCM等)接收音頻數據。最終目的,對音頻數據進行處理、分析,完成產品所需功能,如錄音、語音識別等。

 

二、開發內容

1.ADC芯片的I2C驅動

1.1 SoC側的I2C控制器驅動。這部分完成和ADC芯片的數據通路開發,在此基礎上才有后續的ADC配置等功能。關鍵點:I2C協議,設備地址。
1.2 ADC芯片的配置。需要找芯片廠商要datasheet和參考代碼。

 

2.I2S驅動

SoC側的I2S控制器驅動。

 

3.測試代碼及聯調

編寫測試代碼,讀取錄音數據。
硬件+軟件聯調。

 

4.錄音數據分析

分析利器:Cool Edit Pro

 

三、調試方法

完成上述開發,說明整個軟硬件通路已經基本沒問題。那么如何調試,進一步確定有沒有感官無法察覺的問題呢?

調試准備:
變頻音頻源:0~48KHz(正弦波)
定頻音頻源:1KHz

發現音頻源:https://onlinetonegenerator.com/frequency-sweep-generator.html

 

四、問題分析及解決

1.錄音音量小

調節ADC芯片的增益

 

2.丟幀

2.1 如何看是否丟幀?

Cool Edit-> 查看-> 光譜顯示窗,如下圖:

綠色標注的地方表明有丟幀。放大來看:

2.2 丟幀解決思路

a)從I2S控制器讀取數據有沒有問題?比如接收fifo是否溢出。
b)應用讀取數據有沒有問題?比如緩沖區設計不合理。
c)優先從a、b入手,確認沒問題再測量采樣時鍾、I2S時鍾等。

 

3.頻偏

采樣頻偏對系統性能影響的分析

3.1 如何看是否有頻偏?

使用固定頻率音頻源(如500Hz,1KHz等)進行錄音,用Matlab對錄音文件進行分析。如下圖:

1kHz的頻率應該x坐標是1000,現在是1004,相當於偏了4Hz。相應的500Hz偏了1.8Hz,2000Hz偏了7Hz。

 

3.2 頻偏解決思路

I2S接口有兩根時鍾線:

SCLK:Serial data bit clock
LRCLK:Serial data left and right channel frame clock

LRCLK作為聲道選擇信號,也稱幀時鍾LRCLK的頻率等於聲音的采樣率

 

發生頻偏,可能是LRCLK的頻率有誤差。

 

經過測量,16K采樣率下LRCLK的頻率為15.94,偏差0.375%,這樣:
500Hz就偏了:500Hz X 0.375% = 1.875Hz
1KHz就偏了:3.75Hz

 

數據和Matlab分析的偏差基本一致。

 

時鍾的偏差由何而來?

硬件上,作為時鍾源的MCLK是由SoC提供的,根據常識判斷,誤差肯定存在且消除不了。

 

所以,解決方案就只能更改時鍾源。

 

什么時鍾源精確度高?

 

有源晶振。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM