1. 程式人生 > >python生成語譜圖

python生成語譜圖

blue shape plt 導入 特性 mes 關系 黑白 ack

語音的時域分析和頻域分析是語音分析的兩種重要方法,但是都存在著局限性。時域分析對語音信號的頻率特性沒有直觀的了解,頻域特性中又沒有語音信號隨時間的變化關系。而語譜圖綜合了時域和頻域的優點,明顯的顯示出了語音頻譜隨時間的變化情況、語譜圖的橫軸為時間,縱軸為頻率,任意給定頻率成分在給定時刻的強弱用顏色深淺來表示。顏色深的,頻譜值大,顏色淺的,頻譜值小。語譜圖上不同的黑白程度形成不同的紋路,稱之為聲紋,不同講話者的聲紋是不一樣的,可用作聲紋識別。

下面是在python中繪制語譜圖:

# 導入相應的包
import numpy, wave
import matplotlib.pyplot as plt
import
numpy 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生成語譜圖