首頁學習專欄

知道幾時有人講嘢,唔等於知道邊啲成分係噪聲。

咪高峰記錄嘅係混合訊號:你把聲加埋風扇聲。VAD 只判斷邊段時間有人講嘢;時間門控就將呢個答案當成開關。頻譜降噪問得更仔細:喺某一刻、某個頻率,訊號應該保留幾多。

先分開

一句「執靚把聲」,其實可能包括四種唔同工作。

錄音唔會預先分好「人聲軌」同「風扇軌」。每一刻,檔案入面只有兩種聲音疊埋一齊嘅結果。

y(t) = s(t) + n(t)

你一路講嘢,旁邊風扇一路轉。咪高峰記錄嘅係兩者相加後嘅壓力變化,當中冇預先分好嘅「人聲」同「風扇」。

技術主要判斷或處理啲乜輸出
VAD邊啲時間似係語音標籤、分數或者語音時段
語音增強混合訊號入面邊啲成分要壓低處理後嘅聲音
目標說話人擷取多人一齊講嘢時要保留邊個其中一個人嘅聲音
均衡、壓縮、音量調整音色同音量變化重新平衡後嘅同一混合訊號

下面會沿用上一頁嘅波形、頻譜同聲譜圖。例子係教學合成音:幾個元音、一段 s,再加穩定背景噪聲。

同一段

時間門控,同簡單頻譜降噪有咩分別?

教學合成:元音 + s 類摩擦聲 + 穩定背景噪聲。三圖用相同色階。

A混合錄音講嘢同停頓期間都有背景噪聲
B根據真實語音時段做門控停頓變靜,但講嘢期間仍然係語音加噪聲
C簡單頻譜降噪講嘢期間嘅噪聲亦會減少,但仍有殘留同語音失真

綠色短線代表已知語音時段,包括 s。B 直接使用正確時段,唔係 VAD 模型預測;顏色越深,頻譜能量越強。C 由開頭冇語音嘅部分估計噪聲,只係簡單示範,唔代表現代模型嘅效果上限。

三段用相同播放增益,中間空半秒。

  • A → B:冇語音嘅時間變成空白;講嘢期間,背景噪聲仍然存在。
  • A → C:講嘢期間嘅背景能量亦被壓低,同時盡量保留語音結構。
  • s 所在區域本身就似一片高頻噪聲,但其實係必須保留嘅語音成分。

s、f、sh 喺聲譜圖上可以好似噪聲。如果將所有「似嘶聲嘅嘢」刪走,輔音亦會一齊消失。

圖 B 刻意使用已知嘅正確語音時段,將偵測錯誤排除。就算 VAD 完全準確,時間門控亦清唔走講嘢期間一齊錄入嘅風扇聲。

VAD

語音活動,唔等於聲帶正在週期性振動。

VAD 回答嘅係時間問題。佢將錄音分成短幀,再根據唔同頻帶嘅能量同隨時間變化,估計每一幀有冇語音。

  • s、f、sh 呢類清輔音冇穩定 F0,但仍然係語音。
  • 機械嗡聲可以好有週期性,但唔代表有人講嘢。
  • 所以 VAD 唔可以簡化成「偵測到 F0 就保留」。

同上一頁一樣,週期性只係其中一個線索,唔係判斷語音嘅定義。

最簡單做法係音量超過門檻就當有人講嘢,但拍枱夠響都唔係語音,細聲講嘢亦可能被漏掉。較完整方法會結合多個頻帶嘅能量同統計特徵,例如傳統 WebRTC VAD;Silero 呢類模型就可以輸出語音時段。

實際系統亦會加入時間緩衝,避免遇到極短停頓就即刻關閉;確認開始講嘢後,亦會保留前面快取嘅一小段聲音,減少「第一個字畀人食咗」或者「尾音突然斷咗」。之後要靜音、截取定送去辨識,就由後續模組決定。

將 VAD 判斷當成音訊開關,就係時間門控:有語音時打開,冇語音時關閉或者淡出。

但當你講嘢嗰陣,風扇仍然響緊。門控放入嚟嘅,仍然係「語音 + 風扇」。

頻譜遮罩

由「呢一段時間」,細分到「呢一刻嘅呢個頻率」。

聲譜圖每個小格都代表一個時間同一個頻率。抑制式降噪會為每格計算一個增益遮罩,決定保留幾多訊號,再經逆變換同重疊相加還原成聲音。

Ŝ(t, f) = G(t, f) Y(t, f)

  • Y(t, f):混合聲音的複數頻譜
  • G(t, f):呢個位置嘅保留比例
  • Ŝ(t, f):處理後估計得到的語音頻譜

增益接近 1,代表大部分訊號會保留;接近 0,就代表大幅壓低。

混合錄音一條波形,語音加噪聲
→
分幀與頻譜短窗重疊,再做頻譜分析
→
估計增益每個時頻位置該保留多少
→
還原為聲音調整頻譜,逆變換再拼接

教學用遮罩示例:喺 [a] 嘅某一刻,共振峰附近保留較多,其餘位置壓低。呢個唔係訓練出嚟嘅模型。

時間門控好似控制聲譜圖一整列嘅開關;頻譜遮罩就可以分別處理同一列入面嘅唔同格子。

如果同一格同時有人聲同噪聲,乘上一個增益時,兩者都會一齊縮小。改善來自保留以語音為主嘅格子,同時壓低以噪聲為主嘅格子;遮罩唔能夠喺單一格入面完美分離兩種聲源。

傳統方法可以先觀察冇語音嘅時段,估計背景噪聲喺各頻率嘅平均功率。估計嘅係風扇聲統計特徵,唔係將開頭一小段波形複製出嚟直接相減,因為風扇瞬時波形會一直變。VAD 可以協助判斷幾時適合更新噪聲估計,但唔係所有降噪系統都需要獨立 VAD。

神經網絡降噪會由大量「乾淨語音 + 噪聲」例子學習增益遮罩,而唔係依靠人手規則。不過模型仍可能將氣聲、細聲說話或者某啲擦音當成噪聲。突然敲鍵盤或者杯碰枱,比穩定風扇難處理,因為之前嘅噪聲估計已經唔再吻合。

要保留邊把聲

想「突出人聲」,首先要知道你想保留邊個人。

如果情況係「我把聲 + 風扇」,一般語音增強就屬於合適方法。

如果係「我同旁邊嘅人一齊講嘢」,兩把聲都有諧波、共振峰同語音節奏。一般 VAD 會將兩個人都判斷為語音,單靠「係咪人聲」分唔到要留邊個。

呢個時候就需要額外資料。

常用線索包括:

  • 說話人身分:提供目標說話人嘅參考錄音;Google VoiceFilter 就採用呢種做法。
  • 聲源方向:利用多個咪高峰比較到達時間同相位差,再向目標方向做波束成形。
  • 聲音類別:由歌曲抽取歌聲、壓低伴奏,屬於另一類聲源分離工作。
處理改變咗啲乜要留意啲乜
均衡 EQ調整唔同頻帶嘅強弱同人聲重疊頻帶嘅噪聲亦會改變
動態壓縮、自動增益收窄或者調整音量變化細聲段嘅背景噪聲可能一齊被推高
去混響減少房間反射造成嘅拖尾同壓低風扇聲係兩個問題
目標說話人擷取盡量保留指定說話人需要身分等線索,其他聲音仍可能滲入

單純將整段錄音放大,唔會提高訊噪比。如果人聲功率係 4、噪聲功率係 1,一齊放大之後比例仍然係 4:1。

點樣比較

判斷降噪效果,唔可以淨係聽停頓有幾靜。

真正要留意嘅係講嘢期間嘅細節。

  • 第一個字同最後一個字係咪完整?
  • s、f、sh 呢類較弱輔音仲喺唔喺度?
  • 講嘢期間嘅背景噪聲有冇真正減少?
  • 有冇出現水聲、金屬聲、忽大忽細或者斷續?
  • 背景靜咗之後,內容係咪更易聽清楚,而且聲音仍然自然?

最直接嘅例子係:如果將「沙」入面嘅摩擦聲壓得太多,背景可能乾淨咗,但個字反而唔清楚。降噪永遠要喺壓低噪聲同保留語音之間取捨。

核對

先諗答案,再撳。

令停頓變靜好容易;講嘢期間嘅混合訊號,先係真正考驗。

1. 如果 VAD 完全正確,再按結果做時間門控,講嘢時嘅風扇聲會消失嗎?

2. s 冇穩定 F0,VAD 應唔應該將佢刪走?

3. 同一個時頻格同時有共振峰同風扇聲,增益設為 0.5 會點?

4. 將整段錄音一齊放大。人聲係 4,噪聲係 1,新訊噪比係幾多?

5. 降噪後停頓好靜,但「沙」變得唔清楚,應該點評價?

噪聲會影響判斷,錄音完整先睇得準音高。

如果門控食咗第一個字,或者頻譜遮罩壓走 s,聲調圖就會因為訊號缺失而斷開。揀一個背景穩定嘅地方錄音,再用粵調比較 F0 軌跡。