语音中提取基音频率matlab程序(Matlab program for extracting pitch frequency in speech)
语音中提取基音频率matlab程序(Matlab program for extracting pitch frequency in speech)
% corr.m
基音估计的相关性
%旗= 1从左到右,否则,从右到左
% R =更正(S,L,标志)
%
%
%旗= = 1时
%
%
%
% | --我-- |
%s:.....................................................
%。
%。
%。
%。
%。
%。
%s:.....................................................
% | _______ D ________ | __________________ L-D _____________ |
%返回值是一个序列
%注意到在做自相关时,错位值从20开始
%考虑到在用这个自相关序列时可能是用于求周期,这个20时有利的
%语音的基音周期一般在20到140,因此小于20没有周期
而错开以上可以避免出现不是所求的峰值避免出错% 20
%求到结果后放到RR序列中时,注意到下标为我时实际上已经是错开
%我+ 20-1,因此球场。我在调用这个时需要有一句P = 19 + ind_pitch;
函数r(S,D,科尔旗)
ε= 1.0e-10;为避免除以零
l =长度(s);
NM = 120;
如果国旗= = 1%从左到右
我= 20分钟(L·d,NM)
温度=0;
temp1 = 0;
temp2 = 0;
对于j = 1:d
温度= s(j)s(j + i);
temp1 = temp1 + S(J +我)*(J +我);
temp2 = temp2 + S(J)*(J);
结束
PW1 = SQRT(temp1)+ε;
PW2 = SQRT(temp2)+ε;
R(i-19)=温度/(1×PW2);
结束
其他为从右到左
我= 20分钟(L·d,NM)
温度=0;
temp1 = 0;
temp2 = 0;
J = L + 1:L
温度=温度+ S(J-1)*(J);
temp1 = temp1 + S(J-1)*(J-1);
temp2 = temp2 + S(J)*(J);
结束
PW1 = SQRT(temp1)+ε;
PW2 = SQRT(temp2)+ε;
R(i-19)=温度/(1×PW2);
结束
结束
% Maxx。M
为找到所有功能大于局部极大值
t倍是全局最大值
% max_index = Maxx(S,T)
%输入一个序列和一个标量T
%的的最大值max_value首先求出序列
%然后如果序列中的一个点比相邻两个点都大
%而且还大于max_value的T倍
就把这个点的位置存放在序列MI中%
在序列MI最后再补上序列的最后一个点%
%考虑到第一个点和最后一个点有可能满足要求
%但这两个点都不能跟旁边的比较
%所以还是把这两个点保留了,放在MI序列的第一个和最后一个
实际上就是以最大值点的T倍为界找出这个界以上的极值点的位置%
功能MI = Maxx(S,T)
max_value = max(S);
老= 0;
l =长度(s);
j=1;
MI = [ 1 ];
对于i = 1:L-1
如果s(i)s(i + 1)
状态= 1;
结束
如果(我)T * max_value
j = j + 1;
MI(j)= i;
结束
结束
新老=;
结束
长度(MI);
MI(LL + 1)=长度(s);
%沥青。
%这是一个函数来找到足够长的讲话的基音周期。
%区间。为了找到正确的基音周期,有利于
选择短周期。即,如果P1P2 * Thr,我们选择P1
%而不是P2。
%
%使用情况[ p,MX=间距(s)
%输入一个序列,首先求出其自相关序列RR
%要求出第一个周期的极大值点
%首先求出序列的最大值格言所在的位置,如果这个位置在thr_largepitch以内
就认为这就是要求的点如果这个位置大于thr_largepitch,就考虑小于%。
% thr_largepitch的范围内有没有点满足以下条件:大于准则* thr_maxx的极值点,
%大于max(thr_corr,thr_pitch *准则)。
%如果有满足条件的,第一个点就是所求点
%至于为什么可以这样做,还没搞懂
%总的说来,这个函数返回一个序列的第一个周期
函数[ p,MX ] =音高(s)
thr_pitch = 0.75;
thr_maxx = 0.7;
thr_corr = 0.33;
thr_largepitch = 60;
ε= 1.0e-10;%用于避免被零除
l =长度(s);
D = 100;
RR =更正(S,D,0);%最后一个参数是0