最近有在做一些對講設備,測試的時候,每次對著麥克風講完話,總能從面前的喇叭上聽到自己講的話。想起偶爾打電話的時候也會出現相似的情況,就是不知道為什么電話里有自己的講話聲,之前只覺得電話出問題了,或者是信號串了之類的,沒思考過。這回是面對面碰到了這種現象,了解后才知道這個是對講系統(tǒng)設計中最棘手的問題之一,回音問題。經過一段時間與回音問題的抗爭,積累了不少回音消除方面的經驗,而今天就將這些經驗分享給大伙,主要是其中用到的一款消回音調試板。
這次為了分享完整的設計,我使用的工具是EasyEDA。這個網站對硬件設計開源支持非常好,和Github有點相似,不過側重于開源硬件設計,而且個人覺得比Github親民很多,Github只有英文版本,天生就是為大神們量身打造的。Github側重的是軟件的開源,有很強大的版本管理功能,能夠完全記錄每一個文本格式的文件的修改歷史,并比對不同版本文件間的不同點,而且支持在線閱讀代碼。不過這種強大的管理功能也只限于文本格式的文件,對于非文本格式的文件,Github都認為它是一個文件,只記錄它的版本,如果你對這個文件修改的內容描述不夠 詳細,過段時間后需要回滾版本就得很麻煩,而且Github是不支持這種文件的在線瀏覽的。EasyEDA支持在線進行硬件設計,并且具有很好的項目管理和版本管理功能。挑兩張圖略略說明一下EasyEDA,因為下面主要是在它上面操作的。
花了點口水,描述了一下設計工具。工欲善其事必先利其器嘛,因此我再花點時間給剛遇到回音問題的伙伴們普及一些基礎知識。
對講系統(tǒng)回音原理
它的基本原理就是這樣,如下圖,音源(用戶講話)從本地設備的麥克風采集后,通過網絡發(fā)往遠端設備,遠端設備從喇叭中播放出來音源的聲音(通常會經過放大),如果遠端設備沒有進行消回音處理,那么這個遠端設備的喇叭播放出來的聲音,就會被遠端設備的麥克風采集到,并通過網絡傳回到本地設備,并經過放大,從本地喇叭播放處理。
模擬對講系統(tǒng)比較少出現對講回音問題,原因有兩個:1、傳輸延時很小,即使有聲音,通常也會隱藏在自己的講話聲中,使用者不容易察覺。2、也由于第一點原因,模擬系統(tǒng)的消回音處理也相對簡單(有了解過回音消除算法的伙伴們應該知道這個回音回來的時間上是關鍵參數,這里不討論回音算法,所以不贅述),直接將輸出和輸入做減法運算,消回音效果就基本能保證了。我們常用的模擬對講系統(tǒng)有傳統(tǒng)的固話系統(tǒng),而IP電話則是(數字)網絡對講系統(tǒng)。
對講回音與嘯叫區(qū)別
下圖簡單地示意了嘯叫的形成,基本的原因就是麥克風采集的音頻通過放大后從揚聲器播出,若揚聲器放得比較靠近麥克風,那么聲波通過空間傳回麥克風,麥克風將這些放大后的聲音再次采集送往功放放大,然后從揚聲器播出,以此反復,聲音越來越大,從觀察者的角度,就更喇叭叫了起來一樣,聽到刺耳的巨響。這個和海嘯有點像,地震波推著海浪向前,后來的波浪會疊加到前面的波浪上,最后越疊越高,形成巨型的海浪,造成驚人的破壞力。
回音也可以引起嘯叫,不過這個回傳的路徑不單只包括空間(聲學回聲傳播路徑)還包括電路線纜,不過“叫”起來的原因是一樣的,有音頻的回環(huán),并且在環(huán)上有放大環(huán)節(jié)。
消回音常用手段
早時候,算法還不夠完善,為了處理回音、嘯叫這種種音頻問題,網絡對講系統(tǒng)曾經為了繞過它們而采用單工的對講方式,就是我講的時候不能聽你講,回想一下,在醫(yī)院打點滴,如果點針水快用完,就需要按邊上的按鈕呼叫護士,需要按下按鈕獲得講話的權限,而護士聽到了呼話后,在總臺同樣需要按下按鈕進行恢復。半雙工對講系統(tǒng)就是這么個令人糾結的系統(tǒng)。
目前消回音算法取得了極大的進展,不用再使用半雙工的蹩腳方式避讓開回音問題了,了解了一圈,消回音通常有三種處理辦法,1、使用對講程序現成的消回音庫,這些庫有免的如webRTC或者freeswitch消回音庫開源版本,也有收費的如 freeswitch的消回音庫商業(yè)版本;2、使用富迪的消回音芯片,這種芯片其實上就是一個專用DSP加上固化了的消回音程序(固件),并開放參數調節(jié)接口;3、使用DSP跑自主開發(fā)的消回音算法,因為這類算法涉及的浮點運算比較多,通常需要使用高性能的DSP芯片才能支撐。第一種方式消回音效果好,但是通常使用的自適應算法需要收斂時間,這種方式收斂時間相對較長。第二種方式簡單易用,算法收斂快,效果也能滿足大多數使用情況下的要求。第三種方式,無論是消回音效果或收斂時間都能達到最優(yōu),不過技術門檻較高,成本也較高。
FM1188消回音調試板設計
科普了一大段,終于要進入主題了,如何設計FM1188消回音調試板。
其實在消回音領域富迪的方案還是用得相當廣泛的,淘寶上也有各種已經燒好了參數的小模塊,如下圖,可以直接嵌入電路使用。不過這種模塊不方便調試參數,而今天的調試板充分考慮了調試的各種情況。
如圖2所示,其中每張原理圖放置板子的一個功能模塊,接下來分別說一下這些功能模塊的作用和設計注意事項。(整幅圖片可能看起來比較模糊,有需要的伙伴們可以登錄下文項目鏈接進行探討)
1、ALC5640音頻編解碼電路
ALC5640是REALTEK公司推出的一款高性能的多通道編解碼芯片,有兩組I2S接口,能當Audio Hub使用,能夠真正實現全雙工操作,就是編碼的同時進行解碼。而且體積小通常用在移動設備上。
為了確保音質,需要降低電源噪聲,調試板的編解碼芯片采用獨立的線性電源供電,如下。板卡上的每個模塊都盡量保持低噪聲很重要,在調試的時候才能更好地評估,設計對正真噪聲(空間聲學噪聲)的抑制效果。
ALC5640內置雙通道D類功放,最大支持5W功率輸出,輸出必須加濾波電路,如下:
接口處將所有控制信號、音頻輸入輸出引出來,封裝采用2.54mm引腳間距的雙排插針,方便后續(xù)使用杜邦線根據需要互聯電路,如下:
2、AMPLIFIER功放電路
功放模塊設計包含了兩個不同輸出功率的功放芯片,其中LM4950是7W,LM4871是5W,而且兩個芯片都具有靜音控制功能,這是為了后續(xù)調試的時候更好地比對在不同喇叭響度的情況下比對消回音效果。
和音頻編解碼模塊一樣,電源采用線性電源獨立供電,降低電源噪聲;接口處將所有控制信號、音頻輸入輸出引出來,封裝采用2.54mm引腳間距的雙排插針,方便后續(xù)使用杜邦線根據需要互聯電路,如下:
LM4950和LM4871內部原理類似,都是橋接方式推動喇叭工作的,如下,無需外接隔直大電容,這是一種OCL(output capacitor less)功放電路。
3、FM1188消回音模塊
FM1188是富迪公司(fortemedia)推出的語言處理芯片,它能夠降低環(huán)境噪聲、定向采集聲音、消回音等。它的內部消回音算法或者說消回音處理邏輯如下:
因為是調試板卡,配置是不固定的,增加跳線接口,用于調試的時候根據需要進行配置。配置包括兩種,一個是參數下載方式的配置,FM1188共支持4種參數下載方式:1、從256 BYTE EEPROM讀取參數;2、從1 KBYTE EEPROM讀取參數;3、從SHI接口讀取參數;4、從UART接口讀取參數。淘寶上賣的模塊通常是將參數預先燒寫到EEPROM中,而且參數通常不多,然后配置成第一種參數下載方式,方便客戶使用。還有一個是燒寫參數位置的配置,可以根據配置將程序燒寫到EEPROM的不同地址。
所謂的配置指的就是設置功能引腳上電時的電平,預留2.54mm引腳間距的雙排插針,后續(xù)使用跳線帽進行跳線即可,如下。
引出音量調節(jié)引腳,方便調試的時候隨時可以改變音量,以便在不同響度情況下,觀察消回音效果。
原理圖模塊就這些,接下來畫PCB,PCB圖設計也在EasyEDA上實現(作圖思路大同小異,對工具有興趣的伙伴們自行百度EasyEDA,這里不詳述),在這說明一下設計時的注意事項。先上整體效果圖,如下:
樣板設計完之后想看板卡的生產時的效果圖也可以用EasyEDA預覽,如下,是不是真的很像打樣回來的樣板呢?
最終做出來的樣板如下,由于走的公司渠道的打樣,有部分公司信息,因此圖片打了馬賽克。
麥克風接FM1188進行聲音采集,并慮除回聲,和噪聲;FM1188處理過后的音頻信號傳給音頻編解碼芯片ALC5640的LINEIN進行采集并編碼;音頻編解碼芯片ALC5640輸出的音頻LINEOUT一方面輸給功放放大,一方面為FM1188提供參考(沒有參考音源是無法消除回聲的,要不然FM1188如何知道喇叭播出了什么聲音?)
『本文轉載自網絡,版權歸原作者所有,如有侵權請聯系刪除』