《工业控制计算机》2015年第28卷第5期*国家自然科学基金(61271352);安徽省自然科学基金(1408085QF125)本文设计并实现了一种吉他调音器,该系统对录入的弦音进行滤波去噪、端点检测、自相关基音频率估计和快速傅里叶变换等处理,计算出弦音实际频率,并与标准频率对比,引导用户进行调音。为了调音者的方便使用,运用Matlab中的GUl界面设计出简单直观的操作界面。1系统实现吉他调音器系统分为三个模块:弦音录入模块、预处理模块和弦音判断模块。其中,弦音录入模块主要用来选择琴弦并录入弦音;预处理模块的功能是对录入的弦音进行去噪处理并检测出有效的弦音段;弦音判断模块是对处理后的弦音进行频率计算,并与标准频率进行对比判断。其系统结构框图如图1所示。1.1弦音录入吉他的构成弦为EADGBE的六弦琴(从粗弦到细弦,即6-1弦)。琴弦选择模块根据吉他六根弦的原理,引导用户分别对吉他的每一根琴弦进行调音。弦音录入是最简单、直接得到弦音信号的方法,它是建立在琴弦选择模块的基础之上,对录入的弦音进行特定的判断。其操作流程如图2所示,先录制弦音,再将弦音保存在计算机中,当我们需要对它进行分析时,再进行调用。MATLAB中提供wavrecord函数、wavwrite函数和wavread函数分别将弦音进行录制、保存和读取[1]。图2弦音录入处理过程在不影响录制效果的前提下,弦音录制的时间可以尽量缩短,这样既可以方便进行调音工作,也不浪费系统空间。用户拨弦到弦音结束的时间大约为2s,但考虑到用户需要手动点击“录音开始”按钮再开始拨弦,实际设置录音时间为3s。1.2预处理1.2.1滤波去噪在真实环境下,为了提高弦音检测的准确性,进一步消除噪声对弦音的干扰,系统对采集到的弦音信号进行带通滤波处理。吉他六根弦的标准频率位于82Hz~330Hz之间,因此系统设计一个50Hz~350Hz的带通滤波器,其由一个三阶350Hz的低通滤波器和一个三阶50Hz的高通滤波器级联而成,如图3a所示,图3b为它们的幅频响应。1.2.2分帧加窗由于弦音信号是一种短时平稳信号,因此,为了方便对弦音信号进行分析,系统首先对原始信号进行分帧加窗处理。假定s(n)为原始弦音信号,w(n)为窗函数,那么加窗后的弦音信号为:sω(n)=s(n)·ω(n)(1)一种吉他调音器的设计与实现*桂雅骏吴小培吕钊(安徽大学计算机科学与技术学院智能与信号处理教育部重点实验室,安徽合肥230601)DesignandlmplementationofaGuitarTuner摘要对于传统的吉他调音只能依靠听觉去识别音高,存在着局限性强且准确性不高的缺点,设计并实现了一种基于频谱分析的吉他调音器。系统首先对原始弦音信号进行滤波以去除噪声干扰,然后使用短时能量和短时过零率进行端点检测,在此基础上提出了分段式基音频率的检测方法:低频段采用改进的自相关法,而高频段采用谐波峰值法来获取弦音信号的基音频率。测试结果表明,校准后的吉他弦音频率与标准频率误差为1.92‰,达到了预期的设计要求。关键词:吉他调音器,频谱分析,端点检测,改进的自相关,谐波峰值AbstractAguitartunerbasedonspectrumanalysisisdesignedinthispaper.lnthesystem,theoriginalchordssoundsignalisfilteredtoremovethenoiseinterferencefirstly.Then,theendpointdetectionbasedonShort-timeEnergyandZero-crossingRateiscarriedouttodetecttheeffectivechordssoundsignal.Furthermore,amethodofmeasuringthebasicfrequencyisproposedthatimprovedautocorrelationisusedinthepartoflowfrequencyandharmonicspeakvaluemethodisutilizedinthehighfrequencytoacquirepitchfrequency.Keywords:GuitarTuner,spectrumanalysis,endpointdetection,improvedautocorrelation,harmonicspeakvalue图1吉他调音系统结构框图123一种吉他调音器的设计与实现为了保证帧与帧之间平滑过渡,系统中设定帧长与帧移的比例取为2:1,使用汉明窗作为窗函数,其定义为:ω(n)=0.54-0.46cos[2πn/(N-1)],0≤n≤N-10,n=els﹛e(2)其中,N为窗长,窗函数越宽,对弦音信号的平滑作用越显著,窗函数过窄,对信号平滑作用越不明显[2]。1.2.3端点检测弦音信号端点检测的目的是准确地确定弦音的起始点和终止点,区分弦音信号和非弦音信号。有效的端点检测技术不仅能减少数据的采集量,节约处理时间,还能排除无声段或噪声段的干扰,提高弦音识别系统的性能[3]。系统采用短时能量与短时过零率的端点检测技术。本文将短时能量和短时过零率结合进行端点检测[4],其检测过程如图4所示:图4端点检测示意图(1)第一级判决1)先根据弦音短时能量的轮廓选取一个较高的门限T1,找到短时能量包络与门限T1的交点A和B,此为粗判:弦音起止点位于该门限与短时能量包络交点所对应的时间间隔之外(即AB段之外)。2)根据背景噪声的平均能量确定一个较低的门限T2,并从A点往左,B点往右进行搜索,分别找到短时能量包络与门限T2相交的两个点C和D,于是CD段就是用双门限方法根据短时能量所判定的弦音段。(2)第二级判决以短时过零率为标准,从C点往左,D点往右进行搜索,找到短时过零率第一次低于某个门限T3或高于某个门限T4的两点E和F,这便是语音段的起止点。其中,门限T3、T4,是由背景噪声的平均过零率所确定的。按照上述方法对弦音进行端点检测,图5给出了对第四根弦音的端点检测结果,其左右两边的实线表示弦音的起始点与终止点。1.3音高检测弦音判断模块主要是计算录入弦音的基音频率,并与表1的标准频率进行对比判断。1.3.1改进的自相关法系统使用自相关函数对弦音信号进行周期估计,但是大量的乘法运算会严重影响算法的效率,并且自相关运算所获得的信息许多是多余的。为了弥补这一不足,可以采用中心削波法和三电平削波法[5]。中心削波法实质上是对信号做非线性处理,它消除语音信号的低幅值部分,保留高振幅的峰值,从而能有利于信号的基音周期估计。中心削波函数表达式为:y(n)=C[x(n)]=x(n)-CL,x(n)>CL0,x(n)≤CLx(n)+CL,x(n)<-CL(3)式中,x(n)是原始语音信号,y(n)是削波后的语音信号,CL为削波电平,它的值由信号的峰值决定,一般取信号最大幅度的60%~80%。经过中心削波后的信号,削去了大部分与声道响应有关的波动,只保留了超过削波电平的部分。三电平削波是在中心削波的基础上修正而来,其函数表达式为:y(n)=C′[x(n)]=1,x(n)>CL0,x(n)≤CL-1,x(n)<CL(4)经过三电平削波后的函数只有-1、0、1三种取值,不仅保留了明显的周期峰,还使得之后的自相关运算变得极其简单。对经过三电平削波后的弦音信号进行自相关运算[6],得到:Rn(k)=∑N+n-k-1m=ny(m)y(m+k)(5)图6为三电平削波后自相关仿真示意图:图6三电平中心削波自相关仿真示意图从图6可以看出,三电平消波后的波形只有1、0、-1分量,会大大减少自相关的运算量。三电平中心消波后的自相关函数具有更明显的周期性,更有利于基音周期的检测。若信号采样频率为Fs,P为自相关函数最大峰值对应的点数,则基音频率f0应为:Fs=f0P(6)图3本文所用带通滤波器图5第四根弦的端点检测示意图124《工业控制计算机》2015年第28卷第5期(上接第122页)参考文献[1]谢存禧,张铁著.机器人技术及应用[M].北京:机械工业出版社,2005[2]李伟光,许阳.搬运机器人的轨迹规划[J].控制与检测,2010(5):83-85[3]韩军,郝立.机器人关节空间的轨迹规划及仿真[J].南京理工大学学报,2000,12,24(6):540-543[4]张一巍,张永民,黄元庆.用高阶多项式插值解决机器人运动轨迹规划中的约束问题[J].机器人技术与应用,2002(2):19-21[收稿日期:2014.12.18]对吉他六根标准弦音采用改进的自相关法进行检测,结果如表1:表1改进的自相关法测试结果表由表1可以看出,三弦至六弦标准频率和实测频率差小于1Hz,误差很小。相比之下,一弦和二弦的频率差较大。究其原因是Windows采样频率最高为44100Hz,对于高频段无法保证足够的频率分辨率。具体来说,当频率越高时,P的值会越来越小,P值很小的波动会带来较大的误差。1.3.2谐波峰值法为了解决高频段检测不准确的问题,本文采用谐波峰值法。系统对端点检测后的弦音信号进行短时傅里叶变换(DFT)。某一帧的短时傅里叶变换定义式如下:Xn(ejw)=+∞m=-∞∑x(m)ω(n-m)e-jωn(7)式中,ω(n-m)是窗函数。通过对每一帧的弦音信号进行短时傅里叶变换,将其从时域转换到频域,最大峰值所对应的频率。对一弦和二弦的标准弦音信号进行短时傅里叶变换。峰值最大所对应的频率值为分别为329.78Hz,247.02Hz,与标准频率的差分别为0.15Hz和0.08Hz。相比使用改进的自相关法得到的频率差2.96Hz和1.94Hz误差小了很多。事实证明谐波峰值法对于高频段的检测是有效的。2系统测试系统在实验室环境下进行测试,采样频率为44100Hz,帧长和帧移分别设为25ms和12.5ms,一次弦音录取时间为3s。由于每一根弦都有其标准频率,所以只要录入六根标准弦音后,计算出它们的实际频率来对比它们的标准频率即可。如图7为系统界面,用户在界面左下角选择调试的琴弦,当点击开始按钮后,系统开始录入弦音。系统录入完成后,将在“实测频率”一栏显示计算出的频率,并与标准频率进行对比,将实测频率与标准频率差的绝对值显示在“频率差”一栏,判断结果显示在“正确性”一栏。表2为吉他1的测试结果:表2吉他1的测试结果第一把吉他的测试结果表明,标准弦音的实测频率与所规定的标准频率差在0.3Hz上下浮动,最大频率差与最小频率差分别为0.32Hz和0.08Hz,六根弦的误差均小于4‰,平均误差率为1.77‰,误差很小。为了验证所设计系统的有效性,同时选取另外十把不同的吉他进行相同的测试,编号依次为2~11,测试结果如表3所示:表3吉他2~11的测试结果由表3可以看出,每一把吉他的平均误差均小于4‰,最大平均误差仅为3.23‰,平均误差为1.92‰,在十二平均律规定的相邻半音频率误差范围之内。实验结果表明了该方法的有效性,系统能够准确地对吉他进行调音。3结束语在信噪比较低的情况下,基音频率的峰值并不一定最大,这就让本系统具有一定的局限性,所以如何在噪声干扰大的情况下提高精度,将作为我们下一步的重点研究内容。参考文献[1]LindfieldGR,PennyJET.NumericalMethods:UsingMAT-LAB[M].AcademicPress,2012[2]RobertsMJ.Signalsandsystems:analysisusingtransformmethodsandMATLAB[M].McGraw-HillHigherEducation,2012[3]BanchhorSK,KhanA.Musicalinstrumentrecognitionusingzerocrossingrateandshort-timeenergy[J].Musicallnstru-ment,2012,1(3)[4]路青起,白燕燕.基于双门限两级判决的语音端点检测方