피치 추출에 AMDF를 사용할 때 낮은 기본 사항을 처리하는 방법은 무엇입니까?


11

평균 주기 차 함수 를 사용하여 준주기 오디오 신호의 기본 주파수를 추정하고 있습니다. AMDF는 다음과 같이 정의됩니다

Dn=1Nnk=nN1|SkSkn|

여기서 은 신호의 길이입니다. 이 기능은 신호가주기와 같은 양만큼 시프트 될 때 최소값을 나타냅니다.N

이것은 피치를 추출하는 데 사용하는 코드입니다 (Matlab에서).

 a = amdf(f);
 a = a/max(a);
 [p l] = findpeaks(-a, 'minpeakprominence', 0.6);
 pitch = round(sample_freq/l(1);

그러나 기본 주파수가 매우 낮은 오디오 신호를 처리하고 있습니다.

오디오 신호의 스펙트럼

결과적으로 피치 배가 문제가 발생합니다. 감지 된 최소값은 신호주기의 절반에 해당합니다 (예 : 두 번째 고조파).

위 신호의 AMDF

나는 첫 번째 피크뿐만 아니라 가장 큰 피크를 추출하려고 시도했지만 때로는이 문제가 남아 있습니다. 낮은 기본 사항을 처리하기 위해 코드 및 / 또는 AMDF 기능을 개선하려면 어떻게해야합니까?


심리 음향과 인간의 지각은인지 된 음높이와 옥타브 불확실성에 영향을 미칩니다. 가장 큰 AMDF 피크가 어떤 조건에서 들리는 차이를 만드는지 결정하기 위해 실험이 필요할 수 있습니다.
hotpaw2

당신의 주파수는 얼마나 낮습니까? 내가들을만한 예가 있습니까?
ederwander

답변:


10

이것이 우리가 " 옥타브 문제 "인 피치 감지 사업자에서 부르는 것입니다 .

우선, AMDF를 ASDF로 변경했습니다. 지연 시간이 길어지면 창 크기를 줄이지 않습니다. (또한 기존의 표기법으로 표기를 변경하고 있습니다. "x[n]"는 이산 시간 신호입니다.)

의 평균 제곱 차이 함수 (ASDF) x[n] 샘플 근처에 x[n0] 입니다 :

Qx[k,n0]1Nn=0N1(x[n+n0N+k2]  x[n+n0N+k2+k])2

floor()함수이고 가 짝수이면 입니다.kk2=k+12=k2

이제 정사각형을 확장하고 ( 무한대가 아니라 이 큰 경우 아이디어를 줄 것 입니다) 와 같은 요약을 고려하십시오 . ASDF는 자기 상관과 직접 관련이 있습니다. 본질적으로 자기 상관은 거꾸로되어 있습니다. 이 단계는 내가 당신에게 맡길 것입니다. 이 답변을 살펴보십시오.NN N

이제 ASDF에서 정의 된 이 유한 길이 "자가 상관" (샘플 )을 고려하십시오.x[n0]

Rx[k,n0]=Rx[0,n0]12Qx[k,n0]

어디

Rx[0,n0]1Nn=0N1(x[n+n0N2])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 옥타브 아래의 서브 하모닉 피치에 해당하는 피크를 가중 또는 비 강조 또는 핸디캡하는 일관된 방법입니다.

여전히 임계 값 문제가 남아 있습니다. 잘 선택해야합니다 . 그러나 이것은 일관성있는 방법은 한 옥타브 낮은 두 번째를 통해 첫 번째 피크를 강조하지만,하지 너무 많은 메모가 정말 있다면 있다는 것입니다 옥타브가 낮은 있지만, 짝수 고조파의 모두 에너지가 홀수에 비해 강한 고조파의 경우, 여전히 두 번째 피크가 선택 될 가능성이 있습니다.α


1
마지막 질문에 답하기 위해 : 220Hz 진폭을 추가하면 피치는 220Hz가됩니다. 여기서 440Hz는 기본 (수학적으로 말하면) 이후 첫 번째 고조파입니다. 내 경우도 비슷하지만 더 높은 고조파가 있기 때문에 누락 된 기본은 지각 관점에서 문제가되지 않습니다. AMDF를 ASDF로 대체하여 옥타브 문제를 해결하는 방법을 이해하지 못합니다
firion

그러나 질문의 ​​나머지 절반은 ""어떻게 들릴 것입니까? " 그것에 응답 한 다음 피치 검출기가 무엇을 원하는지 봅시다.
robert bristow-johnson

에서 한 것과 동일한 톤에 대해 을 계산하고 플로팅 십시오. AMDF와 거꾸로 보일 것입니다. 아르 자형엑스[케이,0]
robert bristow-johnson

다른 고조파가없고 440Hz 중 하나만 있고 220Hz 톤이 충분히 낮은 경우 440Hz 피치가 들립니다. 어떤 레벨 위에서 (어느 쪽인지 모르겠습니다) 220Hz 톤과 220Hz 피치도 들립니다.
firion

내가 -60 dB라고 말한 이유가 있습니다. 이제 피치 감지기가 220Hz 또는 440Hz 음 또는 다른 것으로 말하고 싶습니까?
robert bristow-johnson 2016

0

휴리스틱하게, 유성음의 기본 주파수는 [70, 400] Hz 간격으로 놓입니다. 따라서 첫 번째 단계는 대역 통과 필터를 적용하여 해당 대역을 대략 분리하는 것입니다.

둘째, 전력 스펙트럼에 가중치 기능을 적용 할 수 있습니다. 근본 근처에서 가중치는 1에 가까우며 밴드의 끝에 가까울수록 가중치는 0에 가까워 야합니다. 나는 2 차, 4 차 등 초 선형을 추천합니다. 실제로 옥타브를 없애는 것입니다.


체중을 어떻게 적용 할 수 있습니까? 기본이 어디에 있는지 모르겠습니다. 또한 내 신호는 악기의 음표이므로 범위가 더 큽니다
firion
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.