语音中提取基音频率matlab程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
语音中提取基音频率matlab程序

语音中提取基音频率matlab程序 %%corr.m % correlation for pitch estimation % flag =1 from left to right, otherwise, from right to left % r=corr(s,L,flag) % % %flag==1时 % % % %|--i----| %s:..................................................... % . % . % . % . % . % . %s:..................................................... % |_______d________|__________________L-d_____________| %返回值是一个序列 %注意到在做自相关时,错位值从20开始 %考虑到在用这个自相关序列时可能是用于求周期,这个20时有利的 %语音的基音周期一般在20到140,因此小于20没有周期 %而错开20以上可以避免出现不是所求的峰值避免出错 %求到结果后放到rr序列中时,注意到下标为i时实际上已经是错开 %i+20-1,因此pitch.m在调用这个时需要有一句p=19+ind_pitch; function r=corr(s,d,flag) epsilon=1.0e-10; % to avoid divided by zero L=length(s); NM=120; if flag==1 % From left to right for i=20:min(L-d,NM) temp=0.0; temp1=0.0; temp2=0.0; for j=1:d temp=temp+s(j)*s(j+i); temp1=temp1+s(j+i)*s(j+i); temp2=temp2+s(j)*s(j); end pw1=sqrt(temp1)+epsilon; pw2=sqrt(temp2)+epsilon; r(i-19)=temp/(pw1*pw2); end else % From right to left for i=20:min(L-d,NM) temp=0.0; temp1=0.0; temp2=0.0; for j=L-d+1:L temp=temp+s(j-i)*s(j); temp1=temp1+s(j-i)*s(j-i); temp2=temp2+s(j)*s(j); end pw1=sqrt(temp1)+epsilon; pw2=sqrt(temp2)+epsilon; r(i-19)=temp/(pw1*pw2); end end %%maxx.m % Find all the local maxima of a function which are greater than % t times the global maximum % max_index=maxx(s,t) %输入一个序列和一个标量t %首先求出序列s的最大值max_value %然后如果序列中的一个点比相邻两个点都大 %而且还大于max_value的t倍 %就把这个点的位置存放在序列mi中 %在序列mi最后再补上序列的最后一个点 %考虑到第一个点和最后一个点有可能满足要求 %但这两个点都不能跟旁边的比较 %所以还是把这两个点保留了,放在mi序列的第一个和最后一个 %实际上就是以最大值点的t倍为界找出这个界以上的极值点的位置 function mi=maxx(s,t) max_value=max(s); oldstate=0; L=length(s); j=1; mi=[1]; for i=1:L-1 if s(i)s(i+1) newstate=-1; end if s(i)t*max_value

文档评论(0)

sy78219 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档