王 ,姚竹亭,顾秀江
(中北大学 机械工程与自动化学院,山西 太原 030051)
钢琴调律俗称调音,简单地说,就是要通过调整琴弦的松紧程度,使其达到国际标准音的目的。钢琴调律是一个较复杂的工作,传统的钢琴调音是通过钢琴调律师来实现的,但钢琴的音高最终由听觉生理及听觉心里的满足感所确定[1],所以,钢琴调音师会受到周围环境和心理因素的干扰。如果能在音频信号识别的理论基础之上,从琴音特性着手研究,利用现代嵌入式技术设计一款便携式的钢琴调律装置,就能够避免上述干扰因素,实现高效精准的调律。
该仪器总体包括3部分:信号采集模块、信号处理模块及主控制模块,如图1所示。该仪器将ARM作为主处理器, 完成人机界面、通信和控制等任务;采用内核源码开放的Linux的操作系统与ARM处理器相结合,可以发挥Linux系统支持各种协议及存在多进程调度机制的优点,从而使开发周期缩短,扩展性增强;而以DSP作为协处理器完成各种算法的实现过程,以发挥其数字信号处理的独特优势。
该仪器的工作原理是通过麦克风采集音频信号,经过音频解码芯片转换为便于DSP处理的信号;然后在DSP中进行傅里叶变换,通过对钢琴音基频的判断及处理,得到所输入音频信号在钢琴上所对应的键以及调音结果;最后将调音波形和结果显示于液晶屏上。
图1 钢琴调律器总体结构
调律仪的音频信号采集模块采用了音频编解码器TLV320AIC23(以下简称AIC23),它是TI公司推出的一款高性能、集成有模拟功能的立体声音频Codec芯片。它能以数字和模拟电压运行,而且这些电压与TMS320C54x DSP的I/O电压兼容,能与C54x DSP的McBSP端口实现无缝连接;支持MIC和左右声道LINEIN两种输入方式,且对输入和输出都具有可编程增益调节,无须外部再加功放;它的内部ADC和DAC转换模块带有完整的数字滤波器[2]。该模块的作用是实现信号的采集,并对信号进行放大、滤波以及A/D转换。
该模块采用了TI公司的定点高性价比DSP处理器TMS320VC5402,具有先进的多总线结构(3条16位数据存储器总线和一条程序存储器总线);含两个多通道缓冲串行口,一个8位并行与外部处理器通信的HPI口,2个16位定时器以及6通道DMA控制器;具有低功耗,适合电池供电设备等特点[3]。其中两个多通道缓冲串行接口McBSP0和McBSP1,可与AIC23实现无缝连接,并分别通过McBSP1和McBSP0实现对AIC23的初始化与数据收发。该模块的主要功能是对采集的音频信号进行算法处理应,并用开发板上的外部存储器对采集信号进行存储。
主控制模块采用三星公司的S3C2410A处理器,它是基于ARM920T内核的16/32位RISC嵌入式微处理器,它具有独立的16kB指令Cache和16kB数据Cache、MMU、支持STN 和 TFT的LCD控制器、64MB的NAND Flash、3路UART、4路带PWM的Timer、丰富的I/O口、8路10位ADC、Touch Screen接口、IICBUS接口以及2个USB主机和1个USB设备等,完整的通用外围设备极大的减少了为其配置附加外围部件的麻烦[4]。ARM处理器对其他模块的控制则是通过底层驱动来实现。Jtag接口用来烧写启动BIOS,网络接口可以用来下载嵌入式Linux系统镜像;利用TFT真彩LCD显示友好的图形人机界面,通过连接USB鼠标和I/O口键盘方便地操作图形界面;MMC卡可以解决嵌入系统外存的不足,Flash用于系统代码的存储,SDRAM用于存放执行的数据。这里,鉴于输入操作并不复杂,为简化外围设备采用带触摸屏的TFT型LCD模块TD035STEBl作为显示外设。
利用HPI口实现ARM处理器与DSP之间的数据传输。数据总线为HD0-HD15;HPI有3个寄存器;地址寄存器、数据寄存器、控制寄存器,它们是通过将5402的HCNTL0、HCNTL1和2410的地址线A2和A3相连并设置A2和A3的值来选择的;由于2410没有HR/W信号,所以选用了地址线A4和HPI口的HR/W相连,作为读写寄存器的控制信号; 2410A的OE、WE和GCS0分别连接到HPI口的HDS1、HDS2和HCS,这3个信号通过内部逻辑运算组成数据闸门信号,用于数据选通;5402的HINT和2410A的外部中断输入信号端EINT0相连,用于中断ARM主机;HRDY用于HPI接口数据就绪信号,HBIL为字识别控制信号线。HPI连接如图2所示。
图2 HPI连接
本设计以ARM处理器作为平台,运行Linux操作系统,将DSP运算的结果发送给用户程序进一步处理,然后提供给图形化友好的人机交互环境完成数据分析功能。ARM处理器通过DSP的HPI接口与DSP进行连接,DSP部分提供完整的HPI驱动程序(DSP部分)及通信协议,通过增加相应数据处理控制算法程序,利用HPI并行接口与主机ARM通信进行数据交换,数据交换流程如图3所示。
图3 ARM与DSP数据交换流程
该仪器工作的软件流程图如图4所示。首先初始化McBSP,配置AIC23,然后启动AIC23的A/D转换,将对麦克风输入的模拟音频信号进行采样,对连续信号进行傅里叶变换,通过频谱图,得到信号基频信号的频率,对应钢琴音的基频进行信号的分类再处理,最后就是对结果进行判断并显示。
图4 软件流程框图
3.1.1 A/D采样频率、样本位数及样本大小
钢琴音基频范围为27.5~4186.0Hz,根据采样定理的要求和AIC23提供的采样频率(8~96kHz)[2],选用48 kHz的采样频率可以认为是比较合适的;本设计中选用的样本位数是16位,即把音频信号的大小分为65536个量化等级;本设计中样本的大小为1024×32点,可为信号的再处理提供足够的样本点数,采样时间为0.683s,而钢琴音足以提供0.683s的音频信号。
3.1.2 音频编解码器TLV320AIC23的配置
AIC23提供了11个16位映像寄存器,必须通过对这些寄存器进行设置以达到配置AIC23的目的。以下就是用软件开发工具Code Composer Studio编写的寄存器配置程序:
word 0x1e00h; 复位AIC23
word 0x0017h; 左声道输入取消静音,音量0dB
word 0x0217h; 右声道输入取消静音,音量0dB
word 0x04f9h; 左声道耳机音量0dB
word 0x06f9h; 右声道耳机音量0dB
word 0x0812h; 禁止模拟音频旁路,选择DAC输出
word 0x0a04h; 数字音频通道控制,缺省设置
word 0x0c00h; 打开所有电源,关闭省电设置
word 0x0ea3h; AIC23设为主模式,数据位DSP格式
word 0x1020h; 时钟为正常模式,过采样率为256fs
word 0x1201h; 激活数字接口
3.1.3 采样端点的判断
在实际中,电路带来的噪声是不可避免的,而且在采集信号时周边环境还会存在噪声,所以在设计中采用了信号短时平均能量来确定采样的起始点和终点,从而保证了系统的高识别率。n时刻信号x(n)的短时平均能量定义为[5]:
式中w(n)为窗函数(如矩形窗、汉宁窗、哈明窗),N为窗长。令h(n)= w2(n),则有:
可见,窗口加权短时平均能量E,相当于将乐音平方信号的通过一个线形滤波器的输出,该滤波器的单位取样响应为h(n)。
式中w(n)选用哈明窗,虽然哈明窗主瓣很高(带宽大),但旁瓣很低(通带外的衰减大),可以有效地克服泄露现象,具有较好的低通特性,能使短时平均能量更好的反应音频信号的幅度变化。当乐音信号的能量增大到某一数值时,说明输入信号为需要采集的声音信号,由此来判断需要采集信号的起始点和结束点。
信号的处理主要包括:基音的提取、基频范围的确定和信号的分类处理。设计中采用的是对基频的判断,钢琴音的基频范围为27.5~4186.0Hz[8],所以如果采用单一的采样频率必然不能满足采样分辨率的要求,在设计中采用分类处理的方法提高采样分辨率,在预处理时确定基频范围,与钢琴音的基频对比,实现分类。
3.2.1 基音周期的提取
实际上影响从自相关函数中正确提取基音周期的最主要的因素就是声道响应部分。当基音的周期性和共振峰的周期性混叠在一起时,被检测出来的峰值就会偏离原来峰值的真实位置。为了提高基音周期检测的可靠性,需对原始信号进行预处理,方法有中心削波处理和滤波。本设计中采用的是中心削波的方法[6],其输入输出函数为:
为了减少自相关计算的乘法运算量,可以把上述中心削波以后的信号{y(n)}的自相关用信号{y(n)}和{y´(n)}的互相关代替,其中{y´(n)}是对{y(n)}进行三电平量化产生的结果:
显然y´(n)只有-1,0,1等3种可能的取值,因而这里的互相关计算只需做加减法,而这个互相关序列R(k)的周期性与{y(n)}的自相关序列是相同的。基音周期即为使R(k)取最大值Rmax时的位置的k值。
3.2.2 基频范围的确定
离散傅里叶变换(DFT)的公式如式(5)所示,为了进行快速傅里叶变换,采取时间抽取(DIT)基2FFT算法[7]:
对N点音频信号进行FFT变换,公式(5)可知对应到频域上也为N点,设频域上对应第k点的频率为 fk,则由计算公式为(6),其中 fs为音频信号的采样频率,为归一化频率,的计算公式为(7)。因此,由公式(6)、(7)可以得到频谱图上每个采样点对应的实际频率值。
在设计中采样率为48kHz,采样点数为1024×16点,首先通过对前1024点进行傅里叶变换,得到基频频率值与钢琴音的基频进行比较,然后进行分类再处理。对于时域分析来说,如果FFT变换点数N很小,则它等效于很窄的低通滤波器,乐音信号通过时,反映波形细节的高频部分被阻碍,短时能量随时间变化很小,不能真实地反映乐音信号的幅度变化;反之,点数FFT变换N太大时,滤波器的带通变宽,短时能量随时间有急剧的变化,不能得到平滑的能量函数。因此,设计中采用的傅里叶变换点数为1024点。
3.2.3 信号分类处理
功率谱图的频率范围和分辨率取决于采样速率和采样点数,即频率分辨率 Δf =fsN ,其中fs表示采样频率,N表示采样点数。钢琴音基频跨越很广,相隔两个音基频有的相差2Hz左右,有的相差230Hz左右,如果单一满足采样分辨率,那么采样率过小,会出现混叠现象;如果采样率在不发生混叠的情况下,频率分辨率也会不能满足钢琴调音的精度要求。设计中采用的采样率转换的方法使得在不发生混叠的基础上尽量提高采样分辨率,将低频信号和高频信号分开处理。采样率转换器运用的是信号的抽取,即在M个点中抽取一个,组成一个新的序列y(n)=x(Mn),经过快速傅里叶变换后,实现了 fs的减少M倍的变换[7]。
经过前1024点傅里叶变换的预处理之后,判断得到采集到音频信号的范围,在采样不发生混叠的前提下,尽可能提高频率分辨率,所以把信号分为4部分进行再处理。如表1所示。
表1 信号分类处理
3.2.4 调音判断
3.2.5 结果显示
在本仪器中,人机交互功能是由S3C2410A内部LCD控制器和液晶显示模块完成的,其软件设计主要包括LCD显示程序的设计和触摸屏控制程序设计。S3C2410A触摸屏控制器采用X/Y位置独立转换模式;而LCD显示程序的设计的步骤为:首先要将GPIO初始化为LCD端口;再在RAM的不可Cache区申请FrameBuffer;然后根据LCD屏的逻辑和时序初始化LCD控制寄存器,包括LCD的时序参数、分辨率、显示模式、扫描频率及FrameBuffer的大小和起始地址等的设置;LCD初始化以后就可以通过直接修改FrameBuffer的内容实现显示。
本设计中人机交互软件实现除了在Linux 环境下进行了LCD显示与触摸屏控制的软件设计以外,还应该包括设备驱动程序开发,Linux为所有的设备文件提供统一的操作函数接口,以下是对FrameBuffer的操作的结构体封装:
该仪器的液晶屏显效果见图5:
图5 屏显效果
以下实验数据是对信号发生器发出的正弦信号测试后得出的数据,由于此项实验的条件趋于理想状态,避免了麦克风的声电信号的转换,采集的波形也没有谐波分量,所以噪声均来自硬件电路。该测试主要实现信号采集以及后续处理的功能性验证。根据国家标准对调音频率的要求[10]:调音装置准确度应该在±1音分(相邻两音的标准频率差的1/100是1个音分)。对比标准信号频率,可以实现允许误差范围内的测试。测试数据及相应允差范围如表2所示。
表2 部分测试数据(单位均为Hz)
本设计采用了ARM和DSP构架,充分地发挥了各处理器的长处,较传统的用PC实现方式,在性能、体积、成本方面有一定的优势。本文在软件部分重点介绍了应用DSP实现钢琴调音的算法,包括了基频的提取、基频范围的确定和采样率自适应变换,通过不同的采样率满足钢琴音基频跨度大的特点,在采样不发生混叠的情况下,使得采样分辨率尽可能提高,以满足调音的精度要求。
[1] 吴红江.钢琴调律与物理声学、听觉生理学及听觉心理学之关系[J].乐器,2006,(3):17-19.
[2] 丁祥,余小清,万旺根.音频编解码器TLV320AIC23及其与DSP接口设计[J].单片机与嵌入式系统应用,2002.(6):35-37,47.
[3] 汪安民.TMS320C54xxDSP实用技术[M].北京:清华大学出版社,2002:17-25.
[4] Samsung Electronics Co., Ltd. S3C2410A-200MHz & 266MHz 32-Bit RISC Microprocessor User's Manual (Revision 1.0) [Z]. Yongin-City, Gyeonggi-Do, Korea: Samsung Electronics, 2004.
[5] 冯康,时慧馄.一种参考短时平均能量和平均幅度差函数的基音检测方法[J].淮南师范学院学报,2005,5(21):9-11.
[6] 陈晓磊.基音周期的提取[J].大众科技,2009,(9):47-49.
[7] 徐天成.基2 FFT的二进制理论分析[J].南京理工大学学报:自然科学版,2000(2):160-163.
[8] 李涛. 钢琴音响的乐律学研究初探[M]. 上海:上海音乐学院出版社,2007.
[9] 孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发设计-基于ARM9处理器[M].北京:电子工业出版社,2005.
[10] GB 3451-82 标准调音频率[S].国家标准局,1982.