第四章 軟硬體設計與實現
4.6 主機端程式設計
4.6.1 整體架構
主機端程式目的是用來處理語音訊號,使其經過VAD和Dahl,s
Algorithm的處理,並即時性的用喇叭播出處理結果,軟體架構圖如 2.5.3 節所述。
而主機端軟體編譯環境為Microsoft Visual C++,並將使用者介面寫成 視窗形式以方便使用者操作,而程式中VAD和Dahl,s Algorithm的結合是使 用multithread方式來處理。在實做上,因為考慮到有限的資源達到最好的 效能,因此架構採取2.5.3 節所述架構,音訊信號經由麥克風陣列擷取後 會直接通過Lower Beamformer,並再通過VAD的判定,若為真人語音,訊 號會直接由喇叭播出。若為非真人語音,系統會將非真人語音的原始訊號
(未通過Lower Beamformer)做適應性的調整,並將調整後的係數傳遞給 Lower Beamformer。其流程圖如圖 4-10 所示。而VAD判定為非真人語音有 兩種情況,第一為真人語音字尾後,第二為音訊能量小於某個臨界值,而 Lower Beamformer率波係數則是在第二種情況下會去更新。
開 始
使 用 者 輸 入 參 數 初 始 值
開 啟 USB驅 動 程 式 設 定 USB接 收 資 訊 及
DirectSound
錄 製 使 用 者 聲 音 以 供 Dahl's Algorithm處 理
錄 製 雜 訊 聲 音 以 供 D Algorithm處 理
ahl's
空 間 濾 波 器 輸 出
適 應 性 調 整 空 間 濾 波 器 非 真 人 語 音 輸 出
真 人 語 音 輸 出 否 是
VAD判 定
真 人 語 音
非 真 人 語 音 能 量 < 臨 界 值 更 新 空 間 濾 波
器 濾 波 係 數
否 是
圖4-10:主機端軟體流程圖
4.6.2 Intel Math Kernel Library(MKL)[26]
Intel Math Kernel Library(MKL)為一套專門對 Intel CPU 平台系列作 數學式子最佳化加速動作的函式庫,如果電腦有多顆處理器,則可以啟動 OpenMP 平行計算如此更可加快運算速度。其 MKL 可用於 C 語言和 Fortran 介面,並包含包括線性代數運算、FFT 等最佳化的函式。
在主機端程式中,VAD 或高階 LMS 演算法皆需要龐大的計算量,為了 使系統達到即時的效果,主機端程式會加入MKL 所提供的函式,圖 4-11 為作Normalize LMS 演算法加入 MKL 函式和沒加入 MKL 函式所花的時 間比較圖。
圖4-11:計算 Normalize LMS 使用與未使用 MKL 比較圖
10000 次的 Normalize LMS,濾波器階數與所花時間的 比較圖,橫軸為Normalize LMS 階數,縱軸為所花時間,從圖中可發現當 圖4-11 中顯示了作
階數在100 階時使用 M 差距不大,但當階數愈 了5.936 s,因此若以 MKL
ect X[27]
Microsoft DirectX 是提供給遊戲開發者一個應用程式選項,遊戲開發 台,並在此平台建立一個遊戲或多
媒體軟體。而為了讓空間濾波器處理完的資料 時性地播出,我們
了DirectSound 是
DirectX 中,提供 Wave 類型的音效處理介面,音效處理的觀念如下:
1、 裝置物件(Device Object):DirectSound 裝置物件是在程式中呼 叫DirectX API 的函數來建立,它是一個代表程式所使用的音 效輸出入裝置的物件,在物件裝置之後才能進一步設定裝置的 協調層級,建立主緩衝區與次緩衝區。
2、 協調層級(Cooperative Level):Windows 是一個多工作業系統,
在同一時間可能會多程式用到相同的硬體資源,因此當音效裝 置物件建立之後,還要設定程式對於裝置的使用權限,也就是 協調層級。
3、 主緩衝區(Primary Buffer):主緩衝區是用來儲存要播放聲音資 料的記憶體區域。當裝置物件建立時,主緩衝區便會自動產生。
4、 次緩衝區(Secondary Buffer):次緩衝區是儲存聲音資料記憶體 區域,可以有很多個,其中的聲音資料可被放置到主緩衝區來
行播放位置的通知,如此載入資料到次緩衝區後,即可馬上被複製到主緩 衝區,將聲音播放出來。而要將聲音載入到次緩衝區中,必須進行三個動 作:鎖定次緩衝區、載入資料到次緩衝區、解除鎖定次緩區。在此過程中 定次緩衝區的用意,是為了防止資料尚未複製到次緩衝區之前的任何不
為聲音播放的架構圖 鎖
當的存取動作。圖4-12
聲音 載入 次緩衝區 複製 主緩衝區 撥放 喇叭
圖 4-12:聲音播放架構圖
圖4-12 中的 循環緩衝區觀
但在實作上, 是為了容許資料緩衝區
所產 所有
與播放位置
緩衝區為一循環緩衝區,圖4-13 顯示出順著箭頭播放與寫入位置的
念。只要把資料寫在亮區而非暗區的話,無論寫在哪都是安全的,
應讓資料在現行寫入位置到達之前寫入,這
生的 延遲。
現 行 寫 入 位 置
圖4-13:循環緩衝區之現行寫入
現 行 撥 放 位 置