语音特征提取与预处理

这篇具有很好参考价值的文章主要介绍了语音特征提取与预处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导入相关包 

import librosa
import librosa.display
import soundfile as sf
import numpy as np
import matplotlib.pyplot as plt
from playsound import playsound

语音读取与显示

file_path = 'test1.wav'
data, fs = librosa.load(file_path, sr=None, mono=True)
librosa.display.waveshow(data)

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

 端点检测(去除前后静音段)

原理:将每帧均方根能量与全局最大均方根能量进行比较。

y, fs = librosa.load(file_path, sr=16000)
yt, index = librosa.effects.trim(y, top_db=30)

fig, axis = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True)
librosa.display.waveshow(y, sr=fs, ax=axis[0])
librosa.display.waveshow(yt, sr=fs, ax=axis[1], offset=index[0] / fs)

sf.write('test_trim.wav', yt, fs)
playsound('test1.wav')
playsound('test_trim.wav')

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

 端点检测(包含语音内部)

y, fs = librosa.load(file_path, sr=16000)
intervals = librosa.effects.split(y, top_db=20)
fig, axis = plt.subplots(2, 1, sharex=True, sharey=True)

librosa.display.waveshow(y, sr=fs, ax=axis[0])
y_dst = np.zeros_like(y)
for i in range(len(intervals)):
    y_dst[intervals[i][0] : intervals[i][1]] =  y[intervals[i][0] : intervals[i][1]]
librosa.display.waveshow(y_dst, sr=fs, ax=axis[1])

# y_remix = librosa.effects.remix(y, intervals)
# librosa.display.waveshow(y_remix, sr=fs, ax=axis[1], offset=intervals[0][0] / fs)

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

 频域分析

y, fs = librosa.load('test1.wav', sr = 16000)
frame_t = 25 # 25ms帧长
hop_length_t = 10 # 10ms步进

win_length = int(frame_t * fs / 1000)
hop_length = int(hop_length_t * fs / 1000)
n_fft = int(2**np.ceil(np.log2(win_length)))

S = np.abs(librosa.stft(y, n_fft=n_fft, hop_length=hop_length, win_length=win_length))
print(S.shape)

# 直接显示
fig = plt.figure(1)
plt.imshow(S, origin='lower', cmap='hot') # 由于fft结果较大的值集中在低频部分所以显示并不明显

# 自己写程序实现
S = librosa.amplitude_to_db(S, ref=np.max)
D, N = S.shape
range_D = np.arange(0, D, 20)
range_N = np.arange(0, N, 20)
range_f = range_D * (fs / n_fft)
range_t = range_N * (hop_length / fs)
fig = plt.figure(2)
plt.xticks(range_N, range_t)
plt.yticks(range_D, range_f)
plt.imshow(S, origin='lower', cmap='hot')
plt.colorbar()

# 调用内置显示程序
fig = plt.figure(3)
librosa.display.specshow(S, y_axis='linear', x_axis='time', hop_length=hop_length, sr=fs)
plt.colorbar()

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

预加重

 高通滤波,弥补高频部分的损耗,保护了声道信息:y[n] -> y[n] - coef * y[n-1]。

y, fs = librosa.load('test_split.wav', sr = None)
win_length = 512
hop_length = 160
n_fft = 512

S = librosa.stft(y, n_fft=n_fft, hop_length = hop_length, win_length=win_length)
S = librosa.amplitude_to_db(np.abs(S))

y_filt = librosa.effects.preemphasis(y)
sf.write('test_split_preemphasis.wav', y_filt, fs)
S_preemp = librosa.stft(y_filt, n_fft=n_fft, hop_length = hop_length, win_length=win_length)
S_preemp = librosa.amplitude_to_db(np.abs(S_preemp))

fig, axis = plt.subplots(2, 1, sharex=True, sharey=True)
librosa.display.specshow(S, sr=fs, hop_length=hop_length, y_axis='linear', x_axis='time', ax=axis[0])
axis[0].set(title='original signal')

img = librosa.display.specshow(S_preemp, sr=fs, hop_length=hop_length, y_axis='linear', x_axis='time', ax=axis[1])
axis[1].set(title='preemphasis signal')

plt.colorbar(img, ax=axis, format="%+2.fdB")

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

Filter Bank:梅尔谱特征

梅尔滤波器:

y, fs = librosa.load('test_split.wav', sr = None)
win_length = 512
hop_length = 160
n_fft = 512
n_mels = 40

# 梅尔滤波器组
melfb = librosa.filters.mel(sr=fs, n_fft=n_fft, n_mels=n_mels)
print(melfb.shape)

x = np.arange(melfb.shape[1]) * fs / n_fft
plt.plot(x, melfb.T)
plt.show()

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

 梅尔谱:

S = np.abs(librosa.stft(y, n_fft=n_fft, hop_length = hop_length, win_length=win_length))
print(S.shape)
fbank = melfb.dot(S)
print(fbank.shape)
print(fbank)

#内置函数
fbank = librosa.feature.melspectrogram(y=y, sr=fs, n_fft=n_fft, win_length=win_length, hop_length=hop_length, n_mels=n_mels)
print(fbank.shape)
print(fbank)

fig = plt.figure()
fbank_db = librosa.power_to_db(fbank, ref=np.max)
img = librosa.display.specshow(fbank_db, x_axis='time', y_axis='mel', sr=fs, fmax=fs/2)
fig.colorbar(img, format='%+2.0f dB')
plt.title('Mel-frequency spectrogram')

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

 MFCC特征

y, fs = librosa.load('test1.wav', sr=16000)
win_length = 512
hop_length = 160
n_fft = 512
n_mels = 128
n_mfcc = 20
mfcc = librosa.feature.mfcc(y=y,
                           sr=fs,
                           win_length=win_length,
                           hop_length=hop_length,
                           n_fft=n_fft,
                           n_mels=n_mels,
                           dct_type=1)
# 特征值增加差分量
# 一阶差分
mfcc_deta = librosa.feature.delta(mfcc)
# 二阶差分
mfcc_deta2 = librosa.feature.delta(mfcc, order=2)
# 特征拼接
mfcc_d1_d2 = np.concatenate([mfcc, mfcc_deta, mfcc_deta2], axis=0)

# 频谱显示
fig = plt.figure()
img = librosa.display.specshow(mfcc_d1_d2, x_axis='time', hop_length=hop_length, sr=fs)
fig.colorbar(img)
plt.show()

语音特征提取与预处理,python与人工智能-应用篇,语音读取与显示,语音特征提取,梅尔滤波器,梅尔谱特征,MFCC特征

参考语音特征提取与预处理_哔哩哔哩_bilibili 

资料及源码:SpeechProcessing: 语音处理 - Gitee.com 文章来源地址https://www.toymoban.com/news/detail-695444.html

到了这里,关于语音特征提取与预处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python机器学习(三)特征预处理、鸢尾花案例--分类、线性回归、代价函数、梯度下降法、使用numpy、sklearn实现一元线性回归

    数据预处理的过程。数据存在不同的量纲、数据中存在离群值,需要稳定的转换数据,处理好的数据才能更好的去训练模型,减少误差的出现。 标准化 数据集的标准化对scikit-learn中实现的大多数机器学习算法来说是常见的要求,很多案例都需要标准化。如果个别特征或多或

    2024年02月16日
    浏览(31)
  • 大数据的4v特征、数据预处理

    一、大数据的4v特征 大数据的4v特征主要包含规模性(Volume)、多样性(Variety)、高速性(Velocity)、价值性(Value) 1、规模性(Volume) 大数据中的数据计量单位是PB(1千个T)、EB(1百万个T)或ZB(10亿个T)。 2、多样性(Variety) 多样性主要体现在数据来源多、数据类型多

    2024年02月07日
    浏览(46)
  • 机器学习基础 数据集、特征工程、特征预处理、特征选择 7.27

    无量纲化 1.标准化 2.归一化 信息数据化 1.特征二值化 2. Ont-hot编码 3.缺失数据补全 1.方差选择法 2.相关系数法

    2024年02月14日
    浏览(36)
  • 高基数类别特征预处理:平均数编码

    对于一个类别特征,如果这个特征的取值非常多,则称它为高基数(high-cardinality)类别特征。在深度学习场景中,对于类别特征我们一般采用Embedding的方式,通过预训练或直接训练的方式将类别特征值编码成向量。在经典机器学习场景中,对于有序类别特征,我们可以使用

    2024年02月11日
    浏览(31)
  • 文本预处理技巧:去除停用词、词形还原、词干提取等

    文本预处理是自然语言处理中非常重要的一步,它是为了使得文本数据能够被机器学习模型所处理而进行的一系列操作。其中,去除停用词、词形还原、词干提取等技巧是比较常用的。本文将介绍这些技巧的原理,并提供使用Python实现的代码示例,帮助读者更好地理解和实践

    2024年02月05日
    浏览(27)
  • 高基数类别特征预处理:平均数编码 | 京东云技术团队

    对于一个类别特征,如果这个特征的取值非常多,则称它为高基数(high-cardinality)类别特征。在深度学习场景中,对于类别特征我们一般采用Embedding的方式,通过预训练或直接训练的方式将类别特征值编码成向量。在经典机器学习场景中,对于有序类别特征,我们可以使用

    2024年02月10日
    浏览(36)
  • 大数据HCIE成神之路之数据预处理(6)——特征编码

    提问:什么是独热编码? 回答:独热编码是一种常用的数据编码方法,用于将分类变量转换为 二进制 的表示形式。它将每个类别表示为一个只包含 0和1 的二进制向量,其中每个类别对应一个维度,维度上的值为1表示该 样本属于该类别 ,为0表示 不属于该类别 。 对于离散

    2024年02月03日
    浏览(27)
  • 【ResNet18】on IEMOCAP—语音情感识别(预处理篇)

    在开始模型训练前,一定要对数据处理熟悉!   一、预处理: 1、IEMOCAP语音数据部分 按照人(1F,1M,2F,2M,3F,3M,4F,4M,5F,5M): ang有语音数量:[147, 82, 67, 70, 92, 148, 205, 122, 78, 92] exc有语音数量:[63, 80, 96, 114, 48, 103, 154, 84, 82, 217] hap有语音数量:[69, 66, 70, 47, 80, 55, 31, 34, 77, 66] neu有语

    2024年02月08日
    浏览(24)
  • 数据预处理与模型评估【机器学习、人工智能、实际事例】

    在机器学习领域,数据预处理和模型评估是两个至关重要的步骤。它们确保我们构建的机器学习模型能够从数据中有效地学习并做出准确的预测。本文将详细介绍数据预处理和模型评估的概念,并通过现实中的例子来阐述它们之间的密切关系。 什么是数据预处理? 数据预处

    2024年02月07日
    浏览(44)
  • 第五篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:详细解读pyttsx3的`preprocess_text`函数文本预处理。

    pyttsx3在文本转换语音之前,首先要开展系列步骤的文本预处理工作。 这些预处理步骤可以在使用 pyttsx3 之前应用于文本,以提高转换结果的质量和可读性。预处理后的文本更干净、准确,可以更好地用于语音转换。pyttsx3主要使用 preprocess_text 函数开展文本预处理。 下面是一

    2024年02月22日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包