您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 基于旋律的音频哼唱识别系统
基于旋律的音频哼唱识别系统姓名:王冬学号:201318001027048姓名:杨少凡学号:2013180010270582014年4月15日一、任务分工王冬:设计哼唱旋律特征提取算法及比对算法、撰写终期报告。杨少凡:音乐库的建立及旋律特征提取,界面设计。二、背景介绍音乐库中有多首乐曲,通过哼唱一段旋律,分析频率谱,从多首乐曲中找出相应的曲名,并用乐器正确播放旋律。三、总体方案设计3.1开发平台Python2.7.5.03.2功能设计本次课程项目主要使用Python程序设计语言对实现了基于4首歌的哼唱识别,进行了充分的实验和参数调整,实现了哼唱旋律特征提取、噪声去除、特征值识别及使用乐器播放旋律等课题选取音乐分帧处理,提取旋律特征建立旋律特征库去噪哼唱音乐数据旋律特征提取输出识别歌曲名并用乐器演奏与旋律库比对四、核心算法及结果分析(1)音乐旋律特征提取下图是《城里的月光》歌中“城里的月光把梦照亮,请温暖他心房”一句话的旋律特征提取结果。######分帧fft提取频率foriinxrange(nframes/1024):forjinxrange(1024):y[j]=int(pianduan[j+i*1024])fft_y=fft(y,2048)forjinxrange(1024):ifj0:ifabs(fft_y[j])m:m=abs(fft_y[j])maxx=jelse:m=abs(fft_y[0])frequent[i]=maxx######平滑处理foriinxrange(3,len(frequent)-2):frequent[i]=round((frequent[i-2]+frequent[i-1]+frequent[i]+frequent[i+1]+frequent[i+2])/5)(2)哼唱音频旋律提取下图是哼唱《城里的月光》中“城里的月光把梦照亮,请温暖他心房”一句话的旋律提取结果。##############低通滤波Wp=0.04#CutofffrequencyWs=0.06#StopfrequencyRp=0.1#passbandmaximumloss(gpass)As=60#stoppandminattenuation(gstop)Filters={'ellip':(),'cheby2':(),'butter':(),'cheby1':(),'bessel':()}#ellipandcheby2filterdesignFilters['ellip']=fd.iirdesign(Wp,Ws,Rp,As,ftype='ellip')Filters['cheby2']=fd.iirdesign(Wp,Ws,Rp,As,ftype='cheby2')filtered_sig1=lfilter(Filters['ellip'][0],Filters['ellip'][1],pianduan)######分帧fft提取频率foriinxrange(nframes/1024):forjinxrange(1024):y[j]=int(pianduan[j+i*1024])fft_y=fft(y,2048)forjinxrange(1024):ifj0:ifabs(fft_y[j])m:m=abs(fft_y[j])maxx=jelse:m=abs(fft_y[0])frequent[i]=maxx######平滑处理foriinxrange(3,len(frequent)-2):frequent[i]=round((frequent[i-2]+frequent[i-1]+frequent[i]+frequent[i+1]+frequent[i+2])/5)(3)旋律比对算法############哼唱片段切割ku_l=len(tezheng)heng_l=len(frequent_fil)ku_zhidian=zeros(ku_l*heng_l)heng_zhidian=zeros(ku_l*heng_l)foriinxrange(heng_l):forjinxrange(ku_l):heng_zhidian[i*ku_l+j]=frequent_fil[i]foriinxrange(ku_l):forjinxrange(heng_l):ku_zhidian[i*heng_l+j]=tezheng[i]heng_qiangcaiyang=zeros(ku_l)m=0foriinxrange(len(heng_zhidian)):j=i%heng_lifj==0:m=m+1heng_qiangcaiyang[m-1]=heng_zhidian[i]###################匹配算法quanzhi=0foriinxrange(len(tezheng)):quanzhi=quanzhi+heng_qiangcaiyang[i]**2cor_fenmu=quanzhiquanzhi=sqrt(quanzhi)cor=0foriinxrange(len(tezheng)):cor=cor+tezheng[i]*heng_qiangcaiyang[i]a=cor/cor_fenmuer=0foriinxrange(len(tezheng)):er=er+(tezheng[i]-a*heng_qiangcaiyang[i])**2quan=0foriinxrange(len(tezheng)):quan=quan+tezheng[i]**2er=er/sqrt(quan)(4)结果分析设计结果如右图所示参考文献[1]方勇.数字信号处理——原理与实践.第2版.北京:清华大学出版社,2010[2]刘任化.基于数字音频信号处理技术的研究.2008[3]吴宗济.实验语音学概要.北京:高等教育出版社,1989[4]宋德,须德.音频信息检索的研究及实现[J].计算机应用,2003(12):52
本文标题:基于旋律的音频哼唱识别系统
链接地址:https://www.777doc.com/doc-2575381 .html