USB音頻設備類(lèi)的自遁應軟件鎖相環(huán)設計
主要硬件模塊結構和軟件模塊結構分別如圖1、圖2所示。本文引用地址:http://dyxdggzs.com/article/202683.htm
3 同步問(wèn)題
由于USB總線(xiàn)拓撲結構的特殊性,所有數據傳輸都由主機(PC)發(fā)起,在設備插上USB接口并完成初始化、列舉等步驟以后,主機會(huì )按照設備列舉的要求進(jìn)行流量分配。USB全速模式總線(xiàn)以1 ms為1幀。由于采用Isoch-ronous transfers模式,為測試方便,音頻格式采用8 k/s采樣率,8位量化。因此單聲道每幀數據量為:
MCF52223通過(guò)USB D驅動(dòng)在接收并解出USB數據包里的音頻數據后,存入內部開(kāi)辟的緩存中。ML2308每個(gè)聲道具有64字節緩存,當緩存滿(mǎn)、緩存一半和緩存為空時(shí)會(huì )分別發(fā)送中斷信號Full、Mid、Empty給MCF52223,而MCF52223可以根據不同的中斷信號對ML2308進(jìn)行寫(xiě)入新數據工作。
因此,在設備的寫(xiě)入端數據按照PC上的USB的時(shí)鐘進(jìn)行傳輸,而在設備輸出端數據按照ML2308的時(shí)鐘進(jìn)行操作。ML2308時(shí)鐘來(lái)自板載晶振,這兩個(gè)時(shí)鐘不可避免存在一定誤差,而且根據測試,不同PC的USB總線(xiàn)時(shí)鐘也有微小差別。這些差異會(huì )造成設備內部緩存的音頻數據不斷被消耗殆盡,或者不斷增加而最終溢出。因此,需要一個(gè)易于實(shí)現且對資源消耗量較小的方法來(lái)同步輸入與輸出信號。由于這種差異是不確定的,該算法需要一定的自適應能力。
4 自適應軟件鎖相環(huán)設計
之前采用簡(jiǎn)單的緩存門(mén)限控制方法判斷是否需要插值,即當緩存高于某門(mén)限時(shí),丟棄一個(gè)PCM樣點(diǎn)。而當低于某一門(mén)限時(shí),插入一個(gè)PCM樣點(diǎn),由于時(shí)鐘速度差異的長(cháng)期固有性,在插入/丟棄一個(gè)PCM樣點(diǎn)后,緩存數量仍然可能繼續減少或增加,從而造成程序無(wú)規律的爆發(fā)式的插入或丟棄數據操作,產(chǎn)生不可接受的噪音。
因而在算法設計時(shí),重點(diǎn)考慮以下幾點(diǎn)。
操作的穩定性:不能有對數據突發(fā)性的操作。
操作的分散性:要盡量平均的控制信號,把插入/丟棄產(chǎn)生的失真平均化。
資源消耗量?。阂m應嵌入式系統成本低廉、片上存儲、運算資源不是很富裕的客觀(guān)條件。
音頻的實(shí)時(shí)性:聲音對實(shí)時(shí)性要求較高,不能出現停頓、明顯延遲等情況。
因此,采用一種插入/丟棄樣本間隔平均化的自適應模糊控制算法進(jìn)行設計。
針對兩次插值/丟棄操作之間的樣點(diǎn)數進(jìn)行控制,而非對樣點(diǎn)本身,在每次插值/丟棄操作后進(jìn)行速率匹配判斷,修改插值/丟棄間隔。由于通常這種時(shí)鐘差異在千分之一量級,插入/丟棄操作間隔也在千樣點(diǎn)量級,大大減少了頻繁的判斷操作。算法結構如圖3所示。
5 算法實(shí)現
由于每臺電腦以及每塊開(kāi)發(fā)板的時(shí)鐘都有誤差,所以每次連接設備都需要檢查兩者時(shí)鐘速率關(guān)系,實(shí)現該功能的關(guān)鍵代碼如下:
評論