APP下载

基于频域分区的谐波峰值法的钢琴音高识别

2023-06-25周琪芝刘思言

艺术大观 2023年10期

周琪芝 刘思言

摘 要:针对钢琴音域宽广、音色丰富的频域,本文提出了一种基于频域分区的谐波峰值法。在原本谐波峰值法的基础上,对钢琴音高信号基于频域分区进行预处理。在幅度滤波和谐波滤波后,用FFT定位基频音高。经实验和仿真,证明该方法针对钢琴音高信号具有较低的误差率。

关键词:频域分区;谐波峰值法;钢琴音高识别

中图分类号:J624文献标识码:A文章编号:2096-0905(2023)10-00-03

一、背景

钢琴因其音域宽广、音色丰富、音质清亮、表现力强等特点,素有“乐器之王”的美称,常作为音乐创作和表演的乐器进行使用。钢琴的音高识别可以帮助音乐演奏者对钢琴进行校音和调音。不同于以往人耳识别音高,利用音频处理技术的音高识别能够做到识别更加精确。随着与人工智能的结合,音高识别也成为众多领域的研究热点[1-2]。

对钢琴的音高识别研究可以追溯到语音识别技术,主要分为时域处理和频域处理。时域处理法通过分析时域上信号波形的周期峰值,来识别该段信号的音高。这类方法包括短时自相关法[3-4]、短时平均幅度差(Average Magnitude difference function,AMDF)法[5-6]。但时域处理法更容易受到噪声的影响,且经常出现半频或倍频的错误。频域检测法将信号转换到频域上,再对波形特征进行提取检测。目前使用广泛的有谐波峰值法[7]、置信度法[8]。小波变换法属于时频域检测法,它通过对高频处时间细分,低频处频率细分,整合信号细节,实现音高识别[9]。

本文针对钢琴音高的频域,采取一种优化后的谐波峰值法实现了对钢琴的音高识别。

二、音高识别的基本原理和常用方法

(一)音高和十二平均律

乐音体系中各音的绝对准确高度及其相互关系,被称为音律。目前国际上广泛采用的是十二平均律。其将一个音阶按照1/12倍频程划分,每八度音为一个倍频程,一个八度音阶被划分为12个半度音阶。

钢琴是一种通过十二平均律进行定音的键盘乐器,包括52个白键和36个黑键,一共88个音键组成。钢琴涉及的音域低至27.5Hz,高至4186Hz,音域广泛,几乎囊括了乐音体系中的全部音高。通过上述十二平均律的半音规则,可以计算钢琴各个键名对应的半音频率。

(二)基波和谐波

根据振动形式的不同将音分为两种不同的形式:纯音和复音。复音可以分解为多个不同频率和振幅的单音的叠加,其中频率最低的音称为基音,其频率叫作基频,其物理意义为本征频率,是物体振动形成的声波中的最低频率。其他的音称为泛音,其频率叫作泛频,其物理意义为谐振频率,是基音频率的整数倍。

钢琴作为弦乐器,其音是弦周期性振动产生的复合音,产生的波是几种正弦波的集合。其中振动周期最长的波被称为基波,基波的频率称为基频。弦在振动产生基波后,振动并不会立即停止。由于弦两端固定,振动产生的波在传输过程中不断地碰撞反射,从而产生的频率是基波频率整数倍的谐波。谐波使得音乐信号有了不同的音色,谐波成分不同,所听到的音色也就不同,越是丰富的谐波能使得音乐更加饱满,更加华丽。

基波和谐波共同组成了钢琴的音乐信号。而在时域上,基波和多次的谐波叠加,形成更加复杂的波形。波形的复杂会使得分辨音高更为困难。而在频域上,基波和谐波的频率呈现倍率關系,更利于系统识别出音高。

综上可知,钢琴弦振动产生的基波发出基音。在我们的研究中,我们过滤掉谐波,只识别基波频率,达到音高识别的目的。

(三)音频处理技术

1.信号数字化处理

日常生活中我们所感知到的音乐信号都是模拟信号,而利用计算机等对音乐信号进行处理,需要将连续的模拟信号转化为离散的数字信号。采样频率越高,模拟信号的失真也越小。对于音乐信号,采样频率通常是8-10kHz。本文对钢琴信号采样频率选取的为44.1kHz。

对钢琴信号进行实时检测时,模拟信号是一个线性时变信号,但这个变化对于频率来说是缓慢的。故我们假设在一个很短的时间内,信号是平稳的。通常这个时间段取值为10-30ms。

在进行数字化处理时,便是针对模拟信号进行分帧加窗操作。分帧加窗操作是指,使用一个窗函数在采样后的信号上滑动,将其分成若干个短时信号,这些信号可视为平稳信号,每个短时信号为一帧,其长度为帧长,每一帧的长度为10-30ms。常用的窗函数有矩形窗、汉宁窗和汉明窗等。

矩形窗属于时间变量的零次幂窗,具有主瓣集中,旁瓣较高,并且伴有负旁瓣的特点,容易带入高频干扰和泄露。

汉宁窗又被称为升余弦窗。相较于矩形窗,汉宁窗加宽并降低了主瓣,减小了旁瓣,有效减少了泄露和波动现象。由于其主瓣加宽,导致频率分辨率下降。

汉明窗和汉宁窗一样都是余弦窗,又被称为改进升余弦窗。汉明窗相较于汉宁窗,旁瓣更小,旁瓣衰减速度更慢。

2.时域分析

音乐信号的时域特征包括短时能量、短时过零率、短时自相关函数、短时幅度差函数等。

短时能量:描绘了信号在时间上的变化。通过短时能量能够分辨噪声段、环境背景音和乐音。

短时过零率:反映了每一帧内信号过零的次数。因为钢琴信号具有固定的基频,其过零率通常分布在一个固定的范围内,而噪声则不满足,所以过零率也可以用于区分噪声和音乐。

短时自相关函数:相关函数描述了两个信号之间的相似程度,有互相关函数和自相关函数。离散信号的短时自相关函数具有与其相同的周期,其与自身的相关性最大。故而对于一个周期信号而言,它的短时自相关函数必定在周期的整数倍出现最大值,这为利用其提取信号的基频提供了基础。

短时幅度差函数:它在提供与短时自相关函数相似的作用的参量的同时,减小了短时自相关函数由于乘法运算而带来的计算量。与短时自相关函数一样,短时幅度差函数也具有周期性,但不同的是,短时幅度差函数在信号周期的整数倍处出现的是谷值,而短时自相关函数在信号周期的整数倍处出现的是峰值。

3.频域分析

除了在时域上,在频域上音乐信号也有众多特征,可以用于基音检测。常用的方法有短时傅里叶变换。与傅里叶变换(Fourier Transform,FT)一样,它们都是通过将感兴趣的信号从时域转换到频域进行研究的方法。短时傅里叶变换的优点是,可以处理近似平稳的信号,应用更广。

三、优化的谐波峰值法

(一)谐波峰值法

钢琴发音为复合音,通过检测基音频率,就可以得到当前演奏的音高。谐波峰值法正是通过将预处理后的信号进行快速傅里叶变换(Fast Fourier Transform,FFT),转换到频域。通过检测频域上最大峰值,峰值所在位置的最大公因子即为当前的基音。这是由于通常音乐信号除了基音外,还有丰富的谐波。因此,不能简单地将频谱中的最大峰值作为基频,而要提取峰值序列中的最大公因子。“侯取基音”通过计算其自身的置信度,从而得到真实的音高。

(二)基于频域分区的谐波峰值法

在实际情况中,钢琴演奏的音中,幅度最大的音并不一定是基音。在钢琴的低音区,谐波频率的幅度往往大于基音频率的幅度;中音区谐波频率的幅度与基音频率的幅度相当;高音区基音频率的幅度大于谐波频率的幅度。因此,我们采取了一种基于频域分区的谐波峰值法。

1.频域分区

钢琴演奏的基音集中在25Hz到4300Hz之间。通过滤波器将超过范围的谐波过滤,可以增加检测到基音的准确性。按照88个基音的频率,我们将25-4300Hz的频段分割成88个分区,每个分区对应一个基音。基于十二平均律,我们可知,基音之间呈指数上涨的规律。于是我们将区域的上届定为fup=f×1.029,下届定为fdown=f/1.029。其中,为基音频率。

2.设定阈值

在音高的实时检测中,信号除基音和谐波外,还有很多我们不感兴趣的信号频率。在频域图中,除了基波频率、谐波频率之外,还有许多频率点对应的幅度不为零。为了不被冗余信号影响,减少由于噪声等因素导致的其他频率分量,在频域分区的基础上,设定一个阈值,将频域幅度在阈值以下的频率分量幅度都置为零。通过将频域上每个频率点对应的幅度值都取四次方,阈值即等于四次方后最大值的三分之一。

3.滤除谐波

过滤后信号中的谐波分量依然会影响基音的检测。通过提取谐波频率中最大公因子的方法,可以实现过滤谐波。先提取出信号中幅度最高的音频,然后计算与其成1/2、1/3、1/4等倍数关系的频率,若这些频率的幅度均为零,则此最高的音频为基频,并删除其相应的谐波分量;若这些频率中有一个幅度不为零,则幅度不为零的频率中,频率最小的为基频,原最高音频为谐波分量。综上即可检测出基频信号。

四、实验与仿真

本文以44.1kHz的采样率对钢琴音进行实时采集。采用汉明窗对信号进行分帧,并经过基于频域分区滤波的预处理。在幅度滤波和谐波滤波后,通过检测最大幅度值所对应频率,识别音高。

(一)信号预处理

通过将音乐信号进行分帧加窗,将原本的时变信号以一定的帧长,划分为不同帧。在短时间范围内,每一帧的信号的特性基本保持不变及相对稳定,可以看作是一个准稳态过程,即信号具有短时平稳性。此后,再对每一帧信号进行滤波和基音识别。

(二)信号滤波

钢琴乐音信號集中在25Hz到4300Hz之间,超出这个范围的信号,不在我们的识别范围内。所以在进行音名识别之前,我们调用频域分区滤波器,对信号进行滤波。经过频域分区滤波后噪声信号明显减少,得到质量改善后的音乐信号。

最后对处理过的信号进行阈值滤波。在实验中,设定的阈值为每个频率点对应的幅度值四次方后最大值的三分之一。

(三)音名识别

图1所示是对A4键名所对应音名经频域分区滤波和阈值滤波后的时域波形和频域图。

在88个键名中,我们随机选取了其中20个进行测试。测试得到的频率检测结果如表1所示。

由表1可知,基于频域分区的谐波峰值法识别音高误差率低,且音高频率越高,识别误差率越低。这是由于低频信号段键名的频率较为集中,谐波分量不易过滤完全;高频信号段键名的频率分布更稀疏,谐波分量更易过滤。

五、结束语

本文针对钢琴的音频频域,提出了一种优化的谐波峰值法。在原本的谐波峰值法的基础上,采用了频域分区对采集的音高信号进行滤波。在滤波基础上,运用谐波峰值法对钢琴音高进行识别。实验与仿真结果显示,该方法对音高识别误差率低。

参考文献:

[1]栾极,马太,王飞,等.插值采样增强钢琴音高识别能力的方法[J].数字技术与应用,2014(06):3.

[2]翟景瞳,王玲,杜秀伟.改进的音高识别算法[J].计算机工程与应用,2009,45(20):4.

[3]沈瑜,党建武,王阳萍,等.加权短时自相关函数的基音周期估计算法[J].计算机工程与应用,2012,48(35):1-6.

[4]郭淑婷,赵明辉.基于ACF的基音检测算法[J].郑州轻工业学院学报:自然科学版,2011,26(05):4.

[5]熊琦,杜旭,朱晓亮.一种基于短时平均幅度差的语音检测算法[J].电声技术,2006(09):4.

[6]武良丹.基于小波变换与平均幅度差函数倒数的基音周期检测算法[J].科学技术创新,2017(31):2.

[7]王杰,耿丽红.基于谐波自相关的基音检测[J].系统工程与电子技术,2013,35(01):218-222.

[8]温源.基音在语音识别中的应用及提高识别系统速度的研究[D].中国科学院声学研究所,2002.

[9]林琴,郭玉堂,刘亚楠.基于自相关平方函数与小波变换的基音检测[J].计算机应用,2009,29(05):1433-1436.

作者简介:周琪芝(1981-),女,四川达州人,副教授,钢琴演奏与教学专业。