摘要:為了識別兩路頻譜混疊語音信號,多采用盲信號分離的方法。但是該方法在工程實踐中實現較困難。因此給出了一種利用盲源信號分離的原理及特點的實現方法,具體說明了用FastICA算法在ADSP_BF533平臺上實現盲源信號分離時的具體流程。該設計方案所需時間短,效率高,而且占用內存較少。
關鍵詞:盲信號分離;DSP;FastICA;ADSP_BF533平臺
0 引言
近年來,許多學者都針對盲信號分離不斷地提出新的理論算法,盲信號分離(BSS)發展也日趨完善。而用DSP器件實現這種技術具有很大意義。本文提出了盲源信號分離的實現原理、算法和實現步驟,并對利用DSP實現時經常出現的問題提出了解決方案。
盲信號分離是指在傳輸信道特性和輸入信息未知或者僅有少量先驗知識的情況下,只由觀測到的輸出信號來辨識系統,以達到對多個信號分離的目的,從而恢復原始信號或信號源。它是一種在神經網絡和統計學基礎上發展起來的技術,并在近十年來獲得了飛速發展。盲源信號分離對很多領域的多信號處理與識別提供了很大方便。該技術在通信、生物醫學信號處理、語音信號處理、陣列信號處理以及通用信號分析等方面有著廣泛的應用前景。它不僅對信號處理的研究,而且也對神經網絡理論的發展起著積極的推動作用。
1 盲源信號分離的數學模型及常見算法
1.1 數學模型
盲分離問題的研究內容大體上可以劃分為瞬時線性混疊盲分離、卷積混疊盲分離,非線性混疊盲分離以及盲分離的應用四部分。當混疊模型為非線性時,一般很難從混疊數據中恢復源信號,除非對信號和混疊模型有進一步的先驗知識。圖1所示是瞬時線性混疊盲分離信號模型示意圖。
圖1中,S=[s1(t),s2(t),…,sN(t)]T是未知的N維源信號向量,A是未知的混合矩陣,n=[n1(t),n2(t),…,nN(t)]T是M維噪聲向量,X=[x1(t),x2(t),…,xM(t)]T是傳感器輸出的M維觀測信號向量,有X=AS+n,盲源分離算法要求只知道X來確定S或A。獨立分量分析(Independent ComponentAnalysis,ICA)是BSS的一種,其基本含義是把信號分解成若干個互相獨立的成分。圖1中,ICA的目標就是尋找一個分離矩陣W,使X經過變換后得到的新矢量Y=[y1(t),y2(t),…,yN(t)]T的各分量盡可能的獨立。Y=WX為待求的分離信號向量,也就是源信號S的估計值。
1.2 盲信號預處理常見算法
在盲信號處理過程中,為了減少計算量,提高系統效率,通常需要經過預處理。預處理一般包括中心化和白化。中心化是使信號的均值為零。由于在一般情況下所獲得的數據都具有相關性,所以通常都要求對數據進行初步的白化處理,因為白化處理可去除各觀測信號之間的相關性,從而簡化后續獨立分量的提取過程。而且,通常情況下,對數據進行白化處理與不對數據進行白化處理相比,其算法的收斂性較好、工作量少、效率高。
線性混疊盲分離信號模型一般都采用獨立分量分析的方法。ICA的主要依據和前提是假設源信號是獨立的,因此,自然就可以設想ICA算法的第一步是建立目標函數來表征分離結果的獨立程度。目標函數確定后,可通過各種不同的優化算法進行優化,進而確定分離矩陣W,其中有代表性的算法主要有最大信息量(Infomax)法、自然梯度法、快速獨立元分析算法(FastICA)、矩陣特征值分解法等。盲分離中經常要用到優化運算,就優化手段而言,Infomax算法、自然梯度算法屬于梯度下降(上升)尋優算法,收斂速度是線性的,速度略慢一些,但屬于自適應方法,且具有實時在線處理能力;FastICA算法是一種快速而數值穩定的方法,采用擬牛頓算法實現尋優,具有超線性收斂速度,通常收斂速度較梯度下降尋優算法快得多;矩陣特征值分解方法一般通過對矩陣進行特征分解或者廣義特征分解來估計分離矩陣,這是一種解析方法,可直接找到閉形式解(Closed Form Soutions),由于其沒有迭代尋優過程,因此運行速度最快。
2 盲源信號分離的DSP實現方法
2.1 實現原理
由于FastICA算法和其他的ICA算法相比,具有許多人們期望的特性:如收斂速度快、無需選步長參數、能夠通過選擇適當的非線性函數g來最佳化、能減小計算量等。同時也有許多神經算法的優點,如并行、分布式且計算簡單,內存要求很少等。因此,FastICA得到了廣泛的應用。本文就采樣了這種算法。
2.2 實現方法
基于負熵最大的FastICA算法的基本原理是基于中心極限定理。即:若一隨機變量X由許多相互獨立的隨機變量Si(i=1,2,…,N)之和組成,那么,只要Si具有有限的均值和方差,則不論其為何種分布,隨機變量X較Si更接近高斯分布。由信息論理論可知;在所有等方差的隨機變量中,高斯變量的熵最大,因而可以利用熵來度量非高斯性,常用熵的修正形式,即負熵。因此,在分離過程中,可通過對分離結果的非高斯性度量來表示分離結果間的相互獨立性,當非高斯性度量達到最大時,表明已完成對各獨立分量的分離。
負熵的定義公式如下:
式中:YGauss是與Y具有相同方差的高斯隨機變量,H(·)為隨機變量的微分熵,其表達式為:
當Y具有高斯分布時,Ng(Y)=0;Y的非高斯性越強,其微分熵越小,Ng(Y)值越大,所以,Ng(Y)可以作為隨機變量Y非高斯性的測度。由于根據公式計算微分熵時,要知道Y的概率密度分布函數不切實際,于是可采用如下公式:
式中:E[·]為均值運算;g(·)為非線性函數,其表達式可用下列非線性函數表示:
這樣就可以算出一個獨立分量,但每次迭代完成后,還應對Wi進行歸一化處理。當計算n個獨立分量時,需要n個列矢量,并且每次迭代后,都需進行線性組合以去掉相關性。
3 軟硬件實現
3.1 硬件平臺
Blackfin處理器以RISC編程模型突破性地把信號處理性能和電源效率結合起來。這種處理器在統一的結構中可提供微控制器(MCU)和信號處理兩種功能,并可以在控制和信號處理兩種功能需求之間靈活的劃分。
本硬件系統包含ADSP-BF533處理器,32 MBSDRAM MT48LC32M16A2TG,2 MB FLASHPSD4256G6V,ADV1836音頻編解碼器等,其系統結構框圖如圖2所示。
3.2 軟件實現
Matlab仿真成功后,還需要用硬件來實現。這里以選用ADSP_BF533為例進行闡述。其流程圖如圖3所示。在用DSP編程實現時,其常見問題首先是白化處理中要用到特征值分解,采用的方式是進行多次QR分解。
為了使人耳可以分辨出不同的聲音,觀測時間應該足夠大,在AD1836采集頻率為48kHz時,采集約為22s的聲音信號,其需要處理的數據長度為48K×22b,約為一百萬個點。在常規的程序設計中,對此信號的處理就需要定義長度為一百萬的數組,這遠遠的超出了內存容量,故其解決方案是直接訪問(包括讀寫)存儲在SDRAM中的數據,并把原來程序中的數組運算修改為針對每個元素的運算。每個元素均可直接訪問SDR-AM,而不必將保存在SDRAM中的數據通過數組的方式傳遞到內存中。這就相當于用時間換取內存空間。
AD1836采集的數據為24位的二進制有符號整形數據。為了提高精度,減小誤差,應選用32位而不是16位的數據格式進行處理。從24位到32位的轉換可采用的方案如下:
對于負數:
其次,為了保證處理過程中的精度,還可選擇將data轉為float運算的方法。
一般地,處理完的數據數值很小,范圍在(-10,10)之間,而播放時必須經過D/A,但D/A本身的熱噪聲會帶來很大的誤差,信噪比顯然無法容忍。對此,其解決辦法是將處理完的數據乘以較大的數值,這樣,聲音信號的相對值并沒有發生改變,因而播放時可達到良好的效果。這一方法也是用數字電路工具(如DSP,FPGA等)處理模擬信號時的常用方法。
4 實際效果
圖4所示是兩段錄音的音頻信號時域圖,圖5則是經過瞬時線性混合后的信號時域圖,圖6是經過在BF533平臺上利用FastICA算法得到的分離后的信號時域圖。實驗發現,圖6所示的結果分離效果良好,可以清楚地聽到不同的源信號。
5 結論
本文首先簡單介紹了盲信號分離的數學模型以及常用的理論算法。之后詳細介紹了用ADSP_BF533實現盲信號分離時的具體流程以及實現過程中常見問題的解決方案。本設計方案所需時間短,效率高,而且占用內存較少。在工程應用方面具有一定的參考價值。