TW079 特定訊號成分強化裝置

排名 獲獎學生 學校 指導教授
季軍 劉展誠、鄭俊鴻、游宇翔、洪文祺 國立東華大學
電機工程學系
孫宗瀛

1. 設計介紹

本次專案設計的目的是期望將隱蔽信號處理理論實踐於高效能的發展平台,進而使此具潛力的信號處理技術朝有機會產品化。隱蔽信號分離(Blind source separation, BSS)是一項進階的信號處理技術,其特色是在僅有混合(接收)信號的條件下還原未知的信號源,由於此理論開發過程的限制條件相當嚴苛,因此要在實際應用範疇上實現十分具有挑戰性。為了讓提升可行性,我們引進一個有效的學習技術,稱為粒子群最佳化(Particle swarm optimization, PSO),讓此系統具有較佳的適應性與處理品質。

DE1發展平台是由Altera公司所設計生產的可程式化硬體平台,此開發平台的相關周邊設計是依據目前最普遍的多媒體產品(例如VCD、DVD及MP3播放器等)規格來配置。而且其對於發展各種不同的多媒體應用也提供了許多的特性,像是8Mbyte SDRAM、4Mbyte Flash Memory、24-bit CD-Quality Audio CODEC with line-in、line-out及microphone-in jacks等,加上其高性能、低價位、且具有可程式化硬核心的特點,都相當符合本音訊處理專案的設計需求。

此外,此專案在離散傅利葉轉換(DFT)的需求較高,而多數的開發平台(包含DE1)所能提供的轉換上限通常無法滿足,利用軟體實現FFT雖然可行,但所消耗的時間成本將十分可觀,且與即時性的信號處理相互違背。因此,本專案的另一設計特點為利用DE1配有FPGA的優勢,自行設計一個管線化的Radix-4串流(stream)式計算引擎,透過SG-DMA的IP在外部記憶體元件間高速的存取資料,達到資料傳送完成即計算完成的高效率計算。

2. 功能描述

本專案設計包含下列三個主要設計區塊:

l 隱蔽音訊分離

訊號分離的方法繁多,例如預知訊源的統計特徵或是混合的比例,再設法從混合訊號中提取感興趣的訊號。然而,收集預先資訊的要求提升,相對能應用的層面隨之減少。隱蔽信號分離的特色在於用最少的預先資訊來完成信號分離。因此,本系統僅需透過一對麥克風接收環境中混合音訊,經由FFT時頻域轉換及隱蔽分離演算處理,即可以萃取出環境中數個獨立音源。然而,本專案為BSS理論實踐的初期,為求讓系統能順利運作且減少複雜度,所以這裡將針對兩個獨立音源的範疇來設計。

此功能的實現可以探究到隱蔽信號分離的原理,我們將細節關鍵分點敘述如下:

Ø 兩組接收信號轉成頻域且分別代表不同的座標時,未知的混合比例可顯現於座標平面上的樣本聚集方向。

Ø 利用聚類技術可以估測出這些聚集方向。

Ø 為了提升估測的精確度,我們加入了粒子群最佳化技術來進行聚類,有助於克服實際狀況中的諸多變因。

Ø 利用估測的混合比例與先前接收的混合音訊即可反推出原始環境中的獨立音源。

l 高效率的FFT轉換

在這次所要呈現的演算法中,離散傅利葉轉換(DFT)被用來做前置的信號處理,將信號由時域轉換至頻域。由於演算法對於頻域解析度的要求,而且為了處理語音信號,取樣率只能低至8ksps,因此需要提高DFT的轉換長度來達成讓演算法可以有效分離信號的解析度;但是隨著轉換長度的增加,會提高運算在時間上的複雜度。因此,我們設計一個高效率的FFT轉換來達到下列功能:

Ø 降低記憶體需求

為了節省記憶體使用量與頻寬需求,提出了降低旋轉因子(Twiddle Factor)使用量的演算法。旋轉因子是FFT中用來乘上資料的係數,由於旋轉因子具有對稱性,且正弦與餘弦可互換表示,因此我們將16個旋轉因子縮減成四個,大幅降低原本大量的記憶體需求。

Ø 改善記憶體效能

我們利用DE1上的GPIO擴充兩SDRAM模組,將其設計為同個時間可同時執行讀與寫的動作,雖然需要兩次提取才能得到一筆複數資料;但是將記憶體動作單純化之後,有效的舒緩匯流排的忙碌情形,而大幅提升傳輸效率。

Ø 突破原平台的效能上限

要計算上萬點的FFT,對這次的專案來說,最大的衝擊就是資源上的問題。在DE1上所使用的FPGA,完全沒有辦法實現16384點ALTRA公司所提供的FFT IP,主要的原因在於這項IP完全使用on-chip的記憶體,雖然有利於高速化運作;但是要延伸轉換長度的話會有資源上的困難。而採用軟體計算FFT這類可以高度平行化的數值計算,沒有辦法展現FPGA的優勢。我們將FFT設計成一個管線化的Radix-4串流(stream)式計算引擎,透過SG-DMA的IP在外部記憶體元件間高速的存取資料,達到資料傳送完成即計算完成的高效率計算。

l 雙通道音訊接收及訊號放大裝置

在本系統輸入訊號的取得部分,因訊號分離時,必須利用兩種不同的音源訊號。所以必須將音源訊號分為左右兩個port獨立接收,但因MIC輸入port只可作單音輸入,所以為同時取得不同的音訊輸入,必須藉由WM8731的Line IN 輸入Port ,將輸入訊號的左右聲道分別獨立接收。但Line IN輸入Port 不同於MIC輸入Port,在MIC輸入Port 因在輸入端具有一訊號放大器用以放大麥克風訊號,但Line IN輸入Port 則不具有此一訊號放大器。所以必須要在Line IN輸入Port之前先進行訊號放大,此部分再另行製作放大電路,再將音源訊號送入WM8731,之後再進行類比對數位轉換(ADC),在轉換之後分別將所取得的左右聲道數位音訊存入記憶體內。之後再由軟體系統將兩個來源的語音訊號,交由演算法處理以完成原始訊號與雜訊的分離,再交由WM8731進行數位對類比轉換(DAC),最後再經由喇叭輸出

3. 效能參數

由於本專案包含兩個主要的設計,故下面我們將分別陳述他們展現的效能情況:

  • 隱蔽信號分離
    由於原始信號錄製於真實聲音,因此細微的干擾難免會參雜其中,若直接將分離信號與其取誤差,將無法反映出真正的效能。然而,訊源還原的精確度與估測混合比例的正確性互為等價關係,故我們在此以呈現估測混合比例的效能來顯示隱蔽分離演算處理的可行性。
    表1呈現三種不同混合比例的測試範例(Real)以及最終估測(Estimate)的結果,利用均方根誤差(MSE)來呈現整體的估測正確度,從每個範例都能獲得千分之ㄧ以下的誤差可證實本演算機制的可行性。
    Case #
    Case 1
    Case 2
    Case 3
    Real
    -1
    1
    1
    2.5
    2.5
    1.3
    Estimate
    -1.0001
    1.0047
    0.9999
    2.5059
    2.5000
    1.2997
    MSE
    1.1050e-005
    1.7410e-005
    4.5000e-008
    表1、隱蔽信號分離效能指標

  • 高效能FFT轉換
    受限於外接記憶體功能與記憶體寬度的影響,計算速度上較現有的IP差;但是因為使用外部記憶體而非晶片內記憶體的緣故,轉換長度可以做到相當長,晶片內資源的使用量也不會隨著轉換長度增加而增加,因此可以提供給較低階的FPGA使用。此外,因為是可變長度的設計,編譯後並不會固定轉換長度,而是可以由NIOSII去設定。

     
    ALTERA IP
    Our Design
    轉換長度
    短(視晶片資源而定,一般晶片資源很有限)
    很長(視外接記憶體模組而定,通常DRAM容量都很大)
    轉換速度
    很快(晶片內記憶體性能極高)
    1(視外接記憶體性能)
    編譯後轉換長度可變
    晶片記憶體使用
    極高(視轉換長度而定)
    極低(固定,僅給資料緩衝使用)
    1.計算的時間理論值為:N*AC*S*CK-1+ST
    其中:
    N為轉換長度
    AC為存取一個複數資料所需的週期數
    S為stage數,等同logN
    CK為系統時脈,單位為Hz
    ST為stage間CPU設定FFT控制暫存器和啟用DMA的消耗時間
    表2、ALTERA IP與本專案設計法的效能比較

4. 設計架構

本系統設計的目標是期望將接收到的混合音訊,依據音訊來源的不同將其分離,以提升特定音源的清晰度。根據圖1,系統實際運作的流程由左而右說明如下:

  • 假設環境中存在兩個未知的主要聲源(s1與s2),兩個麥克風在與聲源相對位置不明的情況下同步收音得到混合音訊(x1與x2)。
  • 將以粒子群最佳化(PSO)為基礎的隱蔽信號分離(BSS)演算法實現於ALTERA可程式開發板。
  • 將兩組混合音訊由開發板上的音訊輸入介面匯入,接著將演算法處理後的分離音訊匯出。
  • 透過選擇器播放某個通道的音訊,可清晰的獲得音源的內容。
    圖1、系統及其應用之示意圖
     
    本系統將透過未知混合狀態的不明音源各自還原是依據隱蔽信號分離的基礎理論,而未求能有效的應用於實際的範疇,我們引入著名的演化式最佳化技術(粒子群最佳化)來提升理論的實用性。上述兩個主要區塊的運作流程根據圖2與圖3精要地說明如下:

    隱蔽信號分離(圖2)

    將麥克風接收的混合音訊讀入,並經過短時傅利葉轉換。
    粒子群最佳化依據頻域混合信號找尋未知的混合矩陣。
    比對前後兩次混合矩陣的差異,用以判斷估測的正確性。
    利用估測的混合矩陣與混合音訊反推原始音源。
    重複執行上述過程直到所有音訊處理結束。

     
    本系統將透過未知混合狀態的不明音源各自還原是依據隱蔽信號分離的基礎理論,而未求能有效的應用於實際的範疇,我們引入著名的演化式最佳化技術(粒子群最佳化)來提升理論的實用性。上述兩個主要區塊的運作流程根據圖2與圖3精要地說明如下:
    隱蔽信號分離(圖2)
    • 將麥克風接收的混合音訊讀入,並經過短時傅利葉轉換。
    • 粒子群最佳化依據頻域混合信號找尋未知的混合矩陣。
    • 比對前後兩次混合矩陣的差異,用以判斷估測的正確性。
    • 利用估測的混合矩陣與混合音訊反推原始音源。
    • 重複執行上述過程直到所有音訊處理結束。
    圖2、粒子群最佳化為基礎的隱蔽信號分離演算流程
    粒子群最佳化(圖3)
    • 每個粒子代表一組可能的估測混合矩陣。
    • 產生多個粒子並均勻地分布於解空間。
    • 根據粒子群最佳化的演化方式反覆地更新並優化粒子。
    • 迭代的運作停止於粒子的演化收斂。
    • 將最佳的估測混合矩陣輸出,並等待下一次的演化要求。
    圖3、粒子群最佳化的最佳化流程
     
    本系統的硬體設計方塊圖如圖4所示,其主要的幾項動作運作以及說明如下:
    • Flash ROM儲存系統主程式及演算法,而SDRAM與SRAM用以暫存運算過程的資料。
    • Altera soft-core CPU 為系統的中央處理單元,演算法及程式、運算暫存資料及外部匯入音訊資料不斷的輸入中央處理單元,而處理後的音訊資料亦同時向外部輸出。
    • 透過音效編解碼晶片WM8731將輸入及輸出資料流進行適當的數位類比轉換。
    • 雙麥克風及擴大器元件用以截取兩組具差異性的混合音訊,最後連接DE1的音訊輸入介面。
    • DE1的音訊輸出介面連接外部揚音器,播放分離後的音訊。
     
    圖4、系統的硬體設計方塊圖
     

5. 設計方法

同之前的闡述方式,我們將本專案三個主要區塊的方法及步驟分別說明如下:

l          隱蔽信號分離
Ø         這是本專案中軟體設計的部份,一開始將經過高效能FFT轉換為數位的音訊資料讀入。
Ø         兩筆混合音訊分別表示成二維向量的兩個成分。
Ø         利用粒子群最佳化演算法搜尋整體向量的集中位置(即未知的混合比例)。
Ø         利用混合音訊與估測的混合比例反推出原始音訊(分離音訊)。
Ø         將分離音訊進行IFFT轉換且存入暫存器等待輸出至喇叭。
l          高效能FFT轉換
Ø         為了要解決記憶體資源的問題,因此設計的第一個重點在於外部記憶體的使用上。DE1板子上的高速同步記憶體只有一顆8MB的SDRAM,已經分配給NIOSII使用,如果把資料的讀寫介面接上去的話,會造成整體fMAX下降及匯流排週期竊取等問題。因此,我們利用DE1上的GPIO擴充兩SDRAM模組,將其設計為同個時間可同時執行讀與寫的動作,雖然需要兩次提取才能得到一筆複數資料;但是將記憶體動作單純化之後,有效的舒緩匯流排的忙碌情形,而大幅提升傳輸效率。
Ø         接著為了節省記憶體使用量與頻寬需求,提出了降低旋轉因子(Twiddle Factor)使用量的演算法。旋轉因子是FFT中被用來乘上資料的係數,可以寫成以下式子:
如果用圖形來表示的話,其實就是一個單位圓切成N等分,如下圖5:

 

圖5、N=16的旋轉因子
因為數學上的對稱性質,可以將相隔180度的資料加上負號取代,如 =,對稱於90度的可以把cosine的部份加上負號,如和的關係。最後是對稱於45度,對稱於45度的話,可以將旋轉因子中的cosine與sine互換,以取代。使用了上述的數學性質之後,其實需要用到的部份幾乎只有第一象限的旋轉因子。
Ø         在本次的專案中,用的是Radix-4的butterfly網路,輸出有四個port,需要乘上、、和,因為純粹為1,所以直接寫入硬體中。在此以64點轉換於stage1的情形對演算法做說明,以下是除了所使用到的旋轉因子:     
表3、旋轉因子提取規則表
No. of step
1
2
3
4
5
6
7
8
 
Engine 1
1n
0
1
2
3
4
5
6
7
2n
0
2
4
6
8
10
12
14
3n
0
3
6
9
12
15
18
21
 
Engine 2
1n
1
8
7
6
5
4
3
2
2n
8
9
10
11
12
13
14
15
3n
16
18
20
22
24
26
28
30
Step1的時候先個別在兩個運算引擎上執行{0,0,0}和{8,16,24}這兩項旋轉因子的乘法。這個時候除了只有會被提取外,、和因為位於45度對稱軸上,16點以上的轉換的這組數值都是一樣的,所以係數是內建在硬體中。
到了Step2以後,只需要提取Engine1所需的旋轉因子,Engine2用到的旋轉因子會透過數學上的對稱關係從提取給Engine1的旋轉因子中取得,其關係式為:
1n:對稱於45度,將實部與虛部互換。
2n:對稱於90度,將實部做補數轉換。
3n:對稱於135度,將實部與虛部互換,並做補數轉換。
雖然旋轉因子只需要一個單位圓的八分之一就可以透過對稱性質提供給FFT使用;但是這裡為了讓架構精簡,只有把Radix-4 FFT所需要用到四分之三個圓的量壓縮一半到八分之三。然而透過這樣的方式,已經可以將旋轉因子的量減少一半,而且在這次的設計中,FFT所使用的兩個SDRAM模組同一個時間內只有一個可以提供出八筆複數資料給兩個運算引擎;但是提供旋轉因子的記憶體只需要供應三筆複數資料,頻寬的需求較低,因此選擇與NIOSII共用同一塊SDRAM,由系統動態分配空間。
Ø         再來,因為Radix-4FFT的特性,資料的讀取並非連續的,DMA並沒有提供這種功能,所以另外做了位址產生器,DMA只要透過這個介面存取記憶體,就可以讀寫所需要的記憶體位址。在寫入的位址產生器中,也加入了可程式的位元反轉遮罩,在執行轉換的最後一個階段的時候,只要設定指令暫存器,產生出來的位址就會透過位元反轉遮罩輸出位元反轉後的位址。目前可設定的選項:無反轉、給16點轉換用的至65536共計8組,在控制暫存器中用到4個位元去選擇。
l          雙通道音訊接收及訊號放大裝置
Ø         由於本系統輸入訊號須儘可能取得兩組具差異比例的混合音訊,所以兩組獨立接收器需保持一定的距離,但因MIC輸入介面只可作單音輸入,所以為同時取得不同的音訊輸入,必須藉由WM8731的Line IN 輸入Port,將輸入訊號的左右聲道分別獨立接收。
Ø         利用我們自製的放大電路在Line IN輸入Port之前先進行訊號放大,放大後的音訊號送入WM8731,之後再進行類比對數位轉換(ADC),在轉換之後分別將所取得的左右聲道數位音訊存入記憶體內。
Ø         輸出部分,經演算法分離出的音訊交由WM8731進行數位對類比轉換(DAC),最後再經由喇叭輸出。

 

6. 設計特點

本專案設計具有下列幾項特點:
l          演算法對預先資訊的需求小,可運用的範疇相對增加。
l          引用高效能的演化式計算技術(粒子群最佳化),有助於提升系統的強健性與適應性。
l          將FFT實踐於FPGA上,有助於突破原開發平台上的功能上限。
l          管線化的Radix-4串流(stream)式計算引擎,透過SG-DMA的IP在外部記憶體元件間高速的存取資料,使系統的運算極為有效率。
l          特殊的旋轉因子表示法,大幅降低記憶體儲存旋轉因子的空間,使系統對於記憶體需求更為精簡。
 
Altera DE1 多媒體平台協助實現設計特點:
l          硬體設計方面:
Ø         利用SOPC builder 完成各項週邊控制介面整合。
Ø         利用FPGA設計高效能FFT轉換。
Ø         進行接腳配置。
Ø         進行硬體描述語言合成。
Ø         將所完成之硬體結構燒錄製Flash上,以配置FPGA。
l          軟體設計方面:
Ø         以C 語言完成訊號分離演算法的實作。
Ø         以C語言完成原始訊號辨識的實作。
l          系統整合:
Ø         以C 語言完成軟體(演算法)及硬體(語音資料傳遞)之間的系統整合。
Ø         將所完成之軟體系統燒錄製Flash 上。
l          系統測試:
Ø         將語音訊號送入嵌入式平台,進行功能驗證。          

6、本系統的實際外觀(DE1外接SDRAM模組)

7. 總結

這次的專案在這部份,因為主要是使用外部記憶體模組,所以對FPGA on-chip的memory block的使用佔極少的比例,讓其他的部份像是系統快取或音訊資料緩衝等等需要較大量記憶體的場合有比較大的裕度。再來雖然這個設計因為受限於外部記憶體的性能因素,沒有辦法達到所提供的IP那樣的性能表現;但是因為使用了DMA和串流處理方式,只要記憶體能夠配合的話,可以達到一週期完成兩個Radix-4和旋轉因子乘法運算,然後還有考慮到匯流排的流暢度等等問題,所以也有不差的性能表現。又加上可程式的位元反轉遮罩,整個設計有高度的彈性,而不會在硬體合成後只能運算固定長度的FFT。
  理論與實際應用存在著一道莫大的鴻溝,許多的實際上的困難點經常超乎理論所探討的層面。透過本次專案設計,組員們深刻的體認到理論本身的價值需依靠實踐於應用來提升,過程中我們也發現,手邊現成的工具通常不會是最理想的解決之道,發掘問題並試著改良及導入新的技術來解決問題是本專案能順利完成的關鍵。