本文是下面這篇文章的延伸:

王贇 Maigo:10676 怎樣暴力讀取二進位數據文件?

zhuanlan.zhihu.com
圖標

零、引言

  在上周的工作中,我遇到了這樣一個需求:我從一個程序運行的中間過程中截獲了一段二進位數據。我知道數據的內容是一段音頻波形,但並不知道其具體格式。我該如何打開它呢?

  音頻波形的格式,主要包括以下三個參數:

  ● 聲道數:是單聲道還是雙聲道;

  ● 採樣率:每個聲道每秒鐘有多少個採樣點;  ● 採樣點格式:常見的格式包括 8 位有符號整型、16 位有符號整型、32 位浮點型,還有 μ-law、A-law 兩種壓縮格式。

比如,用 Cool Edit Pro 打開一個沒有文件頭的 wav 文件時,它就會詢問你上面三個參數。

  用之前那篇文章的方法,可以辨別三種非壓縮的採樣點格式(兩種壓縮格式暫不考慮)。採樣率也比較容易試探出來:常見的採樣率有兩個系列,一個是 11025 Hz、21050 Hz、44100 Hz;另一個是 8000 Hz、16000 Hz。如果用錯誤的採樣率來播放音頻,那麼音頻的音高和速度都會明顯不對。如下面的視頻所示,原始音頻 (1a) 是 11025 Hz 採樣的劉歡《好漢歌》的第一句。如果播放時的採樣率過高(1b, 16000 Hz),放出來的聲音就會尖利、迅速,劉歡的歌聲就會變成李娜;如果播放時的採樣率過低(1c, 8000 Hz),放出來的聲音則會低沉、緩慢,劉歡的歌聲就變成了崔健。

視頻封面

00:20播放音頻時採樣率錯誤的效果

  比起採樣點格式和採樣率,聲道數猜測起來則比較困難。比如,一段音頻應該是單聲道、16 kHz 採樣,還是雙聲道、8 kHz 採樣的呢?這篇文章,就來講解如何利用信號處理的知識,結合人類的聽覺與視覺,分辨一段二進位數據是單聲道還是雙聲道音頻。如果你剛剛學過數字信號處理課程,本文的內容將是一個非常好的練習。

  本文的主體部分將解答下面兩個問題:

  ● 如果把一段單聲道、16 kHz 採樣的音頻當成雙聲道、8 kHz 採樣打開,會發生什麼?

  ● 如果把一段雙聲道、8 kHz 採樣的音頻當成單聲道、16 kHz 採樣打開,會發生什麼?

當然,上面的 8 kHz、16 kHz 採樣率也可以換成 11025 Hz、21050 Hz,或者 21050 Hz、44100 Hz。在這兩個問題的答案的基礎上,我會總結出辨別單聲道與雙聲道音頻的通用流程。

  本文中的視頻都是用 Matlab R2017b 版本製作的,代碼及使用的音頻片斷可以在這裡下載。

一、把單聲道音頻當成雙聲道打開,會怎樣?

  假設我們有一段單聲道、16 kHz 採樣的音頻,它的各個採樣點為 x_0, x_1, x_2, x_3, x_4, x_5, ldots 。如果把它當成雙聲道、8 kHz 採樣打開,則會得到兩個聲道,其中左聲道為 x_0, x_2, x_4, ldots ,右聲道為 x_1, x_3, x_5, ldots

  不難看出,兩個聲道的內容都可以看成是把原信號直接降採樣得到的結果。數字信號處理的理論告訴我們,在對一個信號降採樣之前,需要先進行低通濾波,否則信號的頻譜會發生混疊(aliasing)。這種低通濾波也稱為「抗混疊濾波」(anti-aliasing filtering)。例如,一段 16 kHz 採樣的信號,其頻譜範圍為 0 ~ 8 kHz(負頻率部分省略,下同)。如果直接把它降採樣至 8 kHz,那麼 4 ~ 8 kHz 這部分頻譜就會被翻折到 0 ~ 4 kHz 的頻段去,與原有的頻譜混疊;翻折下來的頻譜,聽起來就會表現為雜音。若要消除這種雜音,就需要在降採樣之前,先用一個截止頻率為 4 kHz 的濾波器對信號進行濾波。

  下面的視頻中,(2a) 是單聲道、16 kHz 採樣的《好漢歌》,(2b) 是把它當成雙聲道、8 kHz 採樣打開後的效果。從語譜圖上可以隱約看到 1 秒及 4 秒處產生了混疊現象:高頻處有一些諧波產生了交叉。語音的各次諧波本應具有相同的走向,要麼一起上升,要麼一起下降;這種交叉,就是 4 kHz 以上的頻譜被翻折下來的結果。不過,由於語音、音樂等常見聲音信號里低頻段的能量往往顯著高於高頻段的能量,把單聲道音頻當成雙聲道打開造成的混疊現象往往不明顯。本例中的混疊,必須要靠觀察語譜圖才能看出來,僅靠聽覺是完全注意不到的。

  作為參考,視頻中的 (2c) 是把 16 kHz 採樣的《好漢歌》按照正確方式(即先進行抗混疊濾波)降採樣至 8 kHz 的效果。它的頻譜比 (2b) 要「乾淨」一些,這正是因為沒有發生混疊現象。

視頻封面

00:21把單聲道音頻按雙聲道打開的效果

二、把雙聲道音頻當成單聲道打開,會怎樣?

  假設我們有一段雙聲道、8 kHz 採樣的音頻,它的左聲道為 L = l_0, l_1, l_2, ldots ,右聲道為 R = r_0, r_1, r_2, ldots 。把它當成單聲道、16 kHz 採樣打開,則會得到這樣一段信號: l_0, r_0, l_1, r_1, l_2, r_2, ldots 。這段信號應該怎麼分析呢?

  我們當然可以把它當成 l_0, 0, l_1, 0, l_2, 0, ldots0, r_0, 0, r_1, 0, r_2, ldots 兩段信號的疊加。不過,雙聲道音頻的兩個聲道往往大同小異,這兩個信號在疊加時,會發生類似於「干涉」的現象,不太好分析。為了避免「干涉」效果的影響,我們把原信號的左、右兩個聲道都分解成「同」的部分與「異」的部分的組合: l_i = c_i + d_ir_i = c_i - d_i 。這裡,信號 C = c_0, c_1, c_2, ldotsD = d_0, d_1, d_2, ldots 的相關性就比原先的兩個聲道弱多了。信號 CD 分別稱為「中置聲道」和「側邊聲道」;下面的視頻就展示了雙聲道、8 kHz 採樣的《好漢歌》(3a) 的中置聲道 (3b) 與側邊聲道 (3c) 的內容。可以注意到,人聲成分幾乎完全包含在中置聲道里,側邊聲道中只含有一點兒混響 —— 這正是「兩聲道相減消除人聲」背後的原理。

視頻封面

00:21中置聲道與側邊聲道

  經過了上述分解,以單聲道、16 kHz 採樣格式打開時得到的信號,就可以看成是如下兩段信號的疊加了:

egin{array}{rrrrrrrrr} & & l_0, & r_0, & l_1, & r_1, & l_2, & r_2, & ldots \ & = & c_0, & c_0, & c_1, & c_1, & c_2, & c_2, & ldots \ & + & d_0, & -d_0, & d_1, & -d_1, & d_2, & -d_2, & ldots end{array}

  其中第一部分 c_0, c_0, c_1, c_1, c_2, c_2, ldots ,可以看成是 8 kHz 採樣的中置聲道 C = c_0, c_1, c_2, ldots 升採樣至 16 kHz(得到 c_0, 0, c_1, 0, c_2, 0, ldots )後,再與信號 1,1 卷積的結果。下面的視頻展示了這一變化過程。視頻中 (4a) 是原始的、8 kHz 採樣的中置聲道 C ,其頻譜範圍為 0 ~ 4 kHz。升採樣操作得到 (4b),它將頻譜範圍擴展到 0 ~ 8 kHz,其中 4 ~ 8 kHz 部分的頻譜,就是把 0 ~ 4 kHz 的頻譜翻折上去得到的。翻折上來的頻譜在聽覺上會表現為高頻雜音;由於原始信號 C 中往往最低頻處能量最高,這個雜音也往往集中在最高頻處。之後與信號 1,1 卷積得到 (4c),這一步卷積相當於低通濾波,它會加強低頻段處原有的頻譜,而削弱高頻段處翻折上去的頻譜。上一步產生的高頻雜音,此時就被大大地削弱了。

視頻封面

00:21中置聲道的變化過程

  而第二部分 d_0, -d_0, d_1, -d_1, d_2, -d_2, ldots ,則可以看成是 8 kHz 採樣的側邊聲道 D = d_0, d_1, d_2, ldots 升採樣至 16 kHz 後,再與信號 1, -1 卷積的結果。這一變化過程由下面的視頻演示。與中置聲道不同的是,信號 1, -1 是一個高通濾波器,它會削弱低頻段處原有的頻譜,而增強高頻段處翻折上去的頻譜,所以升採樣產生的高頻雜音愈發明顯。

視頻封面

00:21側邊聲道的變化過程

  把中置聲道和側邊聲道的變化結果疊加起來,得到的信號如下面視頻中 (6c) 所示。這就是把雙聲道音頻當成單聲道打開的總效果。從聽覺上講,信號 (6c) 中有一個貫穿始終的高頻雜音,它主要來自原始信號的側邊聲道。從視覺上講,信號 (6c) 的語譜圖乍一看是上下對稱的,但仔細看能發現很多不對稱之處,比如 1 秒處低頻段人聲的諧波很明顯,但高頻段處則沒有與之對稱的諧波。這是因為,低頻段處的信號主要來自中置聲道,而高頻段處的雜音主要來自側邊聲道。

視頻封面

00:21中置聲道與側邊聲道變化的疊加

三、總結

  總結一下本文兩部分的結論:

  ● 把單聲道音頻當成雙聲道打開,會發生混疊現象,但這種混疊往往很微弱,僅靠聽覺注意不到,必須用眼睛觀察語譜圖才能發現;

  ● 把雙聲道音頻當成單聲道打開,會產生明顯的異常:用耳朵聽會發現有持續的高頻雜音,用眼睛觀察會看到語譜圖近似呈上下對稱狀。

  據此,在不知道一段音頻是單聲道還是雙聲道時,可以先按單聲道格式打開。如果聽起來有高頻雜音、語譜圖近似呈上下對稱狀,則說明音頻實際上應該是雙聲道格式;否則音頻就是單聲道無誤了。


推薦閱讀:
相关文章