librosa.filters.mel其norm選項默認為"slaney",意為每個三角形濾波器的面積相同。
怎么繪制這個濾波器組的示意圖呢?
- 在百度里面搜索 "Mel-filter bank with same bank area",發現stackoverflow里面有一個相關問題。
- librosa.filters.mel的返回值為一個(n_mels,n_fft/2+1)的ndarray,默認情況下是(128,1025)。在此ndarray中,每一行就是一個三角濾波器。
mel = librosa.filters.mel(22050,2408)
plt.plot(mel.T)
此圖中,縱軸為權重(我的理解:類似於增益?),橫軸不是頻率,而是n_fft。
Questions:
- 如果想要以頻率作為上圖的x軸,需要做什么?
- 通過Mel濾波這一步就完成了頻率Hz向梅爾頻率Mel的轉變嗎?
通過查看librosa.spectrum.stft函數的說明:
- n_fft是分幀后,每個幀的數據點數量。在默認采樣頻率22050的情況下,n_fft設置為2048,即對應\(2047*\alpha * \frac{1}{22050}=0.09283446712018141\)秒的數據
- 此函數返回復值矩陣D,使得
np.abs(D[f,t])
是幀t
處的頻率binf
的大小,而np.angle(D[f,t])
是幀t
處的頻率binf
的相位。
整數t
和f
可以通過實用函數frame_to_sample
和fft_frequencies
轉換為物理單位。
既然最高采樣頻率為22050,那么stft可以采集的信號的最高頻率應該為11025,得到的頻譜圖的矩陣D為:np.ndarray [shape=(1 + n_fft/2, n_frames), dtype=dtype]
猜想每個bin對應\(11025/1024=10.7hz\)?