이전에 물어 보았던 질문과 비슷한 질문을 드려 죄송합니다 (FFT Problem (Returns random results)). 그러나 피치 감지 및 자기 상관을 찾은 후 음조에 대한 코드를 찾았습니다 자기 상관을 이용한 검출.자기 상관은 마이크 입력 (고역 통과 필터 사용)을 사용하여 무작위 결과를 반환합니다.
나는 노래하는 사용자의 음조 탐지를 시도합니다. 문제는 임의의 결과가 계속 반환된다는 것입니다. http://code.google.com/p/yaalp/에서 C++로 변환 한 후 (아래) 수정 한 코드가 있습니다. 내 샘플 속도는 2048이고 데이터 크기는 1024입니다. 저는 사인파와 마이크 입력의 피치를 감지하고 있습니다. 사인파의 주파수는 726.0이며, 722.950820 (이는 괜찮습니다)이지만, 마이크의 피치를 약 100에서 약 1050 사이의 난수로 감지합니다.
나는 지금 하이 패스 필터를 사용하여 DC 오프셋을 제거하지만 작동하지 않습니다. 나는 그것을 올바르게하고 있는가? 그렇다면 그것을 해결하기 위해 무엇을 할 수 있을까? 어떤 도움이라도 대단히 감사하겠습니다! (고정)
감사합니다,
니얼.
편집 : 30hz의 컷오프가있는 고역 통과 필터를 구현하는 코드가 변경되었습니다 (What Are High-Pass and Low-Pass Filters?에서 누구나 고역 통과로 전환하여 저역 통과 필터를 변환하는 방법을 알 수 있습니까?)하지만 여전히 돌아오고 있습니다. 무작위 결과. 그것을 VST 호스트에 연결하고 VST 플러그인을 사용하여 스펙트럼을 비교하는 것은 불행히도 내게 옵션이 아닙니다.
수정 : 모든 도움을 주셔서 감사합니다.하지만 지금은 새로운 코드를 사용하여 작동하지 않습니다.
BTW : 할당 된 메모리를 할당 취소 한 적이 없으므로 메모리 관리가 향상됩니다.하지만 알고 계시고 먼저 알고리즘을 실행하고 싶습니다. 그러나 그것에 대해 잊지 말아야합니다! – mmmmmmmm
왜이 태그가 C++입니까? 이 코드는 C++이 아닙니다. – GManNickG
거기에 하나의 C++ 라인이 없지만 Niall은이 방법을 좋아합니다. – gimpf