이것이 우리가 " 옥타브 문제 "인 피치 감지 사업자에서 부르는 것입니다 .
우선, AMDF를 ASDF로 변경했습니다. 지연 시간이 길어지면 창 크기를 줄이지 않습니다. (또한 기존의 표기법으로 표기를 변경하고 있습니다. "x[n]"는 이산 시간 신호입니다.)
의 평균 제곱 차이 함수 (ASDF) x[n] 샘플 근처에 x[n0] 입니다 :
Qx[k,n0]≜1N∑n=0N−1(x[n+n0−⌊N+k2⌋] − x[n+n0−⌊N+k2⌋+k])2
⌊⋅⌋ 는 floor()
함수이고 가 짝수이면 입니다.k⌊k2⌋=⌊k+12⌋=k2
이제 정사각형을 확장하고 ( 은 무한대가 아니라 이 큰 경우 아이디어를 줄 것 입니다) 와 같은 요약을 고려하십시오 . ASDF는 자기 상관과 직접 관련이 있습니다. 본질적으로 자기 상관은 거꾸로되어 있습니다. 이 단계는 내가 당신에게 맡길 것입니다. 이 답변을 살펴보십시오.N→∞N N
이제 ASDF에서 정의 된 이 유한 길이 "자가 상관" (샘플 )을 고려하십시오.x[n0]
Rx[k,n0]=Rx[0,n0]−12Qx[k,n0]
어디
Rx[0,n0]≜1N∑n=0N−1(x[n+n0−⌊N2⌋])2
이후 과 모든 시차에 대한 , 그 수단 모든 시차에 대한 .Qx[0,n0]=0Qx[k,n0]≥0kRx[k,n0]≤Rx[0,n0]k
이주기 로주기 적이고 는 정수 라고 가정합니다.x[n]PP
x[n+P]=x[n]∀n
그리고 임의의 정수주기 ( 은 정수)에 대해 이고 . 만약에서 피크를 얻을 수 있도록 및에 의 임의의 다른 여러 동일한 경우 주기이다. 경우 입니다 하지 완벽주기, 우리가 기대하는 것은에서 가장 큰 피크 에서, 또 다른 피크 (그러나 약간 작은) 의 큰 배수에 대한 (우리가 찾고있는 기간) 및 점진적으로 작은 봉우리 .Qx[mP,n0]=0Rx[mP,n0]=Rx[0,n0]≥Rx[k,n0]mk=0kPx[n]x[n]k=0k=PP
그래서 옥타브 문제 에 대한 때문에 몇 가지 이유로 제공됩니다. 우선, 는 반드시 정수일 필요는 없습니다. 그것은 보간 문제이며 큰 문제는 아닙니다. P
두 번째 이유와 더 어려운 문제는 하위 고조파 때문 입니다. 정확히 A-440Hz에서 좋은 주기적 톤을 듣고 중간 C보다 9 반음이 높은 A처럼 들립니다. 이제 누군가 누군가이 톤에 매우 작은 진폭 (예 : 60dB)을 추가한다고 가정합니다. -220? "진정한"기간은 무엇이며 수학적으로 어떤 소리를 낼까요?
해당 기간 동안 "오른쪽" 피크를 선택합니다 .
의 평균 이 0이 되도록 DC 차단 필터를 통해 메모를 실행한다고 가정 해 봅시다 . 모든 에 대한 자기 상관 의 평균 도 0이됩니다 (또는 이 큰 경우에 가까움 ). 이는 합이 이상 ( 0 이상 ) 이어야 한다는 것을 의미합니다. 즉 0보다 큰 영역이 아래와 같습니다.x[n]Rx[k,n0]n0NRx[k,n0]k
좋아, 의 힘을 나타내고 주위 근방을 및 비 음성이어야한다. 은 절대 초과하지 않지만 이 주기적 일 때만 큼 커질 수 있습니다 . 경우 입니다. 따라서 이주기 와주기 적이고 의해 이격 된 피크가 있고 피크가 얼마나 높아야하는지에 대한 아이디어가 있습니다. 의 DC 성분이라면 제로 - 사이 피크 것을 의미, 그것은 해야 음수 값을 갖는다.Rx[0,n0]x[n]n=n0Rx[k,n0]Rx[0,n0]x[n]Rx[P,n0]=Rx[0,n0]x[n+P]=x[n]x[n]PPRx[k,n0]
경우 "준 - 주기적"을, 1 개주기 인접 사이클과 매우 비슷하지만 그다지의주기와 같은 더 시간 신호 다운. 즉, 첫 번째 피크 은 의 두 번째 또는 세 번째 보다 두 번째보다 높습니다 . 규칙을 사용하여 항상 가장 높은 피크를 선택하고 가장 높은 피크가 항상 첫 번째 피크가 될 것으로 기대할 수 있습니다. 그러나, 들리지 않는 서브 하모닉 때문에 때때로 그렇지 않습니다. 때로는 두 번째 또는 세 번째 피크가 약간 높아집니다. 또한,주기 때문에 샘플되지만 정수인 것 같지 않다 에서x[n]x[n]x[n]Rx[P,n0]Rx[2P,n0]Rx[3P,n0]PkRx[k,n0]는 항상 정수이므로 실제 피크는 정수 값 사이에있을 수 있습니다 . 부드러운 피크가있는 곳 (내가 추천하고 2 차 보간법이 충분히 좋습니다)과 실제로 정수 사이의 높이를 보간해야하더라도 보간 알고리즘은 피크를 실제보다 약간 높거나 낮게 만들 수 있습니다. 따라서 절대적으로 가장 높은 피크를 선택하면 실제로 다른 피크를 원할 때 첫 번째 피크보다 두 번째 피크를 가짜로 선택할 수 있습니다.kk
어떻게해서 든 를 증가시키면서 피크 를 핸디캡으로 해야 첫 번째 피크가 두 번째에 비해 약간의 이점을 가지게되며 두 번째는 네 번째 (다음 옥타브 아래)에 비해 약간의 이점이 있습니다. 어떻게해야합니까?k
에서의 피크가 에서의 동일한 피크에 비해 일부 요인만큼 감소 되도록 에 의 감소 함수를 곱하면 됩니다 . 지수 함수가 아닌 지수 함수가 그렇게한다는 것을 알 수 있습니다. 그래서 계산Rx[k,n0]kk=2Pk=P
k−α Rx[k,n0]
그래서, 만약 기간 완벽하게 주기적이었다 , 및 비 - 정수 보간 문제를 무시 이어서,x[n]PP
Rx[2P,n0]=Rx[P,n0]
그러나
(2P)−αRx[2P,n0](2P)−αRx[P,n0]=<P−αRx[P,n0]
1 옥타브 낮은 피치의 피크가 감소하는 요인은 비율입니다
(2P)−αRx[2P,n0]P−αRx[P,n0]=(2P)−αP−α=2−α
따라서 첫 번째 피크에 두 번째 피크에 대해 1 %의 부스트를 주려면 하위 고조파 피치 자기 상관이 첫 번째보다 1 % 이상 높지 않으면 피치를 하위 고조파 피치로 선택하지 않습니다. 피크, 당신은 에서 해결할 것 입니다α
2−α=0.99
이는 1 옥타브 아래의 서브 하모닉 피치에 해당하는 피크를 가중 또는 비 강조 또는 핸디캡하는 일관된 방법입니다.
여전히 임계 값 문제가 남아 있습니다. 잘 선택해야합니다 . 그러나 이것은 일관성있는 방법은 한 옥타브 낮은 두 번째를 통해 첫 번째 피크를 강조하지만,하지 너무 많은 메모가 정말 있다면 있다는 것입니다 옥타브가 낮은 있지만, 짝수 고조파의 모두 에너지가 홀수에 비해 강한 고조파의 경우, 여전히 두 번째 피크가 선택 될 가능성이 있습니다.α