选题自(数字语音处理理论及应用)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
在宽带声谱图中,能够看出时间分辨率很好,频率分辨率较低,不能很好反映声音的纹理特性,反映了频谱的时变特性,能很好分辨出共振峰的大体位置,但分辨不清谐波结构。
在窄带声谱图中能够观察到有清楚的谐波结构,并且频率分辨率很是好,能够清楚地看到各音阶出现的时刻,以及各时刻对应频率处的能量强弱,可是时间上的分辨率不太理想,由于频率分辨率太过精细,于是不能很好体现出共振峰的大体位置,即反映不出基波的变化特性。
函数