1

주석 링크에서 볼 수 있듯이 Talkin의 음성 상자 피치 추적에 대한 피치 (기능 이름은 "fxrapt"임)가 추출됩니다.피치 추적을 기반으로 한 피치 동기 창 작업

http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/doc/voicebox/fxrapt.html

단, I는 각 피치주기 내에서 최대 진폭을 검출함으로써 LP 에러 신호의 피치 펄스를 찾을 필요가있다. 각각의 피치 펄스에 대하여, 두 피치주기의 해밍 윈도우가 길다. T (i-1), T (i), T (i + 1)이 3 개의 연속 피치 펄스의 위치를 ​​나타내는 경우. T (i-1)에서 T (i + 1)까지의 범위에서 피치 펄스에 대한 분석 창을 설계하려면 어떻게해야합니까?

enter image description here

나는 그것을 위해 MATLAB 코드를 찾고 있어요. 누군가가 나를 도울 수 있다면 정말 고마워 할 것입니다. 감사합니다. .

+0

https : //www.researchgate. net/file.PostFileLoader.html? id = 53086ec8d5a3f2ef298b45f4 & key = 6a85e53086ec8092cf –

답변

0

단계 :

  • 는 각 프레임의 기간을 찾을 피치 트랙을 적용하여 피치 트랙에 overalp를 사용하지, 당신은 동기 및 선형 적으로 할 필요가있다.

    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 
    
    :는 기간 = P를 찾을 때마다에서
  • 2

이들 두 단계는 다음과 같이 수행 할 수있는 P의 *의 범위 (1) 사이의 신호의 항목 최대 절대 진폭 검색

  • 이제 전체 신호를 나타내는 모든 마크를 얻은 다음 벡터 표시 주위에 을 걸어 두 피치 주기의 해밍 창을 표시하십시오!

    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

+0

여러분의 위대한 반응에 감사드립니다. 그러나 프레임에 피치 추적을 적용하면 제로가됩니다. 전체 웨이브 파일에서 작동하는 것 같습니다. 프레임 레벨에서 피치 추적 코드가 있습니까? lp 오류로부터 직접 피치를 찾을 수 있습니까? k는 무엇입니까, Step, Nsamples at the begining? –

+0

안녕하세요 @Ali, 정기적 인 신호에서 피치를 찾고, 자동 상관 피치 트랙으로 검색하거나 자신 만의 빌드를 할 수 있습니다! – ederwander