预处理数据(批量生成语谱图)

传送门: https://www.jianshu.com/p/449627a36e76

https://blog.csdn.net/fzyjsy/article/details/84842568

声谱图介绍:
  处理语音信号很少直接利用录下來的整段语音波形(speech waveform),而是將波形沿着时间轴,每隔10毫秒切割出一小段长约20至30毫秒的波形來处理,称为短时段分析(short-term analysis),习惯上上把这些一小段波形称为「音框」(speech frame)。接着再针对每个音框进行傅里叶分析(Fourier analysis),傅里叶分析的主要目的在將时间上的波形拆解成数个不同頻率的弦波信号,利用这些弦波信号的振幅和相位來表示语音波形的特征;若将弦波信号的振幅绝对值取对数、並沿着頻率画圆,可得此音框的绝对值频率(magnitude spectrum)。將这些绝对值频率沿著时间排列,並以颜色深浅表示各弦波成份所佔的多少,我们即可得到声谱图(spectrogram)

语音信号预处理介绍:

主要预处理包括:
https://mp.weixin.qq.com/s?__biz=MzAwNTAyNzM5Ng%3D%3D&idx=6&mid=2652960998&sn=545b1589d6bd236ec2cb9f6fe2cd662f
---笔记
https://github.com/RockmanZheng/Digital-Speech-Recognizer/tree/4e96298c5830242673762bad29582dc1a739c3d9/0.3.8/src
---对应代码

python生成声谱图:

  主要分为三部分,【批量数据预处理,生成语谱图,去白边保存】

1、批量数据预处理代码代码:

for root, dirs, files in os.walk(COOKED_DIR):
print("Root = ", root, "dirs = ", dirs, "files = ", files)
for filename in files:
  print filename
  path_one = COOKED_DIR+filename
  f = wave.open(path_one,'rb')
  params = f.getparams()
  nchannels, sampwidth, framerate, nframes = params[:4]#声道/量化数/采样频率/采样点数
  strData = f.readframes(nframes)#读取音频,字符串格式
  waveData = np.fromstring(strData,dtype=np.int16)#将字符串转化为int
  waveData = waveData*1.0/(max(abs(waveData)))#wave幅值归一化


【注:COOKED_DIR即为wavs存储的文件夹】

2、生成语谱图:
  

plt.specgram( waveData , NFFT=512, Fs=44100,noverlap=384)

【注:这里还测试了参数 NFFT=1024, Fs=44100,noverlap=900;NFFT=2048, Fs=44100,noverlap=1536。结果没有上面的参数显示好】

3、去白边保存:
  

plt.axis('off')
  plt.axes().get_xaxis().set_visible(False)
  plt.axes().get_yaxis().set_visible(False)
  fig = matplotlib.pyplot.gcf()
  if "."in filename:
     Filename = filename.split(".")[0]
  plt.savefig(plotpath + Filename+'.jpg', dpi = 1200,bbox_inches = 'tight',pad_inches = 0)
  plt.clf()

【注:主要是通过先隐藏坐标轴 plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False) ,再通过bbox_inches = 'tight',pad_inches = 0来去白边的】

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值