【问题标题】:find Pitch-synchronous windowing based on pitch tracking基于音高跟踪找到音高同步窗口
【发布时间】:2014-02-22 09:40:27
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

步骤:

  • 应用音高轨道来查找每帧的周期,而不是使用 在你的音高轨道上重叠,你需要同步和线性地做。
  • 每次找到 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

【讨论】:

  • 亲爱的 ederwander tnx,感谢您的出色回应。但是,当我在帧上应用音高跟踪时,它给了我零。我认为它适用于整个波形文件。你有帧级别的音高跟踪代码吗?我可以直接从 lp 错误中找到音高吗?什么是 k,Step, Nsamples 的开头?
  • 嗨@Ali,您可以在任何周期性信号中找到音高,通过自动相关音高轨道搜索或构建自己的音高轨道!
猜你喜欢
  • 2017-10-08
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2019-06-01
  • 2014-01-19
  • 2013-09-12
  • 2010-12-26
相关资源
最近更新 更多