APP下载

基于GPU通用计算平台的乐谱自动识别系统设计

2015-02-23谢晨伟陆天翼汤勇明

电子器件 2015年4期

谢晨伟,陆天翼,汤勇明

(东南大学电子科学与工程学院,南京210096)



基于GPU通用计算平台的乐谱自动识别系统设计

谢晨伟,陆天翼,汤勇明*

(东南大学电子科学与工程学院,南京210096)

摘要:在GPU通用计算平台上实现了一个钢琴独奏乐曲的乐谱识别系统,它读取WAV格式音频文件,利用GPU通用计算技术加速自相关函数算法来实现音高的识别,并综合考虑短时能量和基音周期的变化进行节拍划分。通过实际测试,验证了该乐谱识别系统的准确性,并证明了GPU并行计算对系统计算效率提升的效果:将计算时间减少到传统CPU计算时间的16%左右。关键词:GPU通用计算;自相关函数法;短时能量;乐谱识别

使机器“听懂”乐器的演奏并输出相应的乐谱,这种功能在音乐创作中能够极大地提高作曲人的创作效率,同时在日常生活中也有着非常大的娱乐价值。乐谱的自动识别主要包括音高的识别(即基音周期的识别)和节拍的识别。近年来,国内外很多学者在相关领域做出了巨大的贡献。

冯雅中等人[1]采用的倒谱法,以及胡瑛等人[2]和徐国庆等人[3]采用的小波变换法是变换域估计法中的代表。倒谱法由于引入对数计算所以计算量较大。小波变换法虽然适用于语音信号这样的非平稳信号,但其抗噪性能欠佳。常亮等人[4]和林琴等人[5]使用的自相关函数算法(ACF)是时域估计法中的代表,该算法利用自相关函数在信号基音周期的整数倍上出现峰值的性质进行基音周期识别,具有良好的抗噪性以及较强的抗相位失真能力。

另外出于实用性的考虑,基音周期识别往往对计算效率有很高的要求。GPU通用计算技术将GPU大规模并行计算的能力应用于一般意义上的科学计算,极大的提升了程序的执行效率。王海峰等人[6]介绍了GPU在通用计算领域的典型应用。李玉峰等[7]和张健等[8]分别利用GPU加速离散小波变换和方程组求解算法。NVIDIA推出了统一计算设备架构(CUDA)和对应的编程语言CUDA C[9],使得使用者在无需具备很多计算机图形学知识的情况下完成GPU通用计算的编程。

综合考虑各种基音周期识别算法的计算量、抗噪性等方面的要求,本文采用自相关函数算法进行基音周期的识别,并使用CUDA C语言在GPU通用计算平台上进行系统的编程。

读取WAV格式音频文件之后,首先由CPU对数据进行分帧处理,并将数据拷贝到GPU,创建大量的线程并发执行以下操作:利用带通滤波和中心削波对乐曲信号进行预处理,接着利用自相关函数进行乐曲信号基音周期的识别。之后,GPU将识别的结果返回给CPU,CPU结合基音周期识别结果和信号短时能量信息进行节拍划分。算法的流程如图1所示。

图1 算法流程图

1 算法的实现过程

1.1分帧处理

自相关函数法要求帧的长度至少取信号周期的两倍。而利用GPU进行并行计算的思路是将数据分成尽量多的份数同时进行计算,因此一般要求每一帧的长度应尽可能的短。为此,我们将每一帧的长度定为乐曲信号中可能出现的最大基音周期的两倍,令Fs为乐曲信号的采样率,Tmax为最大基音周期,N为最短帧长,则:

在实际应用中,Tmax通常是频率为130.8 Hz的音调对应的周期,即0.007 65 s。

1.2数据的拷贝和线程的创建

如图2所示,对数据进行分帧处理之后,CPU将数据发送到GPU,GPU为每一帧数据创建一条线程,该线程进行对应帧的基音周期识别。

图2 数据与线程之间的映射

需要注意的是,在计算自相关函数时,程序会频繁地访问存储乐曲信号的数组,平均每个元素要被访问数百次。而设备存储器属于片外存储器,访问它需要大量的时间[12],这极大地限制了GPU并行计算的能力。针对这个问题,可以在计算前将数组的一个副本放在共享存储器中,共享存储器属于片上存储器,访问速度与寄存器相当。这样,只需要访问一次设备存储器,之后可以直接访问共享存储器,从而极大的减少了访问数据的时间。

数据传送完成之后即可创建线程进行计算,本文共创建2 048条线程进行数据的计算,即将原来的乐曲数据分成2 048帧,每条线程进行一帧数据的计算,不同线程之间并发地执行计算,从而大大的减少了系统识别乐谱的总时间。

2011年,经广州市委组织部、广东省委组织部选派,我作为省第六批援疆教师,前往新疆疏附县第二中学任教。那年4月30日,我和同事们沿着314国道,乘坐汽车穿行于戈壁大漠。我们翻过一座又一座的荒山,晶莹的雪山看似近在眼前,仿佛触手可及,可车子却像爬行在一条天路上,颠簸着,蠕动着,好像永远没有尽头,车内的人也陆续出现晕眩、呕吐的症状。天高地阔,却孤立隔绝;风景壮美,却荒芜乏陈。我暗自忖度,那些看惯大漠孤烟的学生们会是怎样的呢?他们会有怎样的课堂?怎样的视野和生活?而我,能为他们做些什么呢?

1.3带通滤波和中心削波

本文对乐曲信号的预处理主要分为两部分:带通滤波和中心削波。数字滤波器的设计较为简单,在此不再赘述。本文所用的中心削波处理函数的表达式为

式中的削波电平L是由音频信号的峰值大小确定的。Dubnowski[10]提出将语音信号帧分为3个小段,找出第1段和第3段的最大幅度值,并将削波电平L取为其中较小值的80%左右。本文通过测试比较,将削波电平L取为较小值的68%时效果最好。

1.4基音周期检测

对于一帧长度为N的语音信号sw(n),它的自相关函数定义为:

根据信号处理理论,当l为信号周期的整数倍时,Rw(l)为一个峰值点。

在具体的编程实现中,假设sw(n)为存储乐曲信号的数组,根据计算公式,将自相关函数的计算结果存储于数组Rw(l)中,然后遍历Rw(l),找出数组中最大元素所在的位置L,若信号的采样率为Fs,则基音周期T为:

1.5节拍识别

上文在GPU上计算出每一帧数据的基音周期,并将计算结果返回给CPU。本小节将结合短时能量和基音周期进行节拍划分,具体步骤如下:

②如果两帧数据基音周期相同,再比较两帧数据的短时能量值。短时能量值定义为:

假设某相邻两帧数据的短时能量值分别为:Ew-1和Ew,设定阈值β(β>1),当Ew≥β·Ew-1时,确定Ew所在的帧为一个新的节拍的开始。

2 实验测试

本文以钢琴独奏乐曲《小步舞曲》的节选片段为例(约14 s),说明乐谱自动识别的过程及识别效果。需要说明的是,一首乐曲的节拍并不固定,取决与演奏时的拍速,所以本文将重点放在检测不同节拍之间的相对时长上。

表1为进行实验的软硬件环境。

表1 实验环境

为检验音高识别的正确性,我们列出常用音名对应的基频,见表2。

表2 常用音名及其基音频率

实验过程如下:

①读取《小步舞曲(节选)》:WAV音频格式,双声道,采样率44.1 kHz,量化位数16位。

②以800个数据点为一帧对信号进行分帧处理,并将数据拷贝到GPU。

③GPU创建2个线程组,每个线程组包含1 024条线程,线程间并发地进行计算,并结合表1确定音高,最后将结果返回给CPU。

④进行节拍的划分并确定每个节拍的相对时长。

表3给出了程序中检测到的各节拍的基音频率平均值及相对时长(其中t为最短的一拍所对应的时间),基音频率与标准值之间略有差异,但与相邻两个音名之间的差异相比可以忽略,并不会影响音名的识别。通过对比,系统的识别结果与标准的《小步舞曲》乐谱相比完全一致。

表3 实验测试结果

为了检验GPU通用计算技术对计算效率的提升,我们将同一算法用传统的CPU串行计算方式实现,用以对比。对于《小步舞曲(节选)》,传统CPU串行程序的执行时间为1.285 s,而通过GPU通用计算技术加速后的执行时间仅为0.207 s,约为前者的16%。

3 结语

本文研究了自相关函数算法在基音周期识别方面的应用,并在GPU通用计算平台上用CUDA C语言编程实现了一个乐谱自动识别系统,从测试结果可以看出,该系统能够准确地识别钢琴独奏乐曲的乐谱,而GPU通用计算技术则在很大程度上提高了算法的计算效率,满足实际应用中对识别速度的要求。本文测试实验采用时长14 s的乐曲信号,GPU创建了2个线程组,每个线程组包含1 024条线程。当实际应用中碰到更大数据量的计算任务时,可以通过增加GPU线程组数量进一步提高程序的识别速度。

参考文献:

[1]冯雅中,庄越挺,潘云鹤.一种启发式的用哼唱检索音乐的层次化方法[J].计算机研究与发展,2004(2):333-339.

[2]胡瑛,陈宁.基于小波变换的清浊音分类及基音周期检测算法[J].电子与信息学报,2008(2):353-356.

[3]徐国庆,杨丹.小波变换与FFT联合识别乐音[J].重庆大学学报:自然科学版,2005,12:51-54.

[4]常亮,徐敬德,崔慧娟.电话线质量语音的基音周期提取算法[J].清华大学学报:自然科学版,2013,11:1548-1552+1557.

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

[6]王海峰,陈庆奎.图形处理器通用计算关键技术研究综述[J].计算机学报,2013(4):757-772.

[7]李玉峰,吴蔚,王恺.基于GPGPU的JPEG2000图像压缩方法[J].电子器件,2013(2):163-168.

[8]张健.方程组的迭代法求解在GPU上的实现[J].电子器件,2010(6):766-771.

[9]Nvidia C U D A.Nvidia Cuda c Programming Guide[M].NVIDIA Corporation,2011:120.

[10]Dubnowski J J,Sehafer R W,Rabiner L R.Real-Time Digital Hardware Pitch Deteetor[J].IEEE Trans on Aeousties,Speeh,and Signal Proeessing,1976,24(2):2-8.

谢晨伟(1992-),男,汉族,本科生,东南大学电子科学与工程学院,xiecw.mail@gmail.com;

汤勇明(1973-),男,汉族,博士,研究员,东南大学电子科学与工程学院。主要从事电路与系统、显示电子学领域的教学和科研工作,tym@seu.edu.cn。

陆天翼(1992-),男,汉族,本科生,东南大学电子科学与工程学院,lodge671 @foxmail.com;

Design of USB3.0 Data Transmission Interface in High Speed Data Acquisition System

YANG Shaobo1,2,PEI Dongxing1,2*,YUE Xiaozhong1,2
(1.Key Laboratory of Instrumentation Science and Dynamic Measurement,North University of China,Tai Yuan 030051,China;
2.Key Lab of Instrumentation Science and Dynamic Measurement,Ministry of Education,North University of China,Taiyuan 030051,China)

Abstract:Stable and reliable high-speed data transmission plays an important role in high-speed data acquisition system.Because missile-borne electronic tester has high demand for speed of data transmission,a high-speed data collection and transmission system is designed.Data transmission part in this system adopts CYUSB3014 chip produced by Cypress company as the interface chip.Interface connection and working process of the hardware is introduced.Main module of the interface software design,such as the DMA channel,GPIF II programmable interface firmware programming are introduced.Test shows that this system has realized reliable high-speed data transmission,and the firmware program operates normally and stably.

Key words:memory testing; high-speed data acquisition; high-speed data transmission; USB3.0 interface

doi:EEACC:7210G10.3969/j.issn.1005-9490.2015.04.039

收稿日期:2014-08-19修改日期:2014-09-15

中图分类号:TP391.42

文献标识码:A

文章编号:1005-9490(2015)04-0908-04