python实验六 语音信号处理

目录

实验目的:

实验原理:

实验准备:

实验步骤与内容:

参考代码:


实验目的:

  • 依托语音信号处理领域的声学特征提取任务,学习常用的语音信号处理工具,实现对语音数据的预处理和常用特征提取等操作;
  • 熟悉掌握安装和使用各种语音信号处理 python 库的方法;
  • 熟练掌握 matplotlib.pyplot 库绘制多图的方法。

实验原理:

语音是声音的一种,是由人的发声器官发出,具有一定语法和意义的声音。大脑对发音器官发出运动神经指令,控制发音器官各种肌肉运动使空气振动,空气由肺进入喉部,经过声带激励,进入声道,最后通过嘴唇辐射形成语音。

目前语音领域的任务主要有语音识别(Speech Recognition)、说话人识别

(Speaker Recognition)、语种识别、语音合成等。语音识别是当前人工智能比较热门的方向,技术比较成熟。各大公司也相继推出了各自的语音助手机器人, 如百度的小度、阿里的天猫精灵等。

语音的相关算法主要依靠机器学习和深度学习技术做支撑。但在训练模型之前,需要先将音频文件数据化,对音频进行预处理、转换到频率域得到频谱图, 再提取其中的语音特征。流程如图 6.1 所示。其中,最常用到的语音特征是梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)。

 图 6.1 语音信号处理流程图

1.预处理

根据需要预先对音频信号进行一些处理,比如为了降低数据量将音频由多声道转为单声道、进行下采样等,还有预加重、标准化、去除静音等。

预加重处理是将语音信号通过一个高通滤波器:

式中 μ 的值介于 0.9-1.0 之间,我们通常取 0.96。预加重的目的是提升高频部分,使信号的频谱变得平坦,移除频谱倾斜,来补偿语音信号受到发音系统所抑制的高频部分。同时,也是为了消除发生过程中声带和嘴唇的效应。(因为口唇辐射可以等效为一个一阶零点模型)

2.频谱图

因为语音信号为短时平稳信号,所以需要进行分帧处理,以便把每一帧当成平稳信号处理。先将 N 个采样点集合成一个观测单位,称为帧。通常情况下 N 的值为 256 或 512,涵盖的时间约为 20~30ms 左右。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了 M 个取样点, 通常 M 的值约为 N 的 1/2 或 1/3。通常语音识别所采用语音信号的采样频率为8KHz 或 16KHz,以 8KHz 来说,若帧长度为 256 个采样点,则对应的时间长度是 256/8000×1000=32ms。

语音在长范围内是不停变动的,没有固定的特性无法做处理,所以将每一帧代入窗函数,窗外的值设定为 0,其目的是消除各个帧两端可能会造成的信号不连续性。常用的窗函数有方窗、汉明窗和汉宁窗等,根据窗函数的频域特性,常采用汉明窗。将每一帧乘以汉明窗,以增加帧左端和右端的连续性。

再对每一帧信号进行快速傅里叶变换,即可得到整条语音的频谱图如图 6.2所示。

 图 6.2 频谱图

3.MFCC

MFCC 依据以下两点对人耳听觉系统建模:1、声音的真实频率和人耳对其感知的高低不是成正比的,当 f<1000Hz 时,人耳感知随声音实际频率线性分布, 当 f>1000Hz 时,呈对数分布。2、当两个频率接近的音调同时发出时,只能听到一个。

梅尔频率倒谱系数是在 Mel 标度频率域提取出来的倒谱参数,Mel 标度描述了人耳频率的非线性特性,它与频率的关系可用下式近似表示:

式中 f 为频率,单位为 Hz。

图 6.3 给出 Mel 频率与线性频率的关系。

图 6.3 Mel 频率和线性频率的关系

图 6.4 计算 MFCC 的流程图

MFCC 的计算基本步骤如图 6.4 所示。在得到频谱图之后,需要将能量谱通过一组 Mel 尺度的三角形滤波器组。定义一个有 M 个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为 f(m), m=1,2,...,M。M 通常取 22-26。各 f(m)之间的间隔随着 m 值的减小而缩小,随着m 值的增大而增宽,如图 6.5 所示。


图 6.5 Mel 三角形滤波器组

三角滤波器的频率响应定义

其中:

三角带通滤波器的主要目的是对频谱进行平滑化,并消除谐波的作用。此外还可以减少运算量。在 MATLAB 的 voicebox 工具箱中有 melbankm 函数可用于计算 Mel 滤波器组。

计算每个滤波器组输出的对数能量为:

 经离散余弦变换(DCT)得到 MFCC 系数:

将上述的对数能量带入离散余弦变换,求出 L 阶的Mel-scale Cepstrum 参数。L 阶指 MFCC 系数阶数,通常取 12-16。这里 M 是三角滤波器个数。

实验准备:

1.pydub

Pydub 提供了简洁的高层接口,极大的扩展了python 处理音频文件的能力, pydub 可能不是最强大的 Python 音频处理库,但绝对是 Python 最简洁易用的音频库,其功能足以满足大多数情况下的音频处理需求,但是 Pydub 库高度依赖ffmpeg,需要在使用前安装 ffmpeg。

Pydub 的核心功能大部分都在 pydub/audio_segment.py 中。使用 pydub,可以实现分割音频片段、改变音量大小、连接音频片段、添加淡入淡出效果等功能。

2.python_speech_feature

Python_speech_feature 是一个用于音频特征提取的 python 工具包,擅长音频信号处理。包含了一些常用的频谱特征的提取方法,比如常见的Mel Spectrogram、MFCC、CQT、chroma 等。

实验步骤与内容:

1.安装工具包

常用的语音工具包有 pydub、python_speech_feature 等,使用 pip install 安装即可。

对于 pydub 库,由于其高度依赖 ffmpeg,所以需要首先安装 ffmpeg,下载地址: Download FFmpeg。解压之后配置环境变量(右击此电脑 ->  属性 -->高级系统设置 -->环境变量—>将解压的 bin 目录路径添加在系统的 path 变量里),运行 cmd,输入 ffmpeg 测试安装是否成功。如出现下图 6.6, 则表示安装成功。

图 6.6 ffmpeg 安装成功

2.音频预处理

录制音频文件的软件大多数都是以 mp3 格式输出的,但 mp3 格式文件对语音的压缩比例较重,因此一般需要先将 mp3 转化为 wav 文件。首先,随意选取并下载一条 mp3 格式的音乐音频***.mp3,并将其转换成采样率为 16kHz wav 格式***.wav;然后,读取音频文件,如果音频不足 5s,重复该音频满足时长大于 5 秒,然后随机选取其中的 5s 片段,重复 3 次,再对首尾添加 3s 的淡入淡出,得到新的音频文件***_new.wav。(pydub 库)

所用接口:from_mp3()、from_wav()、set_frame_rate()、fade_in()、fade_out()、export()

3.特征提取

计算得到新音频文件的频谱图、fbank 和梅尔倒谱系数,并将新音频文件的时域波形图、logfbank 和梅尔倒谱系数绘制在一张图中,如图 6.7 所示。(python_speech_feature 库提取特征),如果输入音频是多通道,则只对第一个通道进行处理和展示。(logfbank 和 mfcc 特征均采用汉明窗作为窗函数,并将原始信号、logfbank 和梅尔倒谱系数在一行展示。)

图 6.7  结果样例

音频读取:scipy.io.read() 特征提取:fbank()、mfcc()

绘图:matplotlib.pyplot.figure() 、 add_subplot(), matplotlib.pyplot.plot(), matplotlib.pyplot.pcolormesh()等接口

参考代码:

#python6_1
import random
from pydub import AudioSegment
#mp3转wav
s1 = AudioSegment.from_mp3("Hans Zimmer - 荣耀主题.mp3")
s1.export("Hans Zimmer - 荣耀主题.wav", format="wav")
s2=AudioSegment.from_wav("Hans Zimmer - 荣耀主题.wav")
s3=s2.set_frame_rate(16000)#转换成采样率为 16kHz wav
t = s3.duration_seconds #获取音频文件时长
while t<5:s3+=s3t+=s3.duration_seconds
five_seconds = 5000#以毫秒为单位
n=random.randint(0,150000)
m=n+five_seconds
s4=s3[n:m]+s3[n-2000:m-2000]+s3[n+10000:m+10000]
s4=s4.fade_in(3000)
s4=s4.fade_out(3000)
s5=s4.set_channels(1)#转换成单音道
s5.export("Hans Zimmer - 荣耀主题new.wav", format="wav")
#python6_2
import matplotlib.pyplot as plt
import scipy
from scipy.io import wavfile
from python_speech_features import mfcc, logfbank, fbank
import wave
# 读取输入音频文件
(a, b) = wavfile.read("Hans Zimmer - 荣耀主题new.wav")
# 提取MFCC和滤波器组特征
mfcc_features = mfcc(b, a).T
filterbank_features = logfbank(b, a).T
# 梅尔倒谱系数
fig=plt.figure(figsize=(13,5))
a1= fig.add_subplot(133)#1行3列第3个
# a1.plot(mfcc_features)
#logfbank
a2=fig.add_subplot(132)#1行3列第2个
# a2.plot(filterbank_features)
#时域波形图
a3= fig.add_subplot(131)#1行3列第1个
a3.plot(b)
a1=a1.pcolormesh(mfcc_features)
a2=a2.pcolormesh(filterbank_features)
plt.show()

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32314.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实验】语音识别

为学校数字信号处理实验总结和归纳&#xff1b; 语音识别 题目及相关要求在here. 数据预处理 大致步骤&#xff1a; 获取原始音频 检测 分帧 加窗 特征提取 端点检测 端点检测参数指标相对值初始短时能量高门限50初始短时能量低门限10初始短时过零率高门限10初始短时过零率低…

QMT量化交易软件使用攻略(四)-策略回测

对某一策略编译成功后&#xff0c;点击回测&#xff0c;可以通过日志输出查看模型基于历史行情数据回测情况和表现。 在回测之前&#xff0c;需要设置好策略回测运行的主图品种和周期&#xff0c;以及相关的回测参数。回测主图和周期可以 在策略编辑器-基本信息中进行设置&…

量化交易主要有哪些经典的策略?

一、交易策略 一个完整的交易策略一般包括交易标的的选择&#xff0c;进出场时机的选择&#xff0c;仓位和资金管理等几个方面。 按照人的主观决断和计算机算法执行在策略各方面的决策中的参与程度的不同&#xff0c;可以将交易策略分为主观策略和量化策略。 二、主观策略 主…

量化策略——准备3 数据、Backtrader回测框架与quantstats评价指标

我们一般使用AKShare这个库来获取股票数据或策略中用得到的数据&#xff1a; AKShare github主页&#xff1a;https://github.com/akfamily/akshare 使用Backtrader框架作为回测的框架&#xff1a; Backtrader github主页&#xff1a;https://github.com/mementum/backtrader …

红橙Darren视频笔记 换肤框架4 换肤的功能完善 内存泄漏分析

上一篇完成了换肤框架的基本搭建&#xff0c;这一次 我们继续补完上一次遗留的一些可以完善的部分 1.完善换肤 1.1退出后再进入应用 不会丢失上一次保存的皮肤 基本原理&#xff1a;将上一次切换的皮肤path保存在SharedPreference中&#xff0c;下一次进入应用读取该数值 同时…

红橙Darren视频笔记 热更新 bsdiff bspatch 在Android设备上的应用 架构篇1完结篇

概述 当时红橙的视频讲解就差不多90分钟&#xff0c;但是真正自己做出来热更新的demo还是花了八九个晚上&#xff0c;期间遇到各种各样的问题&#xff0c;什么叫台上一分钟 台下十年功是深有体会了。 本节会涉及一部分NDK的知识 推荐阅读Android官方的NDK简介 https://develope…

飞机大战学习心得(Dev-C++)

在c语言中,我们要用代码来做游戏就必须得去实现代码与图形界面接口的互联&#xff0c;也就是要通过按键的输入与输出来控制游戏的进行&#xff0c;所以以下几个头文件是必不可少的 stdio函数就不用我多说了。 windows.h函数可以获得程序的权柄&#xff0c;涉及到了Windows内核…

网易传媒签约法国队、阿根廷队 世界杯独家内容盛宴即将开启

NEW 关注Tech逆向思维视频号 最新视频→【耗资一百亿美元的韦伯望远镜到底观测什么&#xff1f;】 2022年卡塔尔世界杯进入开幕倒计时。7月14日、15日&#xff0c;网易传媒相继宣布与顶级夺冠热门球队法国队、阿根廷队签约&#xff0c;成为两支队伍的中国独家网络媒体合作伙伴&…

连续两届世界杯与冠军同行 网易传媒创造内容赛道卫冕传奇

2022年12月19日凌晨&#xff0c;阿根廷队战胜法国队&#xff0c;夺得了卡塔尔世界杯冠军&#xff0c;如愿捧回了队史上第三座大力神杯&#xff0c;梅西也以最完美的方式完成了他的世界杯谢幕战&#xff0c;成就球王传奇。 对内容公司来说&#xff0c;世界杯是专业内容、创意灵感…

java 上传Excel文件 使用easyExcel读取文件内容

记录Java接口上传Excel文件&#xff0c;及使用阿里的easyExcel读取excel文件内容&#xff0c;进行内容校验的过程。文中贴出代码是精简后代码&#xff0c;仅供参考。 引入依赖 在pom.xml中引入easyExcel需要的依赖&#xff0c;具体参考官网&#xff1a;EasyExcel文档 上传文…

使用TDM-GCC(mingw)搭建EasyX图形库开发环境

首先去EasyX官网&#xff1a;EasyX Graphics Library for C 然后看这个文章只把 EasyX 拷贝进项目里&#xff0c;方便发给没有安装 EasyX 的人编译&#xff08;以 MinGW 为例&#xff09; - CodeBus 请使用TDM-GCC进行编译&#xff0c;其他mingw(GNU)编译器可能有问题。 在 …

SpringBoot项目使用EasyExcel读取上传Excel

SpringBoot项目使用EasyExcel读取上传Excel 1、EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 EasyExcel读取Excel的解析原理: 2、导入相应的依赖文件 <dependency><groupId>com.a…

EasyV数据可视化|精选2022多行业可视化作品合集,看这篇就够了

​​时光荏苒 2022进度条■■■■■■■■□□ 80% 又是一年金秋时节&#xff0c;又是一年硕果累累&#xff0c;在这丰收的时节里&#xff0c;工作也陆续到了冲刺的阶段&#xff0c;准备开干的你&#xff0c;是否有这些疑惑 想要的效果构思不出来&#xff0c;需要点小灵感&am…

英文Essay各部分的写作攻略

以下是英文Essay各部分的写作攻略&#xff1a; 引言部分&#xff1a;在引言中&#xff0c;应该清晰明了地陈述你的主题和目的&#xff0c;以及你将要探讨的问题和论点。你可以使用一个有趣的事实、例子、名言、问题或者比喻来引起读者的兴趣。同时&#xff0c;你也可以在引言中…

从头到尾写SQL(二)

二 数据表的创建和管理 数据库是我们用的别人的。。数据表就该我们自己创建了吧。。 1.数据基本类型 建表的时候&#xff0c;需要我们确定好这个表有多少字段&#xff0c;这些字段又都是什么类型的(其实创建完以后这些东西也能改)。那么数据库接纳的数据类型有哪些呢&#…

暑假用chatgpt肝了一篇顶会...

小时候特别羡慕大雄&#xff0c;因为他有可以帮他写作业的机器猫小叮当。 熬夜读论文&#xff0c;却无法得出一个好的idea&#xff0c;深夜薅头发苦恼的时候&#xff0c;就会想如果有一个机器人&#xff0c;给出一串指令就能马上生成一篇质量上佳的论文就好了。 现在&#xff0…

Unity Open Day 北京站-技术专场:生成式AI技术助力Unity创作

【获取 2023 Unity Open Day 北京站演讲 PPT】 伴随Unity中国版引擎的布局以及AI技术的爆发式发展&#xff0c;ChatGPT、StableDiffusion等生成式AI技术受到广大Unity创作者的关注。Unity已经在AI领域探索多年&#xff0c;一直致力于利用人工智能技术以及工具&#xff0c;帮助创…

3D引擎龙头Unity:元宇宙和AI活跃玩家

Unity是用于创建和操作交互式实时3D内容的世界领先平台。凭借灵活的编辑器、友好的开发环境、丰富的工具套件&#xff0c;Unity吸引了大量开发者&#xff0c;全球排名前1000的移动游戏70%以上使用了Unity的创作和运营解决方案&#xff0c;如今&#xff0c;Unity引擎在工业场景、…

城市的 “数字生命” 是怎么被赋予的?|场景创新公司是这样开会的

ChatGPT 为我们带来了巨大便利的同时&#xff0c;也让更多人茫然、焦虑甚至恐惧。对于这一重塑我们生活的技术&#xff0c;每个渺小的个体或许都在心里有过类似的疑问&#xff1a;我&#xff0c;还能做什么&#xff1f; 当体力劳动、内容生产都能够以技术的方式进行翻天覆地的变…

关于ChatGPT应用于软件测试中的思考

前言 关于最近大火的ChatGPT相信各位也听过不同渠道听说过他的厉害&#xff0c;目前发展趋势比较火热&#xff0c;科技公司都有在考虑怎么使用ChatGPT进行提高研发效率以及办公效率&#xff0c;最近我所在的公司也有在要求大家使用ChatGPT进行改善工作效率&#xff0c;所以引发…