Python 语音识别系列-实战学习-语音识别特征提取

devtools/2024/9/20 1:19:49/ 标签: python, 语音识别

Python 语音识别系列-实战学习-语音识别特征提取

  • 前言
    • 1.预加重、分帧和加窗
    • 2.提取特征
    • 3.可视化特征
    • 4.总结

前言

语音识别特征提取是语音处理中的一个重要环节,其主要任务是将连续的时域语音信号转换为连续的特征向量,以便于后续的语音识别和语音处理任务。在特征提取阶段,这些特征向量能够捕捉到语音信号中的关键信息,如音调、音色和音节等。

特征提取主要可以分为以下几个方面:

  • 时域特征提取:包括自相关函数、方差、峰值等。
  • 频域特征提取:如傅里叶变换、快速傅里叶变换、波束傅里叶变换等。
  • 时频域特征提取:包括短时傅里叶变换、波形分解、时频图等。
  • 高级特征提取:涉及语言模型、语音模型、语音合成等。

在具体实践中,语音特征提取的方法和技术,如:

  1. 梅尔频率倒谱系数 (MFCC):这是最常用的特征提取方法之一。它通过将音频信号的频率变换为梅尔尺度,来模拟人类耳朵的听觉特性。
  2. 滤波器组的Fbank特征(Filter bank)/MFSC:Fbank特征的提取方式相当于MFCC去掉最后一步的离散余弦变换。与MFCC特征相比,Fbank特征保留了更多的原始语音数据。
  3. 线性预测分析(LPC):假设系统的传递函数与全极点的数字滤波器相似,通过计算语音信号的采样值和线性预测的采样值,并最小化两者之间的均方误差(MSE),从而得到LPC特征。
  4. 感知线性预测系数(PLP):这是一种基于听觉模型的特征参数,等效于LPC特征,但它是基于人耳听觉的,通过计算应用到频谱分析中,将输入语音信号经过人耳听觉模型处理,有利于抗噪声语音特征的提取。

这些特征通常会被用于构建机器学习模型,如隐马尔可夫模型 (HMM)、深度神经网络 (DNN) 等,以进行更精准的语音识别。在实际应用中,可能会结合多种特征提取技术来优化识别效果。

在进行语音识别的特征处理前,对原始音频数据进行一系列预处理步骤是非常重要的,这些步骤有助于提高最终识别系统的准确性和鲁棒性。以下是一些在特征提取之前常见的音频预处理技术

  1. 预加重: 预加重是一个高通滤波过程,用于放大高频成分。这有助于平衡音频信号中由于声带和嘴唇效应造成的频率衰减。
  2. 分帧和加窗: 由于语音信号是非平稳的,通过将长的音频信号分割成短时帧,可以近似地认为每个短时帧是平稳的。每帧通常包括20到40毫秒的音频。为了减少相邻帧之间的边界效应,会对每帧使用窗函数(如汉明窗或汉宁窗)。
  3. 去噪: 去噪旨在减少背景噪声,提高语音信号的清晰度。常用的方法包括频谱减法、Wiener滤波器、深度学习方法等。对于实时或近实时的应用,非因果性去噪方法(如使用预先录制的噪声模型)可能更为有效。
  4. 归一化: 音频信号的归一化(如均值归零和方差归一化)有助于减少不同录音条件下的变异,使特征提取更加稳定。

1.预加重、分帧和加窗

python">import numpy as np
import librosadef pre_emphasis(signal, alpha=0.97):"""对给定的音频信号应用预加重。预加重可以增强信号的高频部分,常用于语音处理中。参数:- signal: 原始音频信号数组- alpha: 预加重系数,通常介于0.95到0.97之间返回:- 预加重后的音频信号"""return np.append(signal[0], signal[1:] - alpha * signal[:-1])def frame_signal(signal, frame_size, hop_size, sample_rate):"""将音频信号分割成多个帧。参数:- signal: 预加重后的音频信号- frame_size: 帧大小,以秒为单位- hop_size: 帧之间的跳跃大小,以秒为单位- sample_rate: 音频的采样率返回:- 分帧后的音频数据"""frame_length = int(frame_size * sample_rate)hop_length = int(hop_size * sample_rate)return librosa.util.frame(signal, frame_length=frame_length, hop_length=hop_length)def apply_window(frames, frame_size, sample_rate, window_type='hamming'):"""对每帧音频数据应用窗函数。窗函数有助于减少边界效应,提高频谱分析的质量。参数:- frames: 分帧后的音频数据- frame_size: 帧大小,以秒为单位- sample_rate: 音频的采样率- window_type: 使用的窗函数类型,例如'hamming', 'hanning'返回:- 加窗后的帧"""frame_length = int(frame_size * sample_rate)if window_type == 'hamming':window = np.hamming(frame_length)elif window_type == 'hanning':window = np.hanning(frame_length)else:window = np.ones(frame_length)  # 矩形窗return frames * window[:, np.newaxis]# 示例使用
audio_file = '跑步.wav'
signal, sr = librosa.load(audio_file, sr=None)  # 加载音频文件# 预加重
pre_emphasized_signal = pre_emphasis(signal)# 分帧
frames = frame_signal(pre_emphasized_signal, 0.025, 0.01, sr)  # 设定帧大小为25毫秒,帧间隔为10毫秒# 加窗
windowed_frames = apply_window(frames, 0.025, sr)print("加工处理后的帧形状:", windowed_frames.shape)

在这段代码中:
首先对原始音频信号进行预加重处理,这有助于后续处理中更好地提取高频特征。
然后将音频信号分割成短时帧,每帧25毫秒长,帧与帧之间的间隔为10毫秒。
最后,对每个帧应用汉明窗函数,以减少边界处的信号不连续性,改善频谱分析的效果。

也可以用 librosa.effects.preemphasis 来进行预加重 :

python">import numpy as np
import librosa
import librosa.display
from matplotlib import pyplot as pltaudio_file = '跑步.wav'
audio, s_r = librosa.load(audio_file, sr=16000)print(audio.shape, '|', s_r)
signal = librosa.effects.preemphasis(audio)  # 进行预加重 plt.figure(dpi=200)
plt.subplot(211)
plt.title( "orignal_wav")
plt.tight_layout()
librosa.display.waveshow(audio, sr=s_r)plt.subplot(212)
plt.title( "after_emphasis")
plt.tight_layout()
librosa.display.waveshow(signal, sr=s_r,color='r')

在这里插入图片描述

2.提取特征

要在音频特征提取过程中加入语音去噪等预处理步骤,可以使用noisereduce库对音频信号进行去噪处理。这有助于提高后续特征提取的准确性和效果。需要安装noisereduce库:pip install noisereduce

需将audio_path变量替换为你的音频文件的实际路径。这段代码将输出两种特征的尺寸,验证特征是否正确提取。

python">import librosa
import numpy as np
import noisereduce as nrdef extract_features(audio_path):# 加载音频文件signal, sample_rate = librosa.load(audio_path, sr=None)  # 使用原始采样率# 去噪处理noise_clip = signal[0:int(0.5 * sample_rate)]  # 假设前0.5秒为噪声部分reduced_noise_signal = nr.reduce_noise(audio_clip=signal, noise_clip=noise_clip, verbose=False)# 提取MFCC特征mfccs = librosa.feature.mfcc(y=reduced_noise_signal, sr=sample_rate, n_mfcc=13)# 提取Filterbank特征fbank = librosa.feature.melspectrogram(y=reduced_noise_signal, sr=sample_rate, n_mels=40)fbank = librosa.power_to_db(fbank)return mfccs, fbank# 使用示例
audio_path = '跑步.wav'
mfccs, fbank = extract_features(audio_path)print("MFCCs:", mfccs.shape)
print("Filterbank Features:", fbank.shape)

代码解释:

  1. 加载音频文件:librosa.load函数用来加载音频文件。sr=None参数确保使用音频文件的原始采样率。
  2. 提取MFCC特征:使用librosa.feature.mfcc函数提取MFCC特征。n_mfcc=13指定提取13个MFCC特征。
  3. 提取Filterbank特征:librosa.feature.melspectrogram用于计算mel频谱图,n_mels=40定义了使用40个mel滤波器。然后,使用librosa.power_to_db将mel频谱的能量转换为分贝值。

3.可视化特征

python">import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np# 读取音频文件
audio_path = '跑步.wav'
audio, sample_rate = librosa.load(audio_path)# 计算滤波器组特征
melspec = librosa.feature.melspectrogram(y=audio, sr=sample_rate, n_fft=2048, hop_length=512, n_mels=128)
melspec_db = librosa.power_to_db(S=melspec, ref=np.max)# 计算MFCC特征
mfccs = librosa.feature.mfcc(S=melspec_db, sr=sample_rate, n_mfcc=13)# 可视化滤波器组特征
plt.figure()
librosa.display.specshow(melspec_db, x_axis='time', y_axis='mel', sr=sample_rate, fmax=8000)
plt.colorbar(format='%+2.0f dB')
plt.title('Mel-frequency spectrogram')
plt.tight_layout()# 可视化MFCC特征
plt.figure()
librosa.display.specshow(mfccs, x_axis='time', y_axis='mel', sr=sample_rate)
plt.colorbar()
plt.title('MFCC')
plt.tight_layout()plt.show()

在这里插入图片描述

4.总结

此次学习了语音特征分析之前的语音预处理步骤,且主要讲解了MFCC特征和 Filterbank特征的python实现,下一步将采用一些模型对语音进行建模。


http://www.ppmy.cn/devtools/22470.html

相关文章

Vision Pro“裸眼上车”,商汤绝影全新舱内3D交互亮相

2023年,Apple Vision Pro的横空出世让人们领略到了3D交互的魅力,商汤绝影通过深厚的技术研发实力和高效的创新迭代效率,带来两大全新座舱3D交互:3D Gaze高精视线交互和3D动态手势交互。 作为全球首创的能够通过视线定位与屏幕图标…

《Fundamentals of Power Electronics》——全桥型隔离降压转换器

以下是关于全桥型隔离降压转换器的相关知识点: 全桥变压器隔离型降压转换器如下图所示。 上图展示了一个具有二次侧绕组中心抽头的版本,该电路常用于产生低输出电压。二次侧绕组的上下两个绕组可以看作是两个单独的绕组,因此可以看成是具有变…

酷开科技生态内容价值+酷开系统的开放性和可塑性,实现品效合一

互联网浪潮之下,电视行业也迎来了新的机遇和挑战,酷开科技坚持以用户为中心,想用户所想,急用户所急,抓核心科技,为消费者提供优质、便捷的产品和服务,切实解决用户电视使用痛点,得到…

照片误删怎么办?华为手机删除的照片如何恢复?

我们在使用华为手机时,可能会因为各种原因不小心删除一些照片。如果这些照片对我们来说很重要,那么恢复它们是非常必要且急迫的。那么华为手机删除的照片如何恢复呢?本文将为您介绍3种恢复华为手机中误删照片的方法。 如何恢复华为手机中被删…

leetcode-有效括号序列-94

题目要求 思路 1.使用栈的先进后出的思路,存储前括号,如果st中有对应的后括号与之匹配就说明没问题 2.有两个特殊情况就是字符串第一个就是后括号,这个情况本身就是不匹配的,还有一种是前面的n个字符串本身是匹配的,这…

k8s Dashboard 运维维护记录

k8s Dashboard 运维维护记录 k8s Dashboard 运维维护记录 Q1:需要使用firefox浏览器访问 提示了证书错误NET::ERR_CERT_INVALID,原因是由于物理机的浏览器证书不可用 需要注意的是,若提示“连接不安全”的警告时,点击“高级”…

go引入自建包名报错 package XXX is not in std和goland设置GO111MODULE提示冲突

首先在引入自建包的时候报错 查找网上的解决方法: 1、goland取消勾选Enable Go modules integration 2、set GO111MODULEoff 但是都没解决,而且更奇怪的是,我在cmd里面查看go env就显示set GO111MODULEoff 但是在goland里面的终端输入 go…

Golang实现一个批量自动化执行树莓派指令的软件(9)辅助模块-调用Ping指令判定在线

简介 基于 Golang实现一个批量自动化执行树莓派指令的软件(8)辅助模块-远程IP端口是否开放连接(TCP) 和 Golang实现一个批量自动化执行树莓派指令的软件(7)辅助模块-本地活动网络, 这两篇, 再新增使用系统ping指令判定设备是否在线。 环境描述 运行环境:…

机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

flutter知识点-Focus

在Flutter中,Focus是一个重要的概念,用于管理用户输入焦点,特别是在处理文本输入、按钮点击等交互场景时。以下是一些关键概念和组件,帮助理解Flutter中的焦点管理: FocusNode: FocusNode是焦点管理的核心类&#xff0…

【氮化镓】GaN 器件的高温运行

《High Temperature Operation of E-Mode and D-Mode AlGaN/GaN MIS-HEMTs With Recessed Gates》,由HANWOOL LEE, HOJOON RYU, JUNZHE KANG, 和 WENJUAN ZHU (IEEE高级会员) 四位作者共同撰写,发表在《IEEE Journal of the Electron Devices Society》上…

机器学习:基于Sklearn、XGBoost框架,使用XGBClassifier、支持向量分类器和决策树分类器预测乳腺癌是良性还是恶性

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

工业异常检测

工业异常检测在业界和学界都一直是热门,近期其更是迎来了全新突破:与大模型相结合!让异常检测变得更快更准更简单! 比如模型AnomalyGPT,它克服了以往的局限,能够让大模型充分理解工业场景图像,判…

SpringMVC中常见注解和用法

一.建立连接 RequestMapping 来实现 URL 路由映射。RequestMapping是Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的,表⽰服务收到请求时,路径为 /sayHi 的请求就会调⽤ sayHi 这个⽅法的代码。 路由映射: 当…

python facebook business SDK campaign 广告复制方法

facebook广告复制调试了一天,特此记录,广告复制分为两个步骤: 第一步:使用campaign.create_copy()复制广告系列。 第二步:复制源广告广告集(ad_set)如果广告集需要修改,使用api_upd…

MCU自动测量单元:自动化数据采集的未来

随着科技的飞速发展,自动化技术在各个领域中的应用日益广泛。其中,MCU(微控制器)自动测量单元以其高效、精准的特性,成为自动化数据采集领域的佼佼者,引领着未来数据采集技术的革新。本文将深入探讨MCU自动测量单元的原理、优势以…

千帆起航、芯聚未来——鸿蒙与集成电路产教融合人育人研讨活动成功举办

4月24日,“千帆起航、芯聚未来”——鸿蒙与集成电路产教融合人育人研讨活动在上海顺利举行,本次活动由华为云计算技术有限公司、上海恒驰信息系统有限公司、上海荟诚信息系统有限公司和上海青软晶睿微电子科技有限公司联合举办,汇聚了来自教育…

BERT一个蛋白质-季军-英特尔创新大师杯冷冻电镜蛋白质结构建模大赛-paipai

关联比赛: “创新大师杯”冷冻电镜蛋白质结构建模大赛 解决方案 团队介绍 paipai队、取自 PAIN AI,核心成员如我本人IvanaXu(IvanaXu GitHub),从事于金融科技业,面向银行信用贷款的风控、运营场景。但我们团队先后打过很多比赛&#xf…

Internal server error: [less] Unrecognised input

我之前查了资料,网上有的人说是 less 的配置不正确(这种问题引起的可以查找其他博客看),但是后面经过我慢慢的查找,还有一种可能,就是 less 的写法不对,下面我来解释一下我的错误和处理过程 在…

企业计算机服务器中了rmallox勒索病毒怎么办,rmallox勒索病毒解密流程

对于众多的企业来说,通过网络开展各项工作业务已经成为常态,网络为企业的生产运营提供了极大便利,也大大加快了企业发展的步伐,但众多企业越来越重视企业发展中的核心数据安全问题。近期,云天数据恢复中心接到众多企业…