?

基于雙螺旋結構的聲卡同步輸入輸出

2024-02-22 07:38陸成剛王斌龍皋月
電氣自動化 2024年1期
關鍵詞:聲卡雙螺旋同步性

陸成剛, 王斌, 龍皋月

(1.浙江工業大學 理學院, 浙江 杭州 310023;2.浙江華數廣電網絡股份有限公司,浙江 杭州 310017)

0 引 言

聲卡是計算機處理多媒體聲音功能的重要部件,甚至被用于工控系統的數據采集[1],除了集成在主板的聲卡外,還有一些場合是使用PCI插槽形式的獨立聲卡。一般情況下,聲卡的錄音和播放是獨立、互不相關的,除了在本地場合使用聲卡作為演講的擴音設施,或者作為遠程通信的語音終端之外,很少需要考慮錄音和播放之間的嚴格同步。事實上這涉及到聲學回聲消除的問題[2]1,與使用麥克風陣列進行聲源定位的波束形成、有源主動降噪技術等問題類似[3],它們都需要考慮多路信號的數據同步。

由于聲卡晶振的老化[4]和操作系統軟件的調度抖動[5]等因素,如果不去專門針對性地加強設計,那么錄音、播放即便在同等調度優先級下,它們的調用頻率的一致性都是有欠缺的。在使用計算機聲卡進行遠程語音通信時,通常需要集成聲學回聲消除模塊,而聲學回聲消除模塊的有效性需要聲卡輸入輸出較好的同步性支持。歷史上,這個問題解決得較好的是Global IP sound公司,但該技術的同步的實現細節一直沒有使用專利或論文披露,后來該公司被谷歌收購,就是現今谷歌WebRTC技術的由來[2]2。

本文從聲卡錄音播放的編程模式著手,分析了常用的教科書式的錄音、播放調度模式的頻率失衡,然后從回調遞歸的對稱交叉,進行邏輯鏈變向,設計了一種結構類似于基因雙螺旋的錄音播放調度模式[6],起到了對系統抖動一定程度的緩沖中和,達到了提升錄音播放頻率平衡的目的。

1 聲卡調度原理

計算機系統一般使用DMA直接內存訪問機制進行聲卡讀寫,聲卡在DMA控制器下直接與DMA讀寫交互,免于頻繁地受到CPU干預,提高了CPU/操作系統的調度效率。操作系統與DMA控制器協作,以內核緩存對DMA進行讀寫交換,這樣將聲卡數據交換出/入內核緩存,然后操作系統以內核緩存數據交換出/入應用緩存,而應用緩存是聲卡應用程序直接讀寫的。和DSP等嵌入式系統的音頻應用接口比較,計算機聲卡讀寫具有一定的延時(應用緩存塊數至少要大于等于3),除此之外,由于DMA機制使得聲卡外設獨立工作,極大降低了聲卡應用程序的CPU占用率。圖1為基于DMA的聲卡讀寫機制的數據交換示意圖。

圖1 聲卡讀寫的數據交換示意

無論讀寫,在應用程序開始時設定音頻規格參數、應用緩存分配,然后將所有緩存塊填入聲卡,之后利用聲卡讀寫的回調函數,從最舊的緩存開始循環地更新緩存。由于回調函數不能駐留太久,一般如果在數據讀寫前后進行預處理或后處理(回聲消除是讀聲卡后的數據處理,而調音等濾波是數據寫到聲卡前的處理),那么應該啟動子線程來執行預/后處理及緩存讀寫更新。其中讀寫回調函數可以根據返回的結束消息而中斷讀寫更新,可結束緩存讀寫的循環過程。圖2給出了這一讀寫緩存更新的循環示意。

圖2 讀寫回調循環示意

如圖2所示,讀寫一旦一次性將多塊緩存填入后進入“讀寫回調<—>讀寫緩存更新”的循環,這個回調函數是間接性的遞歸調用,即回調函數不會調用其本身,但它調用的讀寫更新函數又會調用該回調函數,因此可以稱之為回調遞歸模式。

假設音頻規格參數的幀率設置固定(即每個緩存塊設置成相同的塊長),無論讀寫,在“讀寫回調<—>讀寫緩存更新”的循環中都表現出操作系統的抖動性,即塊更新的時間間隔不是完美的塊長時間,而是在塊時長上下隨機浮動。例如設置幀時長100 ms,設計一個錄音程序,在酷睿i7/win11系統錄得19幀序列的幀時長分布如圖3所示。

圖3 幀序列幀時長抖動

又例如,設計一個錄音、播放程序,運行多次持續時長不一的測試,記錄得到每次測試的錄音、播放的各自的總幀數以及平均幀時長,其中音頻幀長規格定為20 ms, 如表1所示。由于錄音播放是各自搶占性地調用的,盡管系統的調度優先等級是相同的,但由于資源博弈是動態的平衡,因此每次測試錄得的效果均有隨機的波動??傮w來說,錄音、播放的頻次存在著一點失衡。幀差數越高顯示錄音、播放間的失衡越大。

表1 錄音、播放頻率失衡性

2 雙螺旋結構的錄音放音調度

在錄音放音的調度循環中,對于讀或寫而言,回調函數環節及緩存更新環節皆存在著不同的抖動,由于讀寫雙方在同等優先級下系統調度保持動態的平衡,因此失衡就體現在讀寫各自過程不同環節誤差的積累上。在錄音播放程序中,可以采用各自的回調函數調用對方的緩存更新,又保持對錄音、放音流程的驅動,那么不失為一種緩沖、中和抖動效應的方法,如圖4所示。

圖4 錄音放音回調調用對方的緩存更新

圖4體現了回調遞歸的對稱交叉、邏輯鏈變向,特別從錄音、播放兩個時間點開始的調用邏輯鏈展示了錄音播放交織在一起進行演變:

→加入錄音緩存→錄音回調→向聲卡寫入緩存→播放回調→

→向聲卡寫入緩存→播放回調→加入錄音緩存→錄音回調→

如果把ATGC四種堿基對和上述流程環節對應,那么上述兩條時間線演變的邏輯鏈恰似基因雙螺旋結構,如圖5所示。

圖5 錄音播放的雙螺旋調度與基因雙螺旋結構的對照

3 傳統錄音播放調度與雙螺旋結構調度的測試對比

在酷睿i7/win11系統采集傳統模式和雙螺旋模式的6次測試結果如表2所示。

表2 幀數對比 單位:幀

關于總幀差數,傳統模式總計16幀,雙螺旋模式只有5幀,前者較后者高2倍。但由于這12次測試程序運行時長各不相同,因此把各自的總幀差除以各自總幀數得到相對幀差率,傳統模式為0.000 94,而雙螺旋模式為0.000 19,可見傳統模式比雙螺旋模式高了4倍??値顢?、相對幀差率越高,顯示錄音播放之間的失衡越嚴重,從表2看出雙螺旋模式具有同步性提升的作用。

從另一個側面分析,傳統模式對抖動中和的能力較弱,那么反映在幀時長分布的方差比雙螺旋模式要劇烈些。仍以20 ms幀長規格為例,對傳統/雙螺旋模式各采集5次測試得到幀長分布的根方差見表3。

表3 傳統/雙螺旋模式的幀長根方差 單位:ms

從表3可以看到,傳統模式和雙螺旋模式各有一類調度是極穩定的(如表3在傳統模式中寫調度的幀數平均根差2.349,雙螺旋模式的讀調度幀數平均根差0.644),然后另外一類再和對應的那類保持動態平衡,例如傳統模式是讀對寫保持動態平衡,讀側的幀數平均根差9.426,雙螺旋模式是寫對讀保持動態平衡,寫側的幀數平均根差3.681。這種情況不固定,應僅僅是試驗錄得的情形。但總體而言,兩種模式下,雙螺旋模式的極穩定類(讀調度)對比傳統模式的極穩定類(寫調度)要更優、更穩定,而雙螺旋的寫調度相對于傳統模式的讀調度也更優、更穩定。且考慮兩種模式的綜合平均根方差,即傳統模式取讀寫兩側的根差平均為5.888,雙螺旋模式讀寫兩側根差平均為2.163,傳統模式比雙螺旋模式高出一倍多,即傳統模式的幀間隔變化更為劇烈,即保持動態平衡的程度也更劇烈,說明同步性也更遜色。

4 結束語

針對傳統錄音、播放調度的同步性存在可優化性,采用雙螺旋結構的新型設計加以改進,經過實測,基于輸入輸出幀差、相對幀差以及幀時長分布的根方差定量地證明了雙螺旋結構較傳統模式“成數倍”提升了同步性。

猜你喜歡
聲卡雙螺旋同步性
馬爾斯克雙螺旋瞭望塔
時滯非線性復雜動態網絡的牽引自適應控制同步性
產品裝配中的時間同步性測量技術
ALSA聲卡驅動程序設計
聲卡數據采集系統設計方式分析
蝴蝶魚
終極股權結構、分析師跟進與股價同步性實證研究
提高變電站基礎量測數據時間同步性的方法
DNA雙螺旋結構論文發表60周年
DNA雙螺旋:引領生物學革命60年
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合