python生成語譜圖
阿新 • • 發佈:2018-10-27
blue shape plt 導入 特性 mes 關系 黑白 ack
語音的時域分析和頻域分析是語音分析的兩種重要方法,但是都存在著局限性。時域分析對語音信號的頻率特性沒有直觀的了解,頻域特性中又沒有語音信號隨時間的變化關系。而語譜圖綜合了時域和頻域的優點,明顯的顯示出了語音頻譜隨時間的變化情況、語譜圖的橫軸為時間,縱軸為頻率,任意給定頻率成分在給定時刻的強弱用顏色深淺來表示。顏色深的,頻譜值大,顏色淺的,頻譜值小。語譜圖上不同的黑白程度形成不同的紋路,稱之為聲紋,不同講話者的聲紋是不一樣的,可用作聲紋識別。
下面是在python中繪制語譜圖:
# 導入相應的包
import numpy, wave import matplotlib.pyplot as plt importnumpy as np import os filename = ‘bluesky3.wav‘
# 調用wave模塊中的open函數,打開語音文件。 f = wave.open(filename,‘rb‘)
# 得到語音參數 params = f.getparams() nchannels, sampwidth, framerate,nframes = params[:4]
# 得到的數據是字符串,需要將其轉成int型 strData = f.readframes(nframes) wavaData = np.fromstring(strData,dtype=np.int16)
# 歸一化 wavaData= wavaData * 1.0/max(abs(wavaData))
# .T 表示轉置 wavaData = np.reshape(wavaData,[nframes,nchannels]).T f.close()
# 繪制頻譜 plt.specgram(wavaData[0],Fs = framerate,scale_by_freq=True,sides=‘default‘) plt.ylabel(‘Frequency‘) plt.xlabel(‘Time(s)‘) plt.show()
python生成語譜圖