選題自(數字語音處理理論及應用)javascript
參數選用:
窗函數:漢明窗
寬帶聲譜窗長:5ms
寬帶聲譜FFT長度:1024
窄帶聲譜窗長:50ms
窄帶聲譜FFT長度:1024
使用對數幅度
聲譜圖爲彩色
代碼部分
import matplotlib.pyplot as plt #畫圖用 import librosa.core as lc #計算stft使用 import numpy as np #使用了其中的一些工具函數 import librosa.display #畫聲譜圖用 from scipy.io import wavfile #獲取wav文件的採樣率 path = "/Users/mine/Desktop/wavefiles/s5.wav" fs, y_ = wavfile.read(path) #讀取文件的採樣率 fs = fs n_fft = 1024 #FFT長度 y, sr = librosa.load(path, sr=fs) #獲取寬帶聲譜圖 mag = np.abs(lc.stft(y, n_fft=n_fft, hop_length=10, win_length=40, window='hamming')) #進行短時傅里葉變換,並獲取幅度 D = librosa.amplitude_to_db(mag, ref=np.max) #幅度轉換爲db單位 librosa.display.specshow(D, sr=fs, hop_length=10, x_axis='s', y_axis='linear') #畫聲譜圖 plt.colorbar(format='%+2.0f dB') plt.title('broadband spectrogram') plt.savefig('broader.png') plt.show() #獲取窄帶聲譜圖 mag1 = np.abs(lc.stft(y, n_fft=n_fft, hop_length=100, win_length=400, window='hamming')) mag1_log = 20*np.log(mag1) D1 = librosa.amplitude_to_db(mag1, ref=np.max) librosa.display.specshow(D1, sr=fs, hop_length=100, x_axis='s', y_axis='linear') plt.colorbar(format='%+2.0f dB') plt.title('narrowband spectrogram') plt.savefig('narrowband.png') plt.show()
結果以及分析
寬帶聲譜圖以下:
窄帶聲譜圖以下
結果分析:
聲譜圖也便是語音短時傅里葉變換的幅度畫出的2D圖,
寬帶聲譜圖參數:
FFT長度:1024
聲譜窗長:5ms(8k採樣率時設置爲40)
窗移:(8k採樣率時設置爲10)
窄帶聲譜圖參數:
FFT長度:1024
聲譜窗長:50ms(8k採樣率時設置爲400)
窗移:(8k採樣率時設置爲100)
java
在寬帶聲譜圖中,能夠看出時間分辨率很好,頻率分辨率較低,不能很好反映聲音的紋理特性,反映了頻譜的時變特性,能很好分辨出共振峯的大體位置,但分辨不清諧波結構。
在窄帶聲譜圖中能夠觀察到有清楚的諧波結構,並且頻率分辨率很是好,能夠清楚地看到各音階出現的時刻,以及各時刻對應頻率處的能量強弱,可是時間上的分辨率不太理想,由於頻率分辨率太過精細,於是不能很好體現出共振峯的大體位置,即反映不出基波的變化特性。
函數