基于模式识别的木琴演奏机器人
2020-06-08张虎任明朱晓骏
张虎 任明 朱晓骏
摘要:本设计是实现用机器人模仿演奏者现场敲击木琴的动作和顺序的装置。使用PC端的声卡和LabVIEW软件作为音频信号的采集和处理装置,并编辑成谱。通过串口通信将处理好的音谱发送给Mcu,MCU读取并转换数据。MCU根据得到的数据控制2自由度舵机作为执行装置,来模仿演奏者的敲击动作,重现演奏过程。
关键词:机器人;木琴演奏;模式识别;LabVIEW;舵机控制
中图分类号:TP399 文献标识码:A
文章编号:1009-3044(2020)10-0218-03
随着社会科技化进程的推进,像LabVIEW,MATLAB之类的上位机软件的应用越来越多,版本更新的功能也越来越强大。它们拥有强大的数字处理和运算能力,可以在频域上精准的分析音频信号。同时越来越多的人使用机器人代替人类的劳动,像扫地机器人,炒饭机器人等。基于这样的大背景下,将软硬件相结合,能够更好地为人们服务。
1总体设计思路
我们使用PC机自带的录音设备,用LabVIEW软件调用Windows底层函数使用计算机的声卡,利用LabVIEW的处理能力将声卡传人的数据进行频域上的分析,将输入的这一段音频信号和已经设定后的频率区间做比对,在相应的区间内输出相应的值并按先后顺序编辑成一维数组,之后通讯发送给单片机,单片机开始读取数据,将数据转换成控制舵机的PWM的脉宽,控制舵机敲击木琴。从而实现由音频信号控制舵机动作再重现音频信号的过程。
2基本方案
2.1采集
计算机的麦克风和声卡可以将语音信号转换为电信号,经过A/D转换器,以数字信号传人计算机。在LabVIEW里面有一系列使用Windows底层函数编写的与声卡有关的函数,可在函数选板的[编程]-[图像与声音]-[声音]-[输入]的子选板中查找使用。在LabVIEW中调用这些函数可将声音输入Lab-VIEW,然后对声音进一步处理如图1所示(以滤取两个频段为例)。
2.2数字滤波
滤波器类型选用低通滤波器,低通滤波器有许多不同的逼近方法,我们选择BuUerworth(巴特沃斯)逼近。Butterworth滤波器的平方幅度响应为:
wc:低通滤波器的截止频率。
n:滤波器的阶数。
同时也使用FFT数字滤波控件(快速傅里叶变换)。Lab-VIEW提供了MATLABScript节点连接主流算法仿真分析软件MATLAB,可以在节点中编辑程序,能够很好地解决复杂数值的运算,充分发挥了MATLAB强大的数据处理能力,流程如图2所示。
数字滤波器滤波时,模拟信号量化后,利用数字系统进行数字运算实现滤波。低通数字滤波器的特性就是只能让低频分量通过,阻止高频分量的通过。在BuUerworth滤波器将接收到的输入信号进行FFT处理,处理的结果经过D/A转换输出信号。
2.3模式识别
“模式识别”是本设计的一大特色。我们使用LabVIEW来对声音进行处理,在频域上分析捕捉固定的频段如图3f以两路为例)。因为取得的声音信号是混合信号,所以需要用到提取混合单频信息vI控件,选用vI控件的detected signal多频导出模式并且设置频率范围,我们所需要的木琴频段为166Hz-2100Hz,各个音阶的频率为264Hz(doul,297Hz(re),330Hz(mi),352Hz(fa),396Hz(s01),440Hz(1a),495Hz(si)。通过连线数据到时间信号输入,然后通过混合单频信息通道提取出需要的信号。混合单频信息返回vI提取出的每个单频信号的频率、幅值和相位。其数组的元素是时间信号输入中某个信号的混合单频信息。由于采集的每个音频不是整数,因此要标定某个区间为某个音阶。利用取整函数将其转化为整型,并按先后顺序排成数组编辑成谱。
可通过下列方程表示实数多频信号(包含N个单频):
2.4舵机控制
LabVIEW将处理好的数据(乐谱)利用串口通讯发送给MCU,接着MCU开始执行数据控制舵机转动固定角度进行敲击。我们使用的是2自由度舵机,下舵机控制左右旋转,上舵机控制上下敲击。这时候就要考虑到旋转的最小角度是否符合要求,因为下舵机扫过的是一个扇形区域,距离舵机越远两个音符之间相对的舵机旋转角越小,距离舵机越近旋转角越大。因此舵机分度越小,敲击动作就越精确效果越好。装置最终的固定需要不断地根据实际情况进行调整,才能找到最合适的位置。
我们将木槌固定在舵机臂上,通过改变PWM波的占空比来控制2自由度舵机模仿演奏者的敲击动作。控制内核采用STC89C52RC单片机,开启两个定时器中断Timer_O和Timer_1。Timer_O控制下舵机左右旋转,Timer_l控制上舵机上下敲击。舵机型号我们选用Tower pro SG-5010 180度舵机,控制信号周期为20ms中置脉宽为1.5ms+0.02ms,旋转脉宽范围为0.5ms-2.5ms。因为STC89C52RC单片机内部没有自带的PWM,我们通过STC89C52RC的GPIO输出高低电平来模拟PWM波。通过控制高电平在一个周期内输出的时间长短来调节占空比大小,进而控制舵机旋转的角度。
设置定时器中断时间计算:
为了方便计算以及设置定时器裕量,设定時间为200us进入一次定时器中断。
在中断中设置100次重复计数变量。通过接收的一维数组(乐谱)中的数据大小来控制是第多少次进入中断翻转GPIO的电平,来实现周期为20ms的PWM波的输出。
用按键来取反主通道标志,当主通道标志置位时,单片机main函数读取并执行接收到的数据,每读取一个数据,下舵机开始动作,转动到目标位置后,置位下舵机完成标志,复位上舵机完成标志,并关闭Timer_O,开启Timer_l。上舵机控制函数当检测到下舵机的完成标志置位时开始动作,敲击后返回初始状态,置位上舵机完成标志,复位下舵机完成标志,并关闭Timer_1,开启Timer_O。当单片机检测到上舵机完成标志置位后,开始读取下一个数据,依次循环直至读完数组,完成所有动作。之后main函数复位主通道标志,返回待命状态,这样就完成了一个完整的敲击过程。
3结束语
以软硬件结合的方式,实现音阶的捕捉与再现,用机器代替人来工作是本设计的主体思想。LabVIEW软件是使用图形化的语言,是一个既操作简便,又功能强大的软件,在LabVIEW中提供了许多的Script,为嵌入其他的软件提供平台。可以通过USB与MCU进行数据传输,将LabVIEW的实时数据发送给MCU。进而控制执行装置按设定好的方式动作,实现“重现”的目的。本设计还可以用于其他方面,像敲扬琴、敲石琴、打鼓等。另外还可以嵌入到各种乐器或音频设备里面,将设备智能化,科技化。例如嵌入到钢琴内部,根据捕捉到的钢琴的音阶来弹钢琴。还可用于判断演奏者有没有揍错音阶,作为初等音乐考试评判设备。