matlab求基音频率,语音中提取基音频率matlab程序.doc

语音中提取基音频率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); endelse % 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); endend

%%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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值