子曰:“不憤不啟,不悱不發(fā)”。卓大大,我現(xiàn)在心好累。
提問(wèn)
我的心好累呀
卓大大您好,我是一名信標(biāo)組的參賽選手 . 最近研究聲音定位已經(jīng)一個(gè)多星期了,一直在跟著您推文中的方法走,也曾像其他人求助,解決了很多問(wèn)題,但是也遇到了一些新的問(wèn)題,有些暫時(shí)想不明白,就想來(lái)請(qǐng)教一下。
購(gòu)買的 TC264 核心板尚未拿到手,于是用上一屆的 K66 板子做實(shí)驗(yàn)。使用的麥克風(fēng)是 MAX9814 模塊,GAIN 接 5V。
?
一開(kāi)始先用兩個(gè)麥克風(fēng),10khz 采集 2000 個(gè)數(shù)據(jù)做互相關(guān)運(yùn)算,結(jié)果存在數(shù)組內(nèi)。找出互相關(guān)的最大值對(duì)應(yīng)的下標(biāo) Nmax,這個(gè)下標(biāo)和 2000 的差 2000-Nmax 即為時(shí)間延遲 / 采樣間隔。
- 當(dāng) Nmax=0 時(shí),對(duì)應(yīng)信標(biāo)在兩個(gè)麥克風(fēng)正前方,角度對(duì)應(yīng) 90 度;當(dāng) Nmax<0 時(shí),對(duì)應(yīng)信標(biāo)在兩個(gè)麥克風(fēng)左側(cè),定義角度為 0;當(dāng) Nmax0 時(shí),對(duì)應(yīng)信標(biāo)在兩個(gè)麥克風(fēng)的右側(cè),定義角度為 180 度。
實(shí)驗(yàn)布局示意圖
?
這里遇到的問(wèn)題是求出的結(jié)果只有三個(gè),兩個(gè)麥克風(fēng)距離算 8 厘米,最大時(shí)間間隔才 235 微妙,而采樣 100 微妙一次,這樣的結(jié)果就理所當(dāng)然了。
通過(guò)提高采樣速率,軟件插值,提高麥克風(fēng)間距,增加測(cè)量時(shí)間可以增加分辨率。我都嘗試了。
提高采樣速率和軟件插值效果明顯,可以做到互相關(guān)的最大值的坐標(biāo)從 3 個(gè)點(diǎn)內(nèi)的移動(dòng)增大到 100 個(gè)點(diǎn)內(nèi)的 移動(dòng)。我覺(jué)得這應(yīng)已經(jīng)很不錯(cuò)了。
Chirp 信號(hào)波形
?
麥克風(fēng)間距受到 Chirp 半波長(zhǎng)限制,增加采樣時(shí)間效果不明顯(試驗(yàn)從 1000 到 4000 個(gè)點(diǎn))。
然后我開(kāi)始嘗試用三個(gè)麥克風(fēng)實(shí)現(xiàn)定位,作了一個(gè)等邊三角形固定麥克風(fēng)。以厘米為單位建立平面坐標(biāo),求解聯(lián)立的雙曲線方程,再代入第三個(gè)方程求得唯一解。
折騰半天算出來(lái)表達(dá)式非常長(zhǎng)的一串,在電腦上運(yùn)行 C 語(yǔ)言程序,MATLAB 計(jì)算,代入數(shù)值答案都正確而且一致,說(shuō)明等式?jīng)]有問(wèn)題。
使用三角形麥克風(fēng)陣列測(cè)量揚(yáng)聲器的位置
?
把這些代碼移植到單片機(jī)里實(shí)踐,效果確實(shí)非常差:大部分時(shí)候算出來(lái)的 X,Y 坐標(biāo)只是符號(hào)正確而已,說(shuō)明好壞知道我在哪個(gè)象限;有些符號(hào)都是錯(cuò)誤的。我想這個(gè)數(shù)學(xué)模型是非常敏感的。在遠(yuǎn)點(diǎn)的地方雙曲線接近平行,0.1 厘米的誤差都會(huì)導(dǎo)致誤解或者提前相交 -- 失之毫厘,差之千里。
于是,我開(kāi)始尋找誤差來(lái)源:麥克風(fēng)的誤差可以忽略不計(jì);K66 的 ADC 采樣的誤差,一是 ADC 腳懸空時(shí)跳變較大(但是接入麥克風(fēng)后又是穩(wěn)定很多),而是一個(gè) ADC 的才寄回干擾的其他的 ADC。這個(gè)挺明顯的,1 個(gè)麥克風(fēng)+2 個(gè)懸空使用虛擬示波器看波形,有聲音的時(shí)候 2 個(gè)懸空的也有不算小的波動(dòng)。
采集到的波形信號(hào)
?
我找了個(gè) RT1064 來(lái)做對(duì)比,發(fā)現(xiàn)這兩個(gè)指標(biāo)都好上不少;三是麥克風(fēng)不是一個(gè)點(diǎn),是一個(gè)圓柱體,加上等邊三角形的誤差,鳳城參數(shù)和我實(shí)際麥克風(fēng)間具有一定的差距。
然后尋找錯(cuò)誤的來(lái)源:在 Chirp 的中頻段,有可能互相關(guān)的結(jié)果在 t 點(diǎn)和 T-t 點(diǎn)都是峰值(t 是時(shí)間延遲,T 是信號(hào)周期)。因?yàn)槲也杉降男盘?hào)并不是一個(gè)完整周期的 Chirp 信號(hào),可能在我采集的這一段就是規(guī)律的正弦信號(hào),往左往右都可以重合。
Chirp 信號(hào)的自相關(guān)信號(hào)
?
用完整的 Chirp 信號(hào)可以解決這個(gè)錯(cuò)誤,但是在保證時(shí)間分辨率起碼在 10 微妙的情況下,不管是提高采樣頻率還是插值,一個(gè) 0.2048s 的信號(hào)的點(diǎn)起賣超過(guò) 20000 個(gè)。而且不知道信號(hào)的起始時(shí)間的情況下才采集這么長(zhǎng)的時(shí)間也不一定才到完整的一幀 Chirp 信號(hào)。
所以我現(xiàn)在有點(diǎn)懷疑純麥克風(fēng)的方案。折騰了這么久,以為快要成功的時(shí)候又發(fā)現(xiàn)了 一大大堆不知道如何解決的問(wèn)題。我現(xiàn)在也沒(méi)有力氣再重新飛線測(cè)試 RT1064 的結(jié)果了。
Chirp 信號(hào)的 FFT 幅度譜
?
萬(wàn)一只是誤差非常非常大和非常大的區(qū)別呢?不知不覺(jué)寫了這么多,真的是麻煩卓老師了。
回復(fù):
采集數(shù)據(jù)的頻率只需要設(shè)置為 10kHz 就好了,不需要提高采樣頻率。這是因?yàn)閷?shí)際信號(hào)產(chǎn)生的 DAC 的頻率就是 10kHz,提高采樣頻率也不會(huì)提高數(shù)據(jù)的精度;提高自相關(guān)判斷的精度是采用 FFT+補(bǔ)零的方式來(lái)完成的;具體方法以后會(huì)進(jìn)行理論分析;對(duì)于聲源的定位,麥克風(fēng)陣列的極限越長(zhǎng),定位精度越高??梢园殡S追的車模運(yùn)動(dòng),自然產(chǎn)生拉長(zhǎng)后的麥克風(fēng)陣列基線;需要假設(shè)能夠利用調(diào)頻接收模塊來(lái)獲得發(fā)送的信號(hào)。根據(jù)該信號(hào)的起始點(diǎn)來(lái)確定采集的起始點(diǎn)以保證能夠采集到完整的一幀 Chip 信號(hào);在實(shí)際測(cè)試中,距離的重復(fù)誤差應(yīng)該在 1 厘米左右,如果大于這個(gè)誤差,請(qǐng)檢查一下你的電路中實(shí)際信號(hào)的幅值和噪聲。
公眾號(hào)留言
卓大大,可千萬(wàn)別把電磁 AI 的賽道搞得太長(zhǎng),我剛試了一下,推車采集數(shù)據(jù)真的好累人啊 /::<身體累是一方面,心也累,都不知道辛辛苦苦采集的數(shù)據(jù)訓(xùn)練的結(jié)果會(huì)是啥鬼樣子。