语音信号时域-均方根能量分析

本文介绍了均方根能量(RMSE)在音频信号处理中的应用,通过Python库librosa实现信号的帧级计算,并将其与时域幅值包络进行对比。RMSE常用于音频分段和音乐类型分类,展示了如何使用`librosa.feature.rms()`进行快速计算。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


概念

均方根能量Root mean square energy RMSE
操作:依次寻找每一帧中的RMSE,其值为第t帧中每点幅值平方再取均值后开根号
在这里插入图片描述

对比:与时域幅值包络相比,RMSE体现了每一帧的包络变化,适用于不平稳的信号。尤其是对于突变信号(outliereffect) , RMSE得到的值较平稳,因为它利用每一帧的所有点幅值的平均值,而不像AE利用每一帧中的最大幅值。

应用

RMSE与响度有关,用于音频分段、分类audio segmentation, music genre classification。


任务

预设环境

import librosa
import numpy as np
from matplotlib import pyplot as plt
import librosa.display

加载信号

wave_path = r"E:\Code\audio_date\music_piano.wav"#r是为了转移,不然\\
waveform,sample_rate=librosa.load(wave_path,sr=None)

定义函数:实现计算每一帧的均方根能量

def Calc_RMS(waveform,frame_length,hop_length):
	if len(waveform) % hop_length !=0:
		frame_num = int((len(waveform)-frame_length)/hop_length )+1
		pad_num = fram_num =frame_num*hop_length + frame_length - len(waveform) 
		waveform = np.pad(waveform, pad_width=(0,pad_num) , mode="wrap")
	frame_num = int((len(waveform)-frame_length)/hop_length )+1
	waveform_rms=[]#空列表波形均方根值
	for t in range(frame_num):
		current_frame=waveform[t*(frame_length-hop_length ):t*(frame_length-hop_length )+frame_length]
		current_rms=np.sqart(np.sum(current_frame**2)/frame_length)
		waveform_rms.append(current_rms)
	return np.array(waveform_rms)

设置参数

帧长1024,50%重叠分帧

frame_size= 1024
hop_size=int(frame_size*0.5)
#调用上面的函数
waveform_RMS = Calc_RMS(waveform , frame_size , hop_size)

##绘制信息图

#定义尺度
frame_scale = np.arange(0, len(waveform_RMS),step=1)
time_scale = librosa.frames_to_time(frame_scale, hop_length=hop_size)

plt.figure(figsize=(20,10))#画布大小
librosa.display.waveshow(waveform)#先画出原来的波形
plt.plot(time_scale, waveform_RMS,color="r")
plt.title("Root-Mean-Square-Energy_均方根")
plt.show()

另一种方式:标准库调用

waveform_RMS_librosa=librosa.feature.rms()

首先查看如何使用
在这里插入图片描述
代码如下,如注释

def rms (
	*,
	y=None,#原始波形,可传入
	S=None,#同上,但是采样的离散的,传一个即可
	frame_length=2048,#帧长,应改
	hop_length=512,	#帧移步长应改
	center=True,
	pad_mode="constant" ,
):

如下调用

waveform_RMS_librosa=librosa.feature.rms(y=waveform,frame_length=frame_size,hop_length=hop_size)

如果对比记得改变量名,误差很小所以可以代替

效果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值