咪高峰記錄嘅係混合訊號:你把聲加埋風扇聲。VAD 只判斷邊段時間有人講嘢;時間門控就將呢個答案當成開關。頻譜降噪問得更仔細:喺某一刻、某個頻率,訊號應該保留幾多。
先分開
一句「執靚把聲」,其實可能包括四種唔同工作。
錄音唔會預先分好「人聲軌」同「風扇軌」。每一刻,檔案入面只有兩種聲音疊埋一齊嘅結果。
y(t) = s(t) + n(t)
你一路講嘢,旁邊風扇一路轉。咪高峰記錄嘅係兩者相加後嘅壓力變化,當中冇預先分好嘅「人聲」同「風扇」。
| 技術 | 主要判斷或處理啲乜 | 輸出 |
|---|---|---|
| VAD | 邊啲時間似係語音 | 標籤、分數或者語音時段 |
| 語音增強 | 混合訊號入面邊啲成分要壓低 | 處理後嘅聲音 |
| 目標說話人擷取 | 多人一齊講嘢時要保留邊個 | 其中一個人嘅聲音 |
| 均衡、壓縮、音量 | 調整音色同音量變化 | 重新平衡後嘅同一混合訊號 |
下面會沿用上一頁嘅波形、頻譜同聲譜圖。例子係教學合成音:幾個元音、一段 s,再加穩定背景噪聲。
同一段
時間門控,同簡單頻譜降噪有咩分別?
教學合成:元音 + s 類摩擦聲 + 穩定背景噪聲。三圖用相同色階。
三段用相同播放增益,中間空半秒。
- 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,就代表大幅壓低。
時間門控好似控制聲譜圖一整列嘅開關;頻譜遮罩就可以分別處理同一列入面嘅唔同格子。
如果同一格同時有人聲同噪聲,乘上一個增益時,兩者都會一齊縮小。改善來自保留以語音為主嘅格子,同時壓低以噪聲為主嘅格子;遮罩唔能夠喺單一格入面完美分離兩種聲源。
傳統方法可以先觀察冇語音嘅時段,估計背景噪聲喺各頻率嘅平均功率。估計嘅係風扇聲統計特徵,唔係將開頭一小段波形複製出嚟直接相減,因為風扇瞬時波形會一直變。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 軌跡。
JYUTONE