• 沒有找到結果。

第四章 軟硬體設計與實現

4.6 主機端程式設計

4.6.1 整體架構

主機端程式目的是用來處理語音訊號,使其經過VAD和Dahls

Algorithm的處理,並即時性的用喇叭播出處理結果,軟體架構圖如 2.5.3 節所述。

而主機端軟體編譯環境為Microsoft Visual C++,並將使用者介面寫成 視窗形式以方便使用者操作,而程式中VAD和Dahls 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:循環緩衝區之現行寫入

現 行 撥 放 位 置