Monday, February 02, 2004

The cocktail party problem

在一個雞尾酒會場上,假設有人事先在三個不同的位置分別安置了三支麥克風,意圖監聽大家的談話。由於酒會是在開放的場所舉行,麥克風錄到相互混雜的嗡鬧聲,很難好好地監聽出想要的情報。

想像你是當事人,面對好不容易錄下來的東西竟然無法派上用場,該如何是好呢?

為了解決這個難題,我們必須由各個麥克風錄到的資料中,把想要的聲音解析出來,這就是所謂的 Blind Source Separation, BSS 。

本學期生醫訊號處理(Biomedical Signal Processing)課程的 term project ,就是要利用獨立分量分析(independent component analysis, ICA)來達到 BSS 的效果。老師雖然沒限定大家實作的工具,但面對如此紛雜的矩陣及行列運算,不用 Matlab 這種好用的工具,那真是自找麻煩。以下是我完成專案的 Screen Shot:

程式一開始先在左上角的選單決定要載入的 Blind Sources ,其波形會在左邊的畫布顯示。決定好參數,並按下 Analysis 扭,我們要的訊號波形會出現在右邊的畫布。除了可以選取個別的波形來觀察外,我們還可以聽聽分解前的混音,及分解後的清音。

以這次拿來測試的聲音訊號來說,原始訊號混雜著男高音演奏、交響樂曲、搖滾歌唱、新聞撥報等四種聲音。分解出來後果然是原音重現,乾乾淨淨的,一點混雜都沒有,效果好到令我大吃一驚。

在 Pattern Recognition 課堂上,蔡文祥老師一再地提醒我們,資訊系的學生所受的訓練中,會傾向於利用合成(synthesis)的方式來解決問題,以後在解題時要是遇到瓶頸,不要忘了還有個很有用的方式,那就是利用分析(analysis)手段來處理問題。雖然當時他的目的是要強調他上課所教授的東西不只是抽象的數學式子,而是很實用的工具,還是無礙於此時此刻,在我內心響起共鳴。

Tags: [] [] [] [] [] []

3 comments:

阿怪 said...

完了完了....
你們的工作會讓我失業

York said...

To 阿怪:

您應該不必太擔心啦,因為就我知道的,這個東西現階段主要的應用是在分析腦電圖(EEG)上面。

應該還沒人想到要用在 DJ 軟體方面,畢竟大家的專業不同 :)

York said...

在剛開始玩 Python 沒多久時,原本想順便把我先前用 Matlab 寫的 ICA 移植到 Python 上的,後來發現網路上不但已經有人寫了 FastICA 的 Python wrapper ,其 Python 原生版也已存在。這裡就不再重新發明輪子了。