Zero lag에서 Difference Function은 0이지만, 주기성가 불완전할때가 있기에 주기에서는 0이 아닌 경우가 많다.
low limit를 선택하지 않으면 Zero lag dip을 선택하기 떄문에 방법은 실패한다.
lower limit 설정하더라도 첫번쨰 포먼트에서 강한 공명(resonance) 발생하면, 일련의 이차딥이 발생할 수 있으며, 그것들 중에 하나는 주기 딥보다 깊을수 있음. F1과 F0의 범위가 겹치지기에 lower limit을 거는거는 만족할만한 방법은 아님
포먼트가 무엇인가?
말할때 성대에서 발생하는 강한 공명 주파수를 의미함. 말할때 비강, 입, 목구멍을 지나면서 상호연결된 챔버와 튜브 역할을 함. 각 튜브에는 고유한 공진 주파수(resonant frequency)가 존재한다. F1, F2, F3 포먼트 등이 있고, 1이 제일 낮고 3이 제일 높다.
따라서 Pitch Detection에서 F0의 근본 주파수와 F1의 공진 주파수 범위가 겹치기에 lower limit을 설정하는것 만으로는 제대로 pitch detect를 할수 없다.
해답은 difference function을 cumulative mean normalized function으로 대체하는것! (CMNF로 줄여부르는듯) 한국어로 하면 누적평균 정규화 함수
r=0 이면 1,
이 함수는 이전 값의 더 짧은 지연 값에 대한 평균으로 나누어서 구함.
이 함수는 0이 아닌 1부터 시작하고, d(t)가 평균 이하로 떨어지는 경우에만 1 이하로 떨어짐.
이걸로 대체하면 too high error가 감소하여 1.95-> 1.69로 감소함.
두번쨰 장점은 search range의 주파수 상한을 없애 zero-lag dip을 피할 필요가 없어짐.
세번째 장점은 다음 스텝을 위해 정규화가 된다는 점.