頻譜圖 是什麼?
Spectrogram:頻譜圖 的完整解釋
時頻表示,將音訊訊號分解為時間與頻率的二維矩陣,視覺化與分析訊號特徵的基本工具。
頻譜圖(Spectrogram)是音訊訊號分析與可視化的基礎工具,打開任何現代音訊編輯軟體都能看到它的身影。從物理上,它揭示了聲音在時間與頻率維度上的能量分布;從機器學習角度,它是現代語音與音訊分類模型的主要輸入特徵。
短時傅立葉變換(STFT)基礎
傅立葉變換將時域訊號轉換為頻域,但喪失時間資訊:無法知道某個頻率何時出現。短時傅立葉變換(Short-Time Fourier Transform,STFT)克服此問題:
STFT(t, f) = ∫ x(τ) × w(τ - t) × e^(-j2πfτ) dτ
簡化言,STFT 是:
- 將訊號分幀(幀長 N,幀移 M)。
- 對每一幀應用窗函數,減少邊界失真。
- 對每一幀進行 FFT。
- 提取每幀的頻譜幅度(magnitude)與相位(phase)。
頻譜圖的構造
輸出:時頻矩陣 S,維度 (F, T),其中 F 是頻率 bin 數,T 是時間幀數。
S[f, t] = | STFT(t, f) |
視覺化:
- 橫軸:時間(秒)
- 縱軸:頻率(Hz)或梅爾刻度(Mel)
- 色深或灰度:能量大小(dB 或線性刻度)
參數與設計選擇
窗函數(Window Function)
- 漢寧窗(Hanning):最常用,50% 重疊時無光譜洩漏。
- 哈姆明窗(Hamming):旁瓣更低,但主瓣稍寬。
- 高斯窗:時頻局限性最好(Heisenberg 原則的下限)。
- 權衡:寬窗口 → 頻率解析度好但時間解析度差;窄窗口 → 反之。
幀長(Window Size)與幀移(Hop Length)
- 語音:通常 20-25 ms 幀長,10 ms 幀移(50% 重疊)。
- 音樂:4096-8192 點(~ 93-186 ms @ 44.1 kHz),2048 點幀移。
- 時間-頻率取捨:長幀 → 頻率解析度高但時間解析度低;短幀 → 反之。
FFT 大小(N_fft)
- 通常 512(10 ms @ 51.2 kHz)到 2048(~ 46 ms)。
- 零填充(zero-padding)到 2 的冪,加速 FFT 計算。
頻率軸線性 vs. 梅爾
- 線性頻譜圖:頻率均勻分布,適合頻譜分析細節。
- 梅爾頻譜圖:頻率按梅爾刻度分布,符合人耳感知,適合音樂與語音任務。
頻譜圖的物理與直觀解釋
在頻譜圖上可直觀看到:
基頻與諧波
- 基頻:最低的水平暗紋。
- 諧波:整數倍基頻位置的明亮線條,對語音辨識中的說話者識別很重要。
甲音與共振峰
- 共振峰(Formants):語音特徵,表現為集中的能量帶。
- 不同元音有不同的共振峰特徵(例如 /a/ 的 F1 ~ 700 Hz, F2 ~ 1200 Hz)。
瞬發聲學事件
- 爆破音、摩擦音等的突發能量。
- 音樂中鼓聲、鋼琴敲擊的瞬間。
白噪聲 vs. 有色噪聲
- 白噪聲:全頻均勻亮度。
- 背景噪聲:通常能量集中在低頻。
頻譜圖與神經網路
現代語音與音訊識別模型(CNN、Transformer)將頻譜圖視為圖像:
- 梅爾頻譜圖 (1, F, T) → 單通道 2D "圖像"。
- 特定層的特徵圖表達了時頻模式(如過渡特徵、音樂節拍、重音)。
- 卷積濾波器自動學習有意義的時頻模式,而無需人工設計。
頻譜圖的數據增強
在訓練中常應用以下增強以提升模型魯健性:
SpecAugment
- 時間軸遮罩(Time Masking):遮蓋連續的時間幀。
- 頻率軸遮罩(Frequency Masking):遮蓋連續的頻率 bin。
- 簡單但有效,在 ImageNet 等視覺任務啟發下設計。
時間拉伸/變速
- 改變時間軸尺度(保持內容),模擬不同說話速率。
頻率位移
- 平移頻率軸,模擬不同的採樣率或聲音特性。
加性雜訊
- 在頻域或時域加入背景噪聲。
相位重建與聲碼器的角色
STFT 提取幅度譜但通常丟棄相位。要恢復波形需要:
Griffin-Lim 演算法(傳統)
- 迭代相位重建,但質量有限(重建語音聽起來機械化)。
神經聲碼器(現代)
- WaveNet、WaveGlow、HiFi-GAN 等,直接從梅爾頻譜生成波形。
- 避免相位重建的複雜性,輸出自然音質。
頻譜圖的評估與詮釋
視覺上檢視頻譜圖:
- 檢查背景雜訊水平(頻譜圖底部的「噪聲地板")。
- 識別主要頻率成分與異常(如爆炸聲、金屬聲)。
- 評估訊噪比(SNR)。
- 對比正常與異常樣本,找出判別特徵。
開源工具
- Librosa:Python 函式庫,繪製與分析頻譜圖標準選擇。
- matplotlib:基礎繪圖。
- Audacity:可視化音訊編輯工具。