본문 바로가기

Domain Knowledge/Speech

Pitch detction(ACF, AMDF, Cepstrum)

유성음의 pitch

음성은 유성음과 무성음으로 구분할 수 있다. 유성음은 소리가 vocal tract를 타고 울려서 나오는 소리이므로 준 주기적인 성질이 나타나는데 이러한 준 주기적인 파형의 기본 주파수를 pitch라고 한다. 음성신호에서 Pitch는 40~400Hz 사이에 존재한다.

Autocorrelation method

[Autocorrelation을 통한 Pitch검출 방법]

Autocorrelation은 어떤 신호가 잡음과 함께 있을 때 그 신호의 주기검출에 주로 이용된다. 따라서 autocorrelation을 이용하면 음성신호의 주기를 쉽게 확인할 수 있다. 유성음의 준 주기적 파형의 기본 주파수를 pitch라 한다. Pitch는 음성신호의 샘플링 주파수를 autocorrelation의 first peak인덱스로 나누어준 값으로서 음성신호의 fundamental frequency이다.

 

[Autocorrelation함수의 이해]

autocorrelation method는 자기 자신을 cross-correlation 하는 형태로 주기가 맞을 때마다 큰 peak값이 생기게 되고 자기 자신이 완전히 서로 겹치게 되는 때에 제일 큰 peak 값을 갖게 된다. 유성음과 무성음의 차이는 correlation함수를 통해 알 수 있게 된다. 유성음의 경우 주기적인 성질이 크게 나타나기 때문에 correlation함수에서 peak와 다음 peak사이의 간격이 일정하다. 하지만 무성음의 경우 주기적이지 않기 때문에 자기 자신끼리 완전히 겹쳐지는 주기부분이 없어 peak값이 일정하게 존재하지 않게 된다.

 

 

위 그래프를 통해서 주기가 맞을 때 마다 peak값이 생기고 맞는 주기가 늘어갈수록 더 큰 peak값이 생김을 확인할 수 있다.

 

 

[Autocorrelation 적용과정]

  1. 여러 data를 비교하기 위해서 음성 data를 normalize한다.
  2. frame으로 나눈 뒤 각각의 frame의 유성음,무성음 판별을 위한 frame size를 설정한다.
  3. autocorrelation을 계산하여 그래프를 그린다.
  4. successive한 peak들을 통해 Pitch value를 찾는다.​

Center Clipped Autocorrelation method

[Autocorrelation의 한계]

Autocorrelation type의 주요한 한계는 너무 많은 음성신호 정보를 가지고 있다는 점이다. 그래서 Autocorrlation을 하게 되었을 경우 너무 많은 peak를 가지게 된다. 생성되는 peak들 중 대부분의 peak들은 신호의 그래프의 각 주기의 모양을 만드는 vocal tract response의 감쇠진동에 의해서 영향을 받는다. 그러므로 vocal tract response가 음성의 주기적 특성보다 클 경우에는 가장 큰 peak를 찾는 과정이 실패하게 될 것이다.

 

[Autocorrelation의 한계를 보완하는 Center clipping method]

주기성이 더 돋보이게 만들어 주기 위해서 center clipping method라는 것을 사용 할 수 있다. 주기성을 흩트리는 다른 요소들을 억누르는 과정을 진행하는 것이다. Center clipping method는 Autocorrelation의 전처리 과정으로 사용 할 수 있다. 이 과정은 vocal tract 의 transfer function을 제거한다. 그래서 더 적은 peak들이 autocorrelation함수에 나타나게 만들어 준다. 이런 전처리 과정을 거쳐서 더 정확한 pitch를 detection할 수 있다.

 

[Center clipping method의 이해]

 

 

CL은 clipping threshold이다. 일반적으로 CL 는 대략 음성신호의 최대 magintude의 30% 정도로 설정한다. 아래의 그래프를 통해 Center clipped된 신호는 신호의 절대값의 threshold magnitude 이상의 신호만 남게 되어 신호의 자잘한 특성이 제거되는 모습을 볼 수 있다.

 

 

[Autocorrelation based on center clipping method 적용과정]

  1. threshold를 기준으로 center clipping method를 적용한다.
  2. 여러 data를 비교하기 위해서 center clipping method를 적용한 음성을 normalize한다.
  3. frame으로 나눈 뒤 각각의 frame의 유성음, 무성음 판별을 위한 frame size를 설정한다.
  4. autocorrelation을 계산하여 그래프를 그린다.
  5. successive한 peak들을 통해 Pitch value를 찾는다.

AMDF( Average Magnitude Difference Function) method

[AMDF의 이해]

difference function은 delayed된 샘플신호와 원래의 샘플 신호의 차의 절대값으로 나타내어진다. difference function에서 가장 큰 magnitude를 갖을 때는 lag m이 fundamental period 와 같거나 매우 유사할 때이다. autocorrelation은 곱셈연산이 필요한데 비해 AMDF는 뺄셈 연산을 하기 때문에 더 적은 연산량으로 pitch period를 구할 수 있다는 장점이 있다. 하지만 정확성 측면에서 더 낮은 성능을 보이기 때문에 전처리 과정이 잘 이루어져야 하는 단점이 존재한다.

 

 

 

[AMDF method 적용과정]

  1. 여러 data를 비교하기 위해 음성을 normalize한다.
  2. frame으로 나눈 뒤 각각의 frame의 유성음, 무성음 판별을 위한 frame size를 설정한다.
  3. AMDF를 계산하여 그래프를 그린다.
  4. 제일 작은 AMDF값을 갖는 lag를 통해 Pitch value를 찾는다.

Cepstral Analysis method

[cepstrum의 이해]

음성신호의 스펙트럼은 빠른 신호와 느린 신호의 곱으로 나타낼 수 있다. 빠른 신호인 excitation신호와 느린 신호인 envelope의 곱이 음성신호가 되는 원리이다. 이때 두 신호에 대해 각각 알고 싶을 때 사용하는 기술이 cepstrum이다. 그러나 문제는 두 스펙트럼이 서로 곱해져 있어 분리가 어렵다는 것이다. 그러나 더해진 신호는 분리가 가능하다. 따라서 곱을 뎃셈으로 바꾸기 위해 log연산을 취하게 된다. 즉 ,

 

S(f) = X(f)H(f) 일 때,

log |S(f)| = log |X(f)H(f)| = log |X(f)| + log|H(f)| 가 된다.

 

따라서, DFT를 수행하여 음성신호를 주파수영역으로 변환한 뒤, 그 변환된 신호에 log값을 취해주면 빠른 신호와 느린 신호가 덧셈의 형태로 존재하게 되며, 이 신호를 다시 IDFT해주면 느린신호는 time축의 낮은 영역에 존재하며 빠른 신호는 time축의 높은 영역에 존재한다.(시간축과 주파수축의 duality성질 때문에)

 

[cepstrum을 이용한 pitch dectection]

cepstrum은 symmetric한 음성 sequence로서 계산되기 때문에 cepstrum의 반만을 이용하여 liftering을 진행할 수 있다.

 

 

Lc 는 liftering window의 cut-off길이 이고 N/2는 총길이의 반이다. Lc 는 대체로 15 or 20정도로 설정된다.

계산된 cepstrum c(n)과 high-time lifter의 컨벌루션 과정을 이용하여 빠른 음성성분만 추출 할 수 있고 거기서 max값을 추출하면 pitch로 dectection된다.

 

[cepstrum 적용과정]

  1. 여러 data를 비교하기 위해 음성을 normalize한다.
  2. frame으로 나눈 뒤 각각의 frame의 유성음, 무성음 판별을 위한 frame size를 설정한다.
  3. frame을 cepstrum으로 만드는 위의 diagram 과정을 거친다.
  4. high time lifting과정을 거친 후 max값을 검출하는 과정을 통해 Pitch value를 찾는다.

**pitch detection의 과정 : cepstrum은 symmetric하기 때문에 cetrstum의 반만 이용하게 된다. liftering filter의 window크기를 정한다. 15에서 liftering window의 length까지 1로 만들어서 윈도우를 생성한다. 그 후 윈도우를 적용한다. peak값을 찾고 peak값이 나오기 위한 거리가 pitch period가 되고 1/period*fs식을 통해 pitch frequency(pitch)를 구한다.