基于卷积神经网络的钢琴音符识别算法

文档序号:1739460 发布日期:2019-12-20 浏览:24次 >En<

阅读说明:本技术 基于卷积神经网络的钢琴音符识别算法 (Piano note recognition algorithm based on convolutional neural network ) 是由 董瓒 马学健 郭玲 于 2019-08-25 设计创作,主要内容包括:本发明公开了一种基于卷积神经网络的钢琴音符识别算法,主要步骤为:通过端点检测算法,从一段连续的钢琴音频中寻找出每个音符的起点和终点;将完整的钢琴音频分割成单个音符音频文件的集合;绘制每一个音符的频谱图;将频谱图输入到已经训练好的神经网络中完成识别。本发明提出一种寻找短时能量差峰值点结合双门限的算法,改进了传统双门限算法过分依赖阈值的设定的缺点;提出通过频谱图绘制,将音频信号的处理转换成数字图像识别,克服了传统时域方法提取基频时会出现的倍频错误,相较于传统频域方法,大大提高了计算速度和准确度。(The invention discloses a piano note recognition algorithm based on a convolutional neural network, which mainly comprises the following steps: searching a starting point and an end point of each note from a continuous piano audio through an end point detection algorithm; dividing the complete piano audio into a set of single note audio files; drawing a spectrogram of each note; and inputting the spectrogram into a trained neural network to finish the identification. The invention provides an algorithm for searching a short-time energy difference peak point and combining double thresholds, which overcomes the defect that the traditional double-threshold algorithm excessively depends on the setting of the threshold; the method has the advantages that the audio signal is processed and converted into the digital image for identification through drawing of the spectrogram, frequency doubling errors generated when the fundamental frequency is extracted by a traditional time domain method are overcome, and the calculation speed and accuracy are greatly improved compared with the traditional frequency domain method.)

基于卷积神经网络的钢琴音符识别算法

技术领域

本发明属于音频信号处理技术,具体涉及一种基于卷积神经网络的钢琴音符识别算法。

背景技术

随着经济的发展和文化的进步,音乐爱好者的数量不断增加,但限于精力、时间等因素,相当一部分音乐爱好者选择在业余时间自学自练。由于缺乏专业人士的指导,他们经常会出现弹错音符而自己无法判断等情况,此时一款能够自动识别钢琴弹奏音的软件能够在很大程度上帮到他们,同时钢琴弹奏音符识别还能减轻音乐工作者的工作强度,有利于音乐处理和创作的智能化。

钢琴音符识别算法主要包括端点检测、音符分割、音高识别部分。

端点检测和音符分割是进行音符识别前的关键步骤,准确的端点检测是保证音符识别准确度的前提。双门限算法是最为经典的端点算法,这种方法通过分别设置短时能量和短时过零率各自的高低门限阈值(记为δ1、δ2和Z1、Z2),将一个完整的音频文件分为四个阶段。分别为1、静音段:短时能量低于δ2;2、过渡段:短时能量大于δ2,低于δ1且短时过零率大于Z2;3、乐音段:短时能量大于δ1且短时过零率大于Z1;4、短时能量低于δ2或者短时过零率低于Z2。在实际应用过程中还要考虑到噪声情况,因此除了上述四个门限以外,还要额外设置最短乐音段长度和最长过渡段长度用于区分噪声和防止乐音提前截断。由此可见,该算法的精度主要取决于阈值的设定,而阈值设定通常取录音前若干帧的背景音,这也对录音文件有了要求,若在录音开始时出现小的爆音,则其准确率会大大下降,缺乏实用性。

传统的音高识别主要集中在时域和频域两方面的研究。短时自相关函数用于判断两个信号在时域上的相似程度,常用于检测信号的同步性和周期性。自相关必定在周期的整数倍位置上出现最大值这一性质,为利用短时自相关函数提取钢琴音高,也就是基频提供了重要依据。传统自相关函数法提取基频便是通过绘制短时自相关函数曲线,自相关函数在基音周期处表现为波峰,于是相邻两个峰值之间的间隔即为一个基因周期。但是通常情况下,基波分量往往不是最强的分量,丰富的谐波成分使音频信号的波形变得十分复杂,经常会出现倍频错误,即基频估计结果为实际基音频率的二次倍频货二次分频的情况。小波分析法作为一种应用数学领域的方法,将信号的时间与频率进行局部转换,从而能够有效提取音乐信号中的基频信息。具体步骤为通过绘制同一级数下的小波分量曲线,曲线中的两个极大值之间的样点数n便反应了基音周期,之后通过不断改变级数,计算不同级数下的相邻极大值之间的样点数,若样点数不再改变,则确定基频。由此可见,虽然小波分析法能够有效提取基频,但是由于要计算不同级数下的小波分量,运算量巨大。

综上所述,在端点检测方面,传统双门限算法存在过于依赖双门限阈值设定的缺点,而在音高识别基频提取方面,传统时域方法容易出现倍频错误,准确率较低,而传统频域方法,算法复杂度高,计算量大,运算效率低,并且,不论是频域还是时域方法都对信噪比有较高的要求,无法准确提取低信噪比的音频信号。

发明内容

本发明的目的在于提供一种基于卷积神经网络的钢琴音符识别算法。

实现本发明目的的技术解决方案为:一种基于卷积神经网络的钢琴音符识别算法,包括以下步骤:

步骤1、通过端点检测算法,从一段连续的钢琴音频中找出每个音符的起点和终点;

步骤2、根据每个音符的起点和终点,将完整的钢琴音频分割成单个音符音频文件的集合;

步骤3、绘制每一个音符的频谱图;

步骤4、将频谱图输入到已经训练好的神经网络中完成识别。

与现有技术相比,本发明的显著优点为:(1)本发明提出的基于短时能量差结合双门限的端点检测算法,相比较于传统的双门限算法,不再过分依赖阈值的设定,且具有很高的准确度;(2)本发明提出的利用卷积神经网络识别钢琴音高的算法,相比较于传统时频域方法,不会出现倍频错误,且抗噪能力强,算法简单,运算速度快,准确度高的优点。

附图说明

图1为本发明基于卷积神经网络的钢琴音符识别算法流程图。

图2为本发明所用神经网络结构图。

图3为短时能量曲线图。

图4为短时能量差曲线示意图。

图5为短时能量差峰值点示意图。

图6为短时能量差峰值点筛选示意图。

具体实施方式

如图1所示,本发明基于卷积神经网络的钢琴音符识别算法步骤如下:

步骤1,读入一段音频信号,对其进行分帧加窗,归一化预处理。

分帧加窗操作将音乐信号从非稳态过程表示为若干稳态时不变的帧序列组合,是之后计算音乐信号相关特征等一系列步骤的基础。

步骤2,计算并绘制相邻两帧短时能量差曲线,短时能量及短时能量差公式为:

ΔEi=Ei-Ei-1

由于计算了帧与帧之间的短时能量差信息,所以ΔEi过滤了一部分原始信号中的微小能量起伏,对计算整体音频信息的能量变化起到了平滑的作用,除此之外,由于采用了差分运算,相邻两帧的计算差值ΔEi比每一帧的短时能量更易判断音符起点。

步骤3,寻找并标记出曲线中的所有极大值点(峰值点),为音符起点候补。

此时的所有峰值点包含了音频信号中的大量背景噪声以及音符信号的伟端点,需要经过筛选。

步骤4,根据背景环境音设置最小峰值高度,根据弹奏速度设置相邻峰值点最短距离。

最小峰值高度主要用于滤除背景噪声,相邻峰值点最短距离主要用于滤除音符中的伪端点,防止一个音符被多次截断,需根据钢琴弹奏时的拍速调整。

步骤5,根据步骤4中设置的最小峰值高度和最短峰值距离对B中的峰值点进行筛选,保留下来的点所对应的帧即位每个音符的起点。

步骤6,计算每一帧的短时过零率,公式为:

其中,w(n)为窗函数,sgn代表符号函数,其定义如下:

短时过零率计量的意义在于可以在一定程度上反映信号的周期变化。对于采样的正弦周期信号来说,平均过零率一定是信号频率的两倍乘以采样周期,当采样周期固定时,过零率反映了信号频率信息。尤其对于规则的乐音信号,过零率会分布在一定范围内,可以利用这个规律区别乐音和噪声,因为一般噪声的过零率会比较大。

步骤7,设置短时能量和短时过零率两个阈值,对步骤5中得到的每个起点分别计算其对应的终点。

步骤8,判断每个起点对应的终点位置,若终点在其下一个起点之后,则取该起点之后一个起点的前10帧为其对应的终点。

步骤9,计算每一对起止点的差值,若差值小于设置的最短音符长度,则将其判断为噪声,从集合中删除该对起止点,最终得到全部音符的起止点。

由于步骤8、9对每个起止点进行了再判断和再筛选,大大减小了算法对于阈值设定的依赖,并且提高了准确度。

步骤10,根据步骤9中得到的起止点信息,将音频中的连续音符分割成单个音符。

步骤11,绘制每一个音符的频谱图。

步骤12,将频谱图输入到一个已经训练好的神经网络,得到音高。神经网络结构如图2所示。该网络中的所有卷积核尺寸皆为3*3,池化层皆为最大池化,全连接层1的神经元个数为1024,全连接层2的神经元个数为88,对应钢琴的88个音高。

下面结合附图及实施例对本发明做详细说明。

实施例

本实施例所用音频文件为人工录制钢琴弹奏,共包含8个音符。

步骤1:得到录音文件后对其进行分帧加窗操作,所用采样率为44100Hz,窗函数选用作为常用的汉宁窗,定义如下:

步骤2:完成分帧操作后根据公式:

ΔEi=Ei-Ei-1

分别计算每一帧的短时能量和短时过零率以及相邻两帧的短时能量差,将结果保存在数组中并绘制其曲线,短时能量如图3所示,短时能量差如图4所示。

步骤3:得到短时能量差曲线后,寻找曲线中的全部波峰,即极大值点,用红色星号在曲线中标出,并将峰值点和峰值存储到数组中备用。如图5所示,背景环境噪声的峰值普遍很小,与音符起点附近位置的峰值差距明显。一个音符持续时间内检测出多个峰值,其中最高峰值为音符真正起点,而其相邻的若干峰值即为音符伪端点,伪端点对应峰值略低于实际起点对应峰值,且与实际起点间距很小。

步骤4:设置最小峰值高度和最短峰值间距,最小峰值高度为经验值,只需将钢琴音与环境背景音区分开来即可,最短峰值间距与弹奏钢琴时所采用的拍速有关。根据上述两个阈值对图3中的所有峰值点进行筛选,从数组中删除小于最小峰值高度的峰值点及其峰值,即噪声,峰值高于最小峰值高度但与相邻峰值点间距低于最短峰值间距点,保留其中的较大峰值的点,即伪端点。最终筛选结果如图6所示。

步骤5:上述步骤得到所有音符的备选起点,之后从每个起点开始,逐帧判断其后每一帧的短时能量和短时过零率是否同时满足阈值条件,若其中某一帧满足终点条件,继续判断其后9帧是否满足条件,若是,则判断其为备选终点,若不是,则继续判断,直至找到终点。得到备选终点后判断该终点的位置是否在下一个起点之前,若是,则令其为当前起点对应的终点,若不是,表明终点寻找错误,令当前起点对应的终点为下一个起点的前5帧。

重复上述步骤直至所有起点对应的终点寻找完成,将起点和终点一一对应,成对保存在数组中,记为备选音符端点。

步骤6:计算每对起止点的差值,判断其差值时候大于最短音符长度,若是,则保留该对起止点,若不是,判断其为噪声,从备选音符端点中删除。至此完成端点检测。

步骤7:上述步骤得到每个音符的起止点后,读取最初录音音频文件中时间段为步骤6中的每一对起点至该起点对应的终点的部分,并将其从原音频中提取出来,得到单独的音频文件,重复步骤,最终完成音频分割,得到每一个音符对应的音频文件,总数为8,按照音符顺序命名为1至8。

步骤8:绘制步骤7得到的所有音符音频文件的频谱图,频谱图的横坐标代表时间,纵坐标代表频率,颜色代表能量,图片名与其音频名一致。

步骤9:将步骤8中得到的频谱图输入到神经网络中,神经网络会自动将图片缩放至要求输入尺寸,经过神经网络的计算,最终得到每个音符对应的音高,输出结果为音高名称。本实例选取的音频包含8个钢琴音符,最终的识别结果为A5、G5、E5、G5、C6、A5、G5、A5,与实际弹奏音高相符,全部正确。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种模拟声音处理器音色的方法、装置、终端设备及计算机可读存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!