1

如评论链接中所见,通过 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 代码。如果有人可以帮助我,我将不胜感激。谢谢。

4

1 回答 1

0

脚步:

  • 应用音高轨道来找到每一帧的周期,不要在音高轨道中使用 overalp,你需要同步和线性地做。
  • 每次找到 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 = 长度(x)

k = 以 1 开头

步长 = 256 或 512 或 1024 或 2048

于 2014-02-22T13:11:55.250 回答