声学绘图示例-绘制包络信息

声学绘图示例-绘制包络信息幅值包络 AmplitudeEnv 依次寻找每一帧中的幅值最大值得到幅值包络并绘制

大家好,欢迎来到IT知识分享网。

概念

幅值包络Amplitude Envelope
操作:依次寻找每一帧中的幅值最大值,将每一帧中幅值最大值连起来就是幅值包络。
公式
提取第t帧的AE值,其中k是采样点数, t是帧序列数,K每一帧的帧长,采样点k点在{t K ,(t+1) k-1}

应用

振幅包络可以给出响度soundness的大致信息,对突变信号特别敏感(outlier effect)
常应用于:音频检测音频分类 onset detection/ music genre classification

任务

在这里插入图片描述

绘制信号的幅值包络信息

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

1.引入pyplot绘图库

#导入画图库 from matplotlib import pyplot import librosa.display #这里将他明明成为了plt方便编辑(行业多数人使用) from matplotlib import pyplot as plt 

2.定义画布

plt.figure(figsize=(20,10)) 

3.画出原始音频及包络

#先定义坐标尺度 frame_scale=np.arange(0,len(waveform_AE)) time_scale=librosa.frames_to_time(frame_scale,hop_length=frame_size,hop_length=hop_size) #原始音频 librosa.display.waveshow(waveform) #包络信号 plt.plot(time_scale,waveform_AE,color="r") 

4.展示及效果图

plt.title("Amplitude_Envelope") plt.show() print("finissh it!") 

语音与包络效果图

全代码如下:

提取信号幅值包络 #预设环境 import librosa import numpy as np from matplotlib import pyplot as plt import librosa.display #加载信号 wave_path = r"D:\Code_of_SSL\Chapter1\Dataset_CMUARCTIC\ARCTIC\cmu_us_aew_arctic\wav\arctic_a0001.wav" waveform,sample_rate = librosa.load(wave_path,sr=None) #定义一个AE函数,功能为取信号中每一帧幅值为该帧的包络 def Calc_Amplitude_Envelope(waveform, frame_length, hop_length): if len(waveform) % hop_length != 0: frame_num =int ( (len(waveform) - frame_length) / hop_length ) +1 pad_num = frame_num * hop_length + frame_length - len(waveform) waveform = np.pad(waveform,(0,pad_num), mode="wrap") frame_num = int ( (len(waveform) - frame_length) / hop_length ) +1 #遍历每一帧 waveform_ae = [] for t in range(frame_num): current_frame = waveform[t*(frame_length - hop_length): t * (frame_length - hop_length) + frame_length] current_ae = max(current_frame) waveform_ae.append(current_ae) return np.array(waveform_ae) #3.设置参数,每一帧长1024,以50%重叠率分帧,调用该函数 frame_size = 1024 hop_size = int(frame_size * 0.5) waveform_AE = Calc_Amplitude_Envelope(waveform=waveform, frame_length=frame_size,hop_length=hop_size) #4.绘制幅值包络信息 frame_scale = np.arange(0, len(waveform_AE)) 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_AE,color="r") plt.title("amplitude_Envlope") plt.show() print("Congratulations!!! You finish it !!!") 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156294.html

(0)
上一篇 2025-02-13 20:15
下一篇 2025-02-13 20:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信