Matlab 基于基音跟踪的基音同步窗口查找

Matlab 基于基音跟踪的基音同步窗口查找,matlab,signal-processing,speech-recognition,pitch,pitch-tracking,Matlab,Signal Processing,Speech Recognition,Pitch,Pitch Tracking,从评论链接中可以看出,voicebox函数名为fxrapt的语音框中的基音跟踪稳健算法提取了逐基音 然而,我需要通过检测每个基音周期内的最大振幅来找到LP错误信号中的基音脉冲。对于每个基音脉冲,有两个基音周期的汉明窗口。如果Ti-1、Ti、Ti+1表示三个连续变桨脉冲的位置。如下图所示,如何为从Ti-1到Ti+1的跨度处的俯仰脉冲设计分析窗口 我正在寻找它的MATLAB代码。 如果有人能帮助我,我将非常感激。 谢谢 步骤: 应用俯仰轨迹以查找每帧的周期,而不是使用 在你的音高轨迹上,你需要同步和

从评论链接中可以看出,voicebox函数名为fxrapt的语音框中的基音跟踪稳健算法提取了逐基音

然而,我需要通过检测每个基音周期内的最大振幅来找到LP错误信号中的基音脉冲。对于每个基音脉冲,有两个基音周期的汉明窗口。如果Ti-1、Ti、Ti+1表示三个连续变桨脉冲的位置。如下图所示,如何为从Ti-1到Ti+1的跨度处的俯仰脉冲设计分析窗口

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

步骤:

应用俯仰轨迹以查找每帧的周期,而不是使用 在你的音高轨迹上,你需要同步和线性地做。 每次找到周期=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
附言:

x=你的信号

Nsamples=长度x

k=以1开头


Step=256或512或1024或2048

亲爱的ederwander tnx感谢您的大力响应。然而,当我在帧上应用俯仰跟踪时,它会给我zerro。我认为它适用于整个wave文件。你有在帧级进行俯仰跟踪的代码吗?我能直接从lp错误中找到音高吗?什么是k,Step,Nsamples?嗨@Ali,你可以在任何周期信号中找到音高,通过自相关音高轨迹搜索,或者建立自己的音高轨迹,都可以很好地工作!
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