600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 利用函数wavread对语音信号进行采样_语音信号的语谱图特征提取(一)

利用函数wavread对语音信号进行采样_语音信号的语谱图特征提取(一)

时间:2023-01-21 17:50:24

相关推荐

利用函数wavread对语音信号进行采样_语音信号的语谱图特征提取(一)

1、获取语音数据

CASIA汉语情感语料库是中科院自动化所录制的情感语料库,数据库包括奖金10000条语音。发音为中文数据库包括angry、fear、happy、neutral、sad和surprise六种情绪,四个演员对300句相同文本和100句不同文木进行朗诵。收集的语音信号基本是纯净无噪声的,16000khz采样率,16bit,pcm格式存储。

2、提取语音信号的语谱图

对语音信号进行加窗、分帧,提取语音的语谱图。本次使用的窗函数为汉明窗,以25ms为一帧,计算出合适的窗口大小。实现代码如下所示:

#对语音信号进行加窗分帧,以提取语音的语谱图

图1 语谱图

3、语谱图灰度变换:将提取到的语谱图作归一化处理,得到语谱图0--255的灰度图像,实现代码如下所示:

import cv2import numpy as npif __name__ == "__main__":img_path = r'C:Users36114Desktop201spectrogram.png'img = cv2.imread(img_path)#获取图片的宽和高width,height = img.shape[:2][::-1]#将图片放大便于显示观看img_resize = cv2.resize(img,(int(width*2),int(height*2)),interpolation=cv2.INTER_CUBIC)cv2.imshow("img",img_resize)print("img_reisze shape:{}".format(np.shape(img_resize)))#读取灰度图img_gray = cv2.imread(img_path,cv2.IMREAD_GRAYSCALE)#将图片放大便于显示观看img_gray = cv2.resize(img_gray,(int(width*2),int(height*2)),interpolation=cv2.INTER_CUBIC)cv2.imwrite(r'C:Users36114Desktopfirst.png',img_gray)cv2.imshow("img_gray",img_gray)print("img_gray shape:{}".format(np.shape(img_gray)))cv2.waitKey()

图2 语谱图的灰度图

4、利用Gabor小波计算不同方向、不同尺度语谱图的Gabor图谱:因为图像信息往往是二维数据,因此常用二维的Gabor小波变换对图像进行特征提取。 Gabor 小波变换是基于整幅图像的全局变换,提取出的特征为全局特征,虽考虑了全局空间中的不同灰度特征的分布和图像中的方向、边缘信息,但对于构成较为复杂的图像无法实现有效的特征提取。经过Gabor小波变换提取出的特征向量很难对图像进行全面的描述,因此常作为组合特征,与其他特征结合共同描述图像纹理特征。实现代码如下所示:

#导入需要的包和模块import cv2,osimport numpy as npimport matplotlib.pyplot as plt#获取文件所在位置def get_img(input_Path):img_paths = []for (path, dirs, files) in os.walk(input_Path):for filename in files:if filename.endswith(('.jpg','.png')):img_paths.append(path+'/'+filename)return img_paths#构建Gabor滤波器def build_filters():filters = []ksize = [7,9,11,13,15,17] # gabor尺度,6个lamda = np.pi/2.0 # 波长for theta in np.arange(0, np.pi, np.pi / 4): #gabor方向,0°,45°,90°,135°,共四个for K in range(6):kern = cv2.getGaborKernel((ksize[K], ksize[K]), 1.0, theta, lamda, 0.5, 0, ktype=cv2.CV_32F)kern /= 1.5*kern.sum()filters.append(kern)plt.figure(1)#用于绘制滤波器for temp in range(len(filters)):plt.subplot(4, 6, temp + 1)plt.imshow(filters[temp])plt.show()return filters#Gabor特征提取def getGabor(img,filters):res = [] #滤波结果for i in range(len(filters)):# res1 = process(img, filters[i])accum = np.zeros_like(img)for kern in filters[i]:fimg = cv2.filter2D(img, cv2.CV_8UC1, kern)accum = np.maximum(accum, fimg, accum)res.append(np.asarray(accum))#用于绘制滤波效果plt.figure(2)for temp in range(len(res)):plt.subplot(4,6,temp+1)plt.imshow(res[temp], cmap='gray' )plt.show()return res #返回滤波结果,结果为24幅图,按照gabor角度排列if __name__ == '__main__':input_Path = r'C:Users36114Desktopff'filters = build_filters()img_paths = get_img(input_Path)for img in img_paths:img = cv2.imread(img)getGabor(img, filters)

图 3 Gabor小波变换后的图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。