[發明專利]基于可編程芯片的USB麥克風陣列實時完整數據流方法在審
| 申請號: | 202210370519.3 | 申請日: | 2022-04-10 |
| 公開(公告)號: | CN114783475A | 公開(公告)日: | 2022-07-22 |
| 發明(設計)人: | 汪志勝;崔俊寧;程鐘義 | 申請(專利權)人: | 哈爾濱工業大學 |
| 主分類號: | G11C7/16 | 分類號: | G11C7/16;G06F13/28 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 150001 黑龍*** | 國省代碼: | 黑龍江;23 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 可編程 芯片 usb 麥克風 陣列 實時 完整 數據流 方法 | ||
1.基于可編程芯片的USB麥克風陣列實時完整數據流方法,其特征在于,包括:
乒乓緩沖程序模塊,用于提供高效的臨時緩沖區,以保證對麥克風PDM數據流進行接收以及后續抽取解碼操作的實時性,其主要技術方法是:開辟等長的兩段緩存數組buffer0和buffer1,在DMA傳輸過程使兩段緩存不斷被交替接收麥克風連續輸出的PDM數據流;
主循環解碼程序模塊,用于對麥克風輸出的PDM數據流進行軟件上的抽取濾波,以解碼為所需的PCM數據流,其過程耗占CPU資源,主要技術方法是:每當判定乒乓緩沖的某段緩存數組存滿PDM數據,主循環便將該段緩存數組整塊進行抽取解碼,進而將解碼的PCM數據塊寫入到后續的環形隊列;
環形隊列程序模塊,用于提供足夠的內存空間進行快速的數據讀寫,保證數據流的實時性外,還需保證數據流的完整性,即不丟幀,其主要方法為:在MCU內存中開辟一段元素個數為M=2N(N為正整數)的一維數組que[M],利用位與運算實現讀/寫指針(即數組元素的索引值,分別用wr_ptr/rd_ptr指代)的反轉操作;
USB IN中斷程序模塊,主要是采用一種自適應算法,從環形隊列動態讀取適量的音頻數據,使得設備內數據量穩定,待系統平臺請求數據時進行上傳。
2.根據權利要求1所述的基于可編程芯片的USB麥克風陣列實時完整數據流方法,其特征在于,所述乒乓緩沖程序和主循環解碼程序模塊的進行,需要開啟MCU片內的DMA接收中斷機制來完成,如:首次時,開啟DMA接收任務和DMA接收完成中斷,DMA傳輸PDM數據流的目標緩存為buffer0,當buffer0存滿便觸發中斷;繼而,在中斷處理函數內,先調換DMA接收的目標緩存為buffer1,然后設定buffer0的寫滿標志;同時,主循環內循環判定buffer0和buffer1的寫滿標志,若判定為真,便將對應的一段緩存數組整塊地進行軟件上的抽取解碼。
3.根據權利要求1所述的基于可編程芯片的USB麥克風陣列實時完整數據流方法,其特征在于,所述環形隊列程序模塊,其實現方法為:利用que[wr_ptr]=wr_value和wr_ptr=(wr_ptr++)(M-1)操作實現向環形隊列快速寫入PCM數據,當wr_ptr增至為M的整數倍時,設定wr_ptr=0,即完成寫指針wr_ptr的反轉;同理,利用rd_value=que[rd_ptr]和rd_ptr=(rd_ptr++)(M-1)操作不斷從環形隊列內快速讀取PCM數據用于USB上傳,當rd_ptr增至為M的整數倍大小時,設定rd_ptr=0,即完成讀指針rd_ptr的反轉。
4.根據權利要求1、2和3所述的基于可編程芯片的USB麥克風陣列實時完整數據流方法,其特征在于,對于主循環解碼程序模塊解碼的PCM數據塊,環形隊列程序模塊內采取直接寫入環形隊列的模式,同時為避免臨近尾部時出現寫數據指針越界而造成丟幀的問題,方法如下:將乒乓緩沖的兩段緩存buffer0和buffer1大小L都設定為2kwords,則每段緩存抽取解碼為PCM數據塊后的長度m為2k-1words(每32bit的PDM數據塊轉化為16bit的1幀),因而環形隊列的長度M為PCM數據塊長度m的整數倍,避免了數據塊直接寫入環形隊列為滿時出現塊內數據丟幀的現象。
5.根據權利要求1所述的基于可編程芯片的USB麥克風陣列實時完整數據流方法,其特征在于,所述主循環解碼程序模塊,將解碼的m=2k-1words PCM數據塊寫入環形隊列后,更新環形隊列的寫指針:wr_ptr+=m。
6.根據權利要求1和3所述的基于可編程芯片的USB麥克風陣列實時完整數據流方法,其特征在于,所述USB IN中斷程序模塊使用IN端點,為維持設備數據量穩定,采用一種自適應算法,從環形隊列內動態讀取適量數據上傳至系統,主要方法為:首先準確計算當前已采集且未上傳的數據量,然后與環形隊列半滿的數據量進行比較、計算得到調整量,最后由調整量去動態增減上傳數據量,使得當前已采集且未上傳的數據量保持在環形隊列約半滿的狀態,具體步驟如下:
首先,準確計算當前已采集且未上傳的數據量remain_len的方法為:
remain_len=(wr_ptr-rd_ptr)+(L-remain_DMA_len)/2
式中,remain_DMA_len表示DMA未接收完成的剩余數據量,單位為words;
然后,對于調整量的計算,對remain_len與環形隊列半滿數據量的差值(remain_len-M/2)縮放8倍作為調整量diff,以減少數據波動,使數據量調整逐步歸于同步;
最后,由調整量確定上傳數據量sendlen。以96的上傳數據量為基底,若差值大于0,則上傳數據量為sendlen=96+diff;若差值小于0,則上傳數據量為sendlen=96-diff;其中,限制最大調整量,當計算的調整量diff大于24時,只取24,即sendlen的范圍為72~120words之間。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于哈爾濱工業大學,未經哈爾濱工業大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202210370519.3/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:抽水蓄冷蓄熱電站
- 下一篇:解拉鏈碳納米管錨固鑭絡合物的復合纖維及其制備方法





