第三章 系統軟硬體設計與實現
3.1 硬體環境
3.1.2 數位式麥克風陣列聲音訊號擷取系統
類比式麥克風經過聲音震動產生電壓後,需要通過放大器及 A/D 轉換器轉成數位資料。然而隨著麥克風個數增加,放大電路的體積也 跟著增加,且多個通道同時取樣的A/D 轉換器價格也越貴。相對於類 比式麥克風,數位式麥克風已將放大器與A/D 轉換器電路內嵌至麥克 風中,因此輸出已為數位訊號。
壓克力環形陣列
圖 3-6 為壓克力環形陣列的設計圖,陣列內接圓半徑為 90mm,
環上一共可鑲嵌8 顆數位式麥克風,每顆數位式麥克風間夾 45 度角。
而圖3-7 為壓克力環形陣列,鑲嵌數位式麥克風後的實體圖。
圖3-6 壓克力環形陣列的設計圖
─22─
圖3-7 為環形數位式麥克風陣列實體圖。
數位式麥克風陣列連接 IO 板
本實驗室自行設計一套I/O 板以供數位麥克風陣列作應用。此板 提供76 個數位式麥克風插槽,I/O 板中間部分連接 FPGA 單板,透過 FPGA 程式撰寫,可與不同介面平台作溝通。I/O 單板下方的腳位可與 DM6446 EVM 的非同步外部記憶體介面透過排線連結做資料的傳輸。
I/O 單板背面提供三種 regulator 的介面,將 5V 轉成 1.8V 供數位式麥 克風陣列使用。
圖3-8 I/O 板實際成品(左圖正面,右圖反面)
FPGA 硬體
─23─
FPGA 我們使用的是 ALTERA Cyclone II 系列的 EP2C35F484C6N 晶片,由茂綸公司所開發的實驗板。尺寸為11 cm ╳ 8 cm。如圖 3-9。
圖 3-9 GFEC Cyclone II Strarter Kit 3.1.3 系統其他硬體周邊
以下介紹系統使用到的其他相關周邊硬體。
PTZ 攝影機
圖3-10 為系統擷取影像所使用到的 SONY EVI-D70 PTZ 攝影機,
NTSC 影像格式,可透過 RS232 對其作伺服馬達控制,水平旋轉正負 170 度,上下移動正負 120 度。
圖3-10 SONY EVI-D70 PTZ 攝影機
─24─
彩色 TFT LCD 螢幕
圖 3-11 為系統影像輸出所使用到的 EverFocus EN220 5.6 吋彩色 TFT LCD 螢幕,為 NTSC 影像格式。
圖3-11 彩色 TFT LCD 螢幕
JTAG 仿真器與 JTAG 轉接板
圖3-12 為 XDS510USBJTAG 仿真器(emulator),XDS510USBJTAG 仿真器所擔任的角色就是作為介於開發程式軟體(CCS)以及 DSP 間的 橋 樑 , 控 制 DSP 和 CCS 間 的 資 料 傳 輸 及 交 換 , CCS 可 藉 由 XDS510USBJTAG 仿真器再透過 DSP 的 JTAG 埠控制 DSP 的執行並 將 DSP 內的資料即時傳出用以偵錯。圖 3-13 為 JTAG 轉接板,此轉 接板是用於 XDS510USBJTAG 仿真器與 DM6446 間,轉換兩者間的 PIN 腳數 (20/14)、電壓與時脈。開發程式軟體(CCS)會在 3.3 軟體環 境章節介紹。
圖3-12 XDS510USBJTAG仿真器 圖 3-13 JTAG轉接板
─25─
3.2 硬體系統架構
圖 3-14 硬體系統架構圖
本系統可以切分成影像與聲音兩個子系統,聲音子系統的聲音資料擷 取是透過數位式麥克風陣列訊號擷取系統擷取,數位式麥克風陣列訊號擷 取系統主要由八顆數位式麥克風所排成的環形陣列與一塊FPGA 所組成,
數位式麥克風收音後,輸出的資料格式為sigma-delta 格式,因此麥克風的 輸出需要透過抽樣濾波器(decimation filter)將 sigma-delta 資料格式轉換為 16-bits 資料格式,抽樣濾波器包含了降頻器、低通濾波器與高通濾波器,
用以濾除高頻及低頻雜訊,並使取樣訊號符合 Nyquist-Shannon Sampling Theorem。當抽樣濾波器輸出 16-bits 資料時,平台需要一個多工器將多頻 道的資料輪流傳出,此多工器與抽樣濾波器皆規劃於FPGA 上實現。八顆 數位式麥克風的聲音訊號在 FPGA 上做前處理後,FPGA 會透過 DM6446 EVM 的非同步外部記憶體介面(AEMIF, Asynchronous External Memory
─26─
Interface) 將處理後的聲音訊號傳輸到後端的 DM6446,因此 FPGA 會將聲 音資料包裝成非同步外部記憶體介面適用的格式傳出,而 DM6446 會將 FPGA 視為一塊外部記憶體來抓取資料。DM6446 透過非同步外部記憶體 介面抓取聲音資料並執行語音活動偵測、聲源方位估測與適應性語音純化 的動作,經由估測出的聲源方位資訊會透過 RS232 串列埠對 PTZ 攝影機 做伺服控制,可控制攝影機鏡頭對準發聲源,以輔助影像子系統解決影像 脫鎖和對未進入 CCD 鏡頭前對影像位置之估測問題。而純化後的語音資料 則是透過AUDIO OUT 作類比輸出。
影像子系統的影像資訊透過 PTZ 攝影機擷取,影像資訊直接透過
DM6446 的影像介面輸入,DM6446 透過擷取的影像即時追蹤人臉,並將 經過人臉追蹤系統處理後的影像透過 DM6446 的影像輸出介面送至 TFT LCD 螢幕顯示。
3.3 軟體環境
3.3.1 Linux 作業系統與編譯器
一般來說嵌入式平台的硬體資源較PC拮据,平台處理器運算速度與記 憶體大小都會受到限制,因此程式開發者通常不會直接於嵌入式系統板上 開發程式,而會選擇額外使用一台PC作為嵌入式系統程式開發的環境。我 們使用TI 提供的MontaVista Linux V4.0做為DM6446平台ARM端的嵌入式 作業系統,而PC上則是安裝Red Hat Enterprise Linux V4作業系統作為平台 的程式開發環境,此外PC的Linux上會安裝MontaVista Linux V4.0 System Tools,內含相關系統開發套件,包括了編譯器與平台的Linux kernel與file system的重製工具。由於我們使用x86架構的PC作為開發平台,因此不能 直接使用其GCC作為編譯器,而是使用可編譯出ARM端指令集的轉換編譯 器(Cross-compiler)來編譯程式。我們使用arm_v5t_le-gcc 作為轉換編譯器。
─27─
3.3.2 Code Composer Studio
Code Composer Studio (CCS)為 TI 提供的一套整合式開發環境的發展 軟體,其中提供了C 語言的編譯器、組合語言的組譯器與其他相關工具。
ARM 端程式可以在 Linux 環境下開發,但 DSP 端程式則是需要透過 CCS 開發會較為便利,使用CCS 可以快速簡單的中斷程式並觀察記憶體內部各 暫存器數值,以便於 DSP 程式開發除錯。使用 CCS 需搭配使用在硬體環 境章節已介紹的JTAG 仿真器使用。下圖 3-15 即為 CCS 的整合開發介面。
圖3-15 CCS 的整合開發介面 3.3.3 DSP/BIOS Link
DSP/BIOS Link[17]是一套TI提供用來處理雙核心系統平台內部的GPP (General Propose CPU )與DSP間溝通的軟體,在DM6446平台上的GPP即為 ARM處理器,DSP/BIOS Link這套IPC(Inter – Processor Communication)軟
─28─
體提供了一些通用API,幫助雙核心程式開發者避開一些底層較複雜的溝 通協定機制,可直接專注於程式應用面發展。我們使用的DSP/BIOS LINK 軟體版本為v1.30.06 。
圖3-16 DSP/BIOS LINK 軟體架構圖
圖3-16 為 DSP/BIOS LINK 的軟體架構圖,各方塊功能如下:
GPP 端 :
OS ADAPTATION LAYER :
OS ADAPTATION LAYER 將 GPP OS 包在其中,使 OS 與其 他元件分離,只拉出幾個通用 API 跟其他元件溝通,其他元件都 得使用這些 API 而不能直接呼叫 OS,如此可以讓 DSP/BIOS LINK 軟體工作在不同 OS 下。
LINK DRIVER :
LINK DRIVER 把低階的控制作業包在其中,負責控制著 DSP 與使用著已定義的低階控制協定在GPP 與 DSP 間做資料傳遞的工 作。
PROCESSOR MANAGER :
PROCESSOR MANAGER 為 API 層,將 LINK DRIVER 的控 制拉出並轉換提供給使用者使用。
DSP/BIOS LINK API :
雖說 DSP/BIOS LINK API 這層是使用者在 GPP 端的使用介 面,但大部分的API 轉換其實都在 PROCESSOR MANAGER 這層
─29─
處理掉了,DSP/BIOS LINK API 這層只對呼叫時的輸入參數作確 間的物理連接( physical connectivity),在 GPP 與 DSP 間做資 料傳遞。
使用要求-回應機制(issue-reclaim model)傳接資料。
MSGQ :
用來在 GPP 與 DSP 間交換少量資料,約為變數大小的短訊息。
訊息的送出與接收都透過 message queues。
允許單一發送端,但有多接收端。
POOL :
從共享記憶體(shared memory)中劃一塊記憶體池(memory pool),以提供 CHNL 與 MSGQ 在此區塊內宣告暫存器。
─30─
3.4 軟體系統架構
雙核心系統分別是 ARM 和 DSP,由 ARM 負責主控系統運作、對周 邊控制,DSP 負責運算相關演算法,但為了降低 DSP 晶片負擔,決定將人 臉追蹤演算法移至ARM 端實現,至於 ARM 與 DSP 雙核心之間的溝通方 式,我們使用DSP/BIOS LINK 來達成。
圖3-17 DSP 端軟體系統流程圖
圖 3-17 為 DSP 端軟體系統流程圖,由於資料相關性單純、執行緒中 不會有不定時間的等待現象、除了與FPGA 外沒有跟其他周邊溝通,因此 我們簡單使用單一執行緒(Single Task)去架構 DSP 端系統,當 FPGA 填 滿一個內部暫存記憶體時,DSP 會透過外部記憶體介面直接向 FPGA 抓取 八通道的聲音資料,取得聲音資料後直接通過 10 階的空間濾波器對聲音 做純化的動作,經過空間濾波器後,聲音資料會從八通道合成單一通道聲 音,並給語音活動偵測系統來判別是否為真人語音,由於純化後的聲音由
─31─
於大幅壓抑了背景雜訊能量,因此可提高語音活動偵測判斷正確率,而純 化後的聲音資訊除了做語音活動偵測外,也會透過 DSP/BIOS LINK 的 Share Memory 機制送至 ARM 端供周邊使用,做即時性的輸出。
語音活動偵測的判斷結果,會引發兩種不同的程式流程,若語音活動 偵測系統判斷該聲音不為語音而是背景雜訊,則空間濾波器參數更新系統 會使用此聲音資訊對濾波器參數作訓練與更新,如此才能對不同環境不同 時間點的背景雜訊做適應性的調整,空間濾波器參數更新系統會從資料庫 中選一筆訓練用語音資料與參數出來,然後跑適應性演算法NLMS 對參數 作訓練,至於選取哪一筆訓練用語音資料與參數則是決定在於要對哪個方 位做語音純化動作,也就是需要知道發聲者方位,而初始設定為陣列零度 位置。
若語音活動偵測系統判斷該聲音為語音,接著我們會執行聲源方位偵 測系統去估測發聲者方位,估測出的方位角度一來會提供給空間濾波器參 數更新系統,作為選取哪一筆訓練用語音資料與參數的依據,二來也會傳 至ARM 端供系統周邊使用。完成整個程式流程後,DSP 會等待下一次抓 取FPGA 資料。
─32─
圖3-18 ARM 端軟體系統流程圖
圖 3-18 為 ARM 端軟體系統流程圖,ARM 主要負責周邊控制,所以 有一部分的程式是在跟周邊做溝通,我們把影像與聲音部分分割成兩個子 程序執行,但聲音程序部分大多都在DSP 實現了,因此在 ARM 只負責接 收DSP/BIOS LINK 傳遞的聲音資料並由 AUDIO OUT 做類比輸出,此外 ARM 在聲音子程序部分還會接收 DSP 傳來的發聲者方位資訊,透過 RS232 對 PTZ 攝影機做伺服控制,因此在聲音子程序中我們使用了兩個 pthread
圖 3-18 為 ARM 端軟體系統流程圖,ARM 主要負責周邊控制,所以 有一部分的程式是在跟周邊做溝通,我們把影像與聲音部分分割成兩個子 程序執行,但聲音程序部分大多都在DSP 實現了,因此在 ARM 只負責接 收DSP/BIOS LINK 傳遞的聲音資料並由 AUDIO OUT 做類比輸出,此外 ARM 在聲音子程序部分還會接收 DSP 傳來的發聲者方位資訊,透過 RS232 對 PTZ 攝影機做伺服控制,因此在聲音子程序中我們使用了兩個 pthread