실시간 휴먼 피치 감지


11

원시 마이크 입력을 분석하고 플레이어에게 노래가 얼마나 좋은지 알려주는 노래 게임을 구현하려고합니다. 그것은 실시간으로 이루어져야합니다.

나는 같은 질문을하는 많은 스레드를 보았지만 필드에 대한 경험이 부족하고 수학 배경이 얕기 때문에 여전히 그 문제를 해결하지 못했습니다. DSPDimension 웹 사이트 피치 시프트의 기사를 기반으로 알고리즘을 구현했습니다 : http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/

나는 기사가 설명하는 것처럼 실제 주파수와 크기를 추출하지만 이것으로 기본 주파수를 찾는 지 모른다. 빈을 최대 크기로 얻으려고했지만 피치 신호가 더 높은 경우에만 올바른 결과를 얻을 수 있습니다. 사용하는 오버 샘플링 계수는 중요하지 않지만 여전히 낮은 주파수 신호에 대해 나쁜 데이터를 얻습니다. 이 접근 방식이 완전히 잘못 되었습니까, 아니면 올바른 방향으로 가고 있지만 뭔가 빠졌습니까?

미리 감사드립니다.

편집 : 나는 피치 클래스에만 관심이 있다는 것을 잊어 버렸습니다. 따라서 기본이 누락되었지만 샘플에 강한 색조가 있습니다.

EDIT2 : 모두 덕분에 방금 매력처럼 작동하는 알고리즘 버전을 마쳤습니다. 낮은 피치 추정 문제는 입력 테스트 때문이었습니다. 노트를 부를 때 정확하게 일치했습니다. 또한, 나는 최고봉뿐만 아니라 모든 고조파를 고려하고 있습니다.


Wikipedia 에 정보가 있습니다.
Emre

답변:


9

나는 가장 큰 크기로 bin을 얻으려고 노력했지만 더 높은 피치 신호에 대해서만 올바른 결과를 제공하지만 사용하는 오버 샘플링 계수는 중요하지 않지만 여전히 낮은 주파수 신호에 대해 나쁜 데이터를 얻습니다.

고조파 기본보다 크기 때문입니다. 스펙트럼을 플로팅하면 알 수 있습니다. 진정한 기초를 찾는 더 좋은 방법은 자기 상관입니다. 그런 다음 파형 자체를 "미끄럼 이동"하고 파형이 자체적으로 정렬되는 지연을 찾습니다.

http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html

그들이 정확한 음을 부르기를 정말로 원합니까, 아니면 음성 레지스터에 따라 옥타브를 위나 아래로 부르면 괜찮습니까?


당신은 맞습니다, 나는 피치 클래스에만 관심이 있다는 것을 언급하는 것을 잊었습니다. : 내 도구를 테스트하려면이 웹 사이트를 사용하고 seventhstring.com/tuningfork/tuningfork.html을 . A (220Hz)의 입력에 대해 찾은 피치 클래스로 E (660Hz)를 반환합니다. 나는 sprectum을 보았고 220Hz는 실제로 있지만 660Hz보다 작은 크기입니다. 원하는 범위에서 최소 크기 및 캡 주파수 이하의 값을 필터링 한 후이 범위에서 얻은 스프 렉텀에는 4 개의 피크가 있습니다. [피크, 마그] = [220, 0.0203], [618, 0.0142], [660, 0.0668], [703, 0.0497].
Felipe Lira

방금 실제 주파수를 얻는 것처럼 크기를 계산하는 동안 위상 오프셋을 고려해야한다고 생각했습니다. 말이 돼? 빈에 대한 위상 오프셋이 대략 90º 인 경우 "피크"는 0 크기가 아닐까요?
Felipe Lira

@elipedrl : 기본적으로 기타 튜너를 작성하고 있습니다. :) 내가 이해하는 것처럼, 그들은 저역 통과 필터로 파형을 정리 한 다음 피크를 계산하여 피치를 얻습니다. electronicdesign.com/article/articles/… aboutmicrocontroller.blogspot.com/2008/04/… 하지만 저렴함보다는 정확성을 추구한다면 더 좋은 방법이 있습니다 gist.github.com/255291
endolith

@elipedrl : 빈의 위상 오프셋은 피치와 관련이 없어야합니다. 각 구간은 복소수이므로 해당 숫자의 절대 값 또는 크기에 관심이 있습니다. en.wikipedia.org/wiki/Absolute_value#Complex_numbers
endolith

1
그리고 어떤 이유로 든 짧은 대기 시간 (지연 시간, 시간 할당량 등)이 2 개 더 짧은 FFT가있는 경우 위상 보코더 계산은 더 긴 FFT를 수행하고 보간하는 것보다 계산이 적습니다.
hotpaw2

6

예, 피치에 피크 주파수 추정기를 사용하는 것은 잘못되었습니다. 피치는 심리 음향 현상이므로 피치 감지 또는 추정은 주파수 추정과 다릅니다. 비슷한 질문에 대한 이전 답변에서 제공된 피치 추정 방법이 많이있었습니다. 선택할 수있는 항목이 1 개 이상 있습니다.

여기의 하나 /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 , 또 다른 : 개선 피치 검출을위한 팁

ADDED # 1 : 이와 비슷한 질문이 너무 자주 제기되어 주제에 대한 더 긴 블로그 게시물을 작성했습니다. http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html


피치 클래스에만 관심이있는 정보로 질문을 업데이트했습니다. 나는 포스트 프로세싱을 갖춘 FFT가 이것으로 충분하기를 정말로 희망합니다. 나는 일정을 뒤엎고 접근 방식을 바꾸는 것이 끔찍할 것입니다.
Felipe Lira

@elipedrl : FFT가 작동합니다. 몇 개의 피크를 얻은 다음 그 중 하나를 스마트하게 선택하면 충분합니다. 유효한 피크는 기본의 정수배에 가깝지만 스퓨리어스 피크는 그렇지 않습니다. 스퓨리어스 피크를 선택하지 말고 원하는 음에서 한 옥타브가 아닌 3 차 고조파 등을 선택하지 마십시오.
endolith

주파수 피크가 뮤지컬 피치 주파수에 없을 가능성은 낮지 만 가능할 수도 있습니다. 일부 남성 모음은이 근처에있을 수 있으며, 모음 포먼트에 의해 필터링 된 후에 만 ​​남은 높은 톤입니다.
hotpaw2

고조파 제품 스펙트럼 방법은 초기 FFT 결과를 후 처리함으로써 스펙트럼 피크 그룹의 LCD 최저 공통 분모 추정치를 찾는 데 적합 할 수 있습니다.
hotpaw2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.