如评论链接所示,提取了一个基于Talkin的语音框中音高跟踪的鲁棒算法(函数名称为“fxrapt”)的音高。
http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/doc/voicebox/fxrapt.html
然而,我需要通过检测每个音调周期内的最大幅度来找到LP误差信号中的音调脉冲。对于每个音调脉冲,两个音调周期长的汉明窗口。如果T(i-1),T(i),T(i + 1)表示三个连续音调脉冲的位置。如何在T(i-1)到T(i + 1)的范围内设计音高脉冲的分析窗口,如下图所示?
我正在为它寻找MATLAB代码。 如果有人能帮助我,我将非常感激。 谢谢。
答案 0 :(得分:0)
步骤:
这两个步骤可以这样完成:
while ( (k+Step-1) <= Nsamples )
frame = x(k:k+steps-1);
P=PITCHTRACK_FUNCTION_HERE
[v, l] = max(abs(frame(1:P*2)));
if count == 1
marks(count) = l;
else
marks(count) = l+k-1;
count = count +1;
k=k+Step;
end
你现在所有的标记都指向你的整个信号,然后走路 围绕矢量标记为两个音高的汉明窗口 期间很长!
test=zeros(length(x),1);
for p=2:length(marks)-2
last=marks(p-1);
next=marks(p+1);
test(last:next)=test(last:next) + x(last:next) .* hamming(length(x(last:next)));
end
PS:
x =您的信号
Nsamples = length(x)
k =从1开始
步骤= 256或512或1024或2048