找到基于音高跟踪的音高同步窗口

时间:2014-02-22 09:40:27

标签: matlab signal-processing speech-recognition pitch pitch-tracking

如评论链接所示,提取了一个基于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)的范围内设计音高脉冲的分析窗口,如下图所示?

enter image description here

我正在为它寻找MATLAB代码。 如果有人能帮助我,我将非常感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

步骤:

  • 应用音高轨迹以查找每帧的周期,而不是使用 在你的音轨中,你需要同步和线性地完成它。
  • 每次您发现Period = P搜索范围1到P * 2之间信号的最大绝对振幅

这两个步骤可以这样完成:

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