인간의 정확도에 가까운 실시간으로 오디오 신호의 주파수 성분을 추출하는 가장 효율적인 방법


14

FFT와 같은 방식으로 임의의 오디오 샘플 (일반적으로 음악)의 주파수 구성 요소를 추출하는 방법을 (가능하면) 해결하려고 노력하고 있지만 FFT 알고리즘에 대한 연구에서 일부 문제가 있음을 알고 있습니다 이 목적에 대한 엄격한 제한.

FFT가 제시하는 3 가지 문제가 있습니다.

  1. FFT 빈 해상도는 창 크기와 같기 때문에 상당히 정확한 정확도 (1Hz)를 달성하려면 불합리하게 긴 창 (1 초)이 필요합니다. 이것은 과도 현상이나 새로 도입 된 주파수를 빠르게 감지 할 수 없음을 의미합니다. 또한 더 빠른 CPU와 더 높은 샘플링 속도로 문제를 해결할 수 없음을 의미합니다. 제한은 본질적으로 시간과 관련이 있습니다.

  2. 인간은 주파수를 로그로 인식하지만 FFT 빈은 선형으로 이격됩니다. 예 : 우리 심리의 로우 엔드에서 20Hz에서의 차이가 하이 엔드에서 20Hz에서의 차이가 눈에 보이지 않는 반면,. 따라서 저주파수에서 필요한 정확도를 얻으려면 고주파수에서 필요한 것보다 훨씬 더 많은 것을 계산해야합니다.

  3. 이러한 문제 중 일부는 FFT 빈 사이를 보간하여 해결할 수 있습니다. 주파수는 종종 아주 멀리 떨어져 있기 때문에 한 개의 빈에 한 개의 주파수 만 누출되기 때문에 이것은 많은 음악적 오디오에 효과적 일 수 있습니다. 그러나 특히 타악기 같은 비 조화적인 사운드의 경우에는 항상 그런 것은 아닙니다. 보간은 실제로 추측 일뿐입니다.

DFT / FFT 알고리즘에 대해 이해 한 결과, 출력 (빈 진폭)은 각 빈의 주파수에서 사인 / 코사인의 상관 관계입니다. 만약 bin 주파수가 비선형으로 간격을두고 (즉, 다른 사인 / 코사인 세트를 상관시키는) 알고리즘을 재 설계 할 수 있다면, 모든 주파수에서 pyschoacoustically- 균등 한 해상도를 달성 할 수 있습니다. 이것이 가능합니까, 아니면 관련된 수학에 대한 나의 불완전한 이해에 기초한 파이프 꿈입니까?

관심있는 모든 단일 주파수에서 사인 / 코사인을 상관시켜 무차별 대입 문제를 해결할 수도 있다고 생각합니다. 여기 수학에 너무 익숙하지 않습니다. 이게 가능해? 어떤 종류의 효율성? 내 문제를 해결할 수 있습니까?

신호의보다 정확한 실시간 주파수 분해를 달성하는 다른 방법이 있습니까? CPU 효율은 관심사이지만 중요한 관심사는 아닙니다. 이론적으로 전혀 수행 할 수 있는지에 관심이 있습니다. 그러나 현대 데스크탑 컴퓨터에서 실시간으로 실행 가능한 것이 이상적입니다.


3
어떤 문제를 해결하려고합니까? f0 감지, 다중 f0 감지 (전사), 코드 인식, 음색 모델링 ...? 이러한 문제 중 일부에 대한 임시 해결책이 있습니다. 가역성 (분석-> 변환-> 재 합성 프레임 워크에서 사용)에 관심이 있습니까?
pichenettes

내가 해결하려고하는 문제는 분명히 개방형입니다. 나는 당신의 목록의 대부분을 다루는 디지털 음악에 일반적으로 관심이 있습니다. 그러나 내 모호성은 부분적으로 수행 할 수있는 지식과 언급 한 각 문제를 해결하는 특정 업계 표준 또는 최선의 방법에 대한 지식이 부족하기 때문에 발생합니다 (이 질문을 할 때까지는 항상 FFT라고 가정 했습니다 ). 그러나 가장 관심있는 항목은 팀버 모델링입니다. 또한 녹음에서 복잡한 음색을 동시에 추출하는 방법을 찾고 싶습니다. 재 합성이 흥미 롭습니다. AI 알고리즘이 중요합니다.
bryhoyt

과거에 해결하려고했던 특정 문제는 언젠가 다시 시도하고 싶습니다. 마이크로 녹음 된 플레이어 또는 가수 그룹과 실시간으로 "개선"하는 프로그램을 작성하고 싶습니다. 나는 컴퓨터가 나와 함께 사인을 "휘파람"시키는 데까지 시간이 걸렸다. 그러한 즉흥 연주가 정확하게 조정되고 온 비트 (on-beat)되는 것이 중요합니다. 물론, 이것을 달성하는 다른 방법이 있습니다 (플레이어가 디지털 악기를 연주하거나 컴퓨터에 미리 설정된 화음 진행과 같은 "내부 정보"를 제공함). 그러나 이것은 나의 목표가 아닙니다.
bryhoyt

"빈 주파수가 비선형으로 이격되도록 알고리즘을 재 설계 할 수 있으며, 모든 주파수에서 pyschoousousousous-equal resolution을 달성 할 수 있습니다." 연속적인 Morlet wavelet 변환과 같은 소리
endolith

답변:


5

이전 게시물에 대해 언급했듯이 "단기 푸리에 변환" 로 알려진 시간-주파수 분석 방법 은 필터 뱅크와 동일하며 신호 x를 분석합니다 . 크기 N 의 주어진 분석 창 w n 에 대해 주파수 k / N 의 필터 는 다음과 같습니다. h n = w - n e j 2 π n kXxwnNk/N

hn=wnej2πnkN

일반적인 분석 창 (Hann, Hamming 또는 사각형)의 경우, 이것은 차단 주파수가 약 정도 인 저역 통과 필터에 해당 하며 주파수 bin k 로 "이동"됩니다 (복잡한 지수 변조 덕분에). 따라서 대역 통과 필터로 연결됩니다.1/Nk

이 시점에서 인간의 인식을 반영하는 것에 대한 귀하의 우려에 직접 응답하기 위해 일부 사람들은 [ "constant-Q transform"(CQT)] [Brown91]을 도출했습니다. 필터 뱅크 해석에서 FT와 동일한 원칙에 의존합니다. 그러나, 중심 선형 적으로 "정상적인"FT 용으로 이격되지 않고, LOG2 이격. 그런 다음 음계는 서양 음계와 밀접한 관련이 있습니다. 만약 f k + 1 = 2 1 / 12 f k를 선택 하면 옥타브 당 12 개의 주파수 (벨 소리? :-)를 얻습니다. 그리고 대역폭은 , 말 2 1 / 12 - 1fkfk+1=21/12fk. 필요에 가장 적합한 다른 센터를 선택할 수도 있습니다.21/1212fk

CQT의 구현은 여기에서 찾을 수 있으며, Klapuri 교수의 최근 구현은 다소 괜찮은 역으로 여기 에서 찾을 수 있습니다 . Telecom ParisTech의 오디오 그룹에도 Prado 교수 의 구현 이 있지만 아직 시도하지 않았습니다.

[Brown91] J. Brown, "상수 Q 스펙트럼 변환 계산", 미국 음향 학회지, 1991, 89, 425-434

20121014 수정 : (브리 호이트) 질문에 대한 답변과 의견.

  1. 주요 질문에 대한 자신의 의견에 대한 일반적인 아이디어 : 당신은 나에게 아주 간단한 문제가 아닌 많은 응용 프로그램에 관심이있는 것 같습니다. "Timbre modelling"은 피치 인식 또는 주파수 분해능 또는 정밀도가 그다지 중요하지 않은 음성 인식 등과 관련이 있습니다.

    또한 자동 즉흥 및 반주 주제를 다루고있는 최고 연구원 ( F. Pachet프랑스 IRCAM의 repmus 팀 )이 몇 명인지 고려하십시오 . 과제는 불가능하지는 않지만 여러 분야의 전문 지식이 필요합니다. 요약하면, 전형적인 시스템은 인간의 청각 시스템을 모방하고 (적어도) 사운드 / 음악 / 피치 / 리듬 지각을 구현하고, 음악 이론에 대해 알고 이전의 모든 단계의 추정을 기반으로 결정을 내려야합니다. 푸리에 변환 또는 신호 표현은 최종 목표를 향한 하나의 단계 일뿐입니다.

    즉, 모든 사람들이 실제로 발생하는 것보다 훨씬 멀리보고있을 가능성이 여전히 있으며 간단하고 우아한 솔루션으로 분해 할 수 있습니다! 완료되면 게시하는 것을 잊지 마십시오! :-)

  2. 44kHz에서 0.1 초의 샘플은 광범위한 주파수를 포함하기에 충분합니다.

    Fs/N=44100/4410=10Hz

  3. FFT는 저주파 및 고주파수에서는이를 감지 할 수 없지만 다른 알고리즘으로는 가능합니다.

    짧은 대답 : 멜로디 추정에 대한 논문을 읽으십시오!

    좀 더 정교하게하기 위해 : 많은 피치 추정 알고리즘은 처리 할 사운드에 대한 가정 덕분에 FT의 한계를 뛰어 넘습니다. 자연스러운 소리 (인간의 목소리, 오보에, 색소폰, 피아노 등)의 음표가 단일 정현파보다 더 복잡 할 것으로 예상합니다. 대부분의 피치 사운드는 다소 고조파이므로 주파수가 기본 주파수의 배수 인 정현파의 합으로 모델링 될 수 있습니다.

    따라서, 스펙트럼 합, 스펙트럼 곱 또는 자동 상관 함수와 같은 검출 기능을 사용하는 방법으로 피치를 추정 할 때 이러한 고조파를 고려하는 것이 유용합니다. 누군가 최근에 관련 주제를 시작했습니다 .

  4. 트레이드 오프 란 무엇입니까? 보다 구체적으로, 상당히 짧은 기간 동안 어떤 수준의 주파수 정확도를 기대할 수 있습니까? (CQT의 창 크기는 가변적이라는 것을 알고 있습니다. 얼마나됩니까?) 더 구체적으로, 대략적으로 얼마나 가까이 갈 수 있습니까? 0.005 초의 창에서 0.5 % 주파수 차이의 목표?

    앞에서 언급했듯이, 0.005 초의 창에서 200Hz의 "주파수 누출"과 같은 것을 기대할 수 있습니다. 200Hz보다 가까운 주파수를 가진 2 개의 정현파가있는 경우에만 FT가 2 개의 다른 정현파임을 보여줄 수 없습니다. 음, 우리는 0.5 % (반음은 주파수의 6 %입니다!)와는 거리가 멀고 0.005s는 실제로 목적에 따라 약간 작습니다. 그러나 0.005 초마다 추정치를 제공하려는 경우 일반적으로 음성 / 음악 처리 에서처럼 더 긴 겹치는 프레임을 처리 할 수 ​​있습니다. 실제로 원하는 것입니까?

    Nk=Fsfk(21/B1)
    BB=48fk=100Hz약 0.7 초 길이의 창문이 필요합니다. 우리가 그때 약간의 시간적 해상도를 잃어버린다는 것은 말할 나위가 없습니다. 그러나 앞에서 언급했듯이, 이것은 소리의 구조를 잊어 버린 경우에만 문제가됩니다. 또한, 심리 음향학은 500Hz 미만에서는 인간이 실제로 정현파를 잘 구별하지 못한다고 생각합니다. 인간조차도 거기에 도전합니다. 물론, 우리는 컴퓨터가 우리보다 더 잘할 수 있기를 바랍니다. 그러나 여기서 우리는 어려운 문제에 직면합니다!

    마지막으로 사운드의 시간-주파수 표현을 계산하는 다른 방법이 존재한다는 점에 유의하십시오. 예를 들어 감마 톤 필터 뱅크를 고려하십시오. 앞에서 언급 한 CQT의 장점은 변환 및 반전을위한 소프트웨어가 있다는 것입니다. 그러나 개인적으로 STFT는 여전히 단순하기 때문에 여전히 소스 분리를 ​​위해 저주파수에서 더 나은 분해능이 필요하지 않기 때문에 STFT를 고수합니다.

    [Schoerkhuber2010] Schoerkhuber, C. 및 Klapuri, A. "음악 처리를위한 Constant-Q 변환 도구 상자", 제 7 회 사운드 및 음악 컴퓨팅 컨퍼런스, 스페인 바르셀로나, 2010.


약간의 언급 : CQT는 문제 3의 포인트 1과 2를 해결하는 데 도움이 될 수 있지만 포인트 3은 해결하지 못할 수 있습니다. 포인트 3의 경우 항상 시간과 주파수 분해능간에 균형이 있으며 낮은 주파수에서 양호한 주파수 분해능을 원할 경우 주파수 구성 요소의 경우 시간 분해능을 잃어 버릴 가능성이 매우 높습니다. 피치 추정의 경우 다른 해결책이있을 수 있습니다. 관심이 있다면 박사 학위 논문에서 내 글을 읽을 수 있습니다 .D
Jean-louis Durrieu

잘 모르겠습니다. 나는 당신이 무료로 아무것도 얻지 못한다는 것을 알고 있습니다. 최소한 주파수에서 최소 두 기간 동안 좋은 해상도로 샘플링되지 않은 주파수를 정확하게 감지하는 알고리즘을 기대할 수는 없습니다. 그러나 44kHz에서 0.1s의 샘플은 인간이 정확하게 구별 할 수있는 광범위한 주파수 범위를 포함하기에 충분합니다. 어딘가에 있습니다. FFT는 저주파 및 고주파수에서는이를 감지 할 수 없지만 다른 알고리즘으로는 가능합니다.
bryhoyt

위의 모든 훌륭한 답변 중에서 CQT는 내가 묻는 질문에 가장 정확하게 맞는 것처럼 보입니다. 트레이드 오프 란 무엇입니까? 보다 구체적으로, 상당히 짧은 기간 동안 어떤 수준의 주파수 정확도를 기대할 수 있습니까? (CQT의 창 크기는 가변적이라는 것을 알고 있습니다. 얼마나됩니까?) 더 구체적으로, 대략적으로 얼마나 가까이 갈 수 있습니까? 0.005 초의 창에서 0.5 % 주파수 차이의 목표? (이것은 언제 인간이 어떤 곡이
틀리거나 엉성한

5

첫째, 고전적인 단기 푸리에 변환 방식에서는 보간법에 대한 대안이 있습니다. 특히 위상 정보를 사용하여 순간 주파수를 복구하는 기법 ( 이 질문 참조 )을 사용하면 스펙트럼 피크의 위치를 ​​매우 정확하게 지정할 수 있습니다. FFT 크기의 증가. 올바르게 말했듯이 단점은 시스템이 인접한 피크를 구별하는 능력을 높이 지 않는다는 것입니다. 그러나 이것은 FFT 빈 인덱스의 중심 주파수를 사용하는 것과 비교하여 이미 크게 개선되었습니다.

srFFT_size ) 분석 윈도우에 대해 적분이있는 복잡한 지수를 갖는 신호를 "탐색"하기 때문에 분석 윈도우 길이의 정수로 나뉜주기를 가져야합니다. 다른 비율에서 "프로브"주파수에 동일한 방식을 순진하게 사용하려고하면 완전한 사이클을 포함하지 않는 함수로 신호를 "프로빙"하기 때문에 작동하지 않습니다. 제대로 작동 시키려면 무차별 검색에서 모든 신호의 최소 공통 배수로 분석 창을 늘려야합니다. 이것이 바로 당신이 피하고 싶은 것입니다!

작동하는 또 다른 무차별 접근 방식이 있습니다. 복잡한 복소 지수 (Gabor wavelets)로 신호를 "프로브"합니다. 이것들은 중심 주파수, 중심 시간 및 대역폭 (시간에 따라 또는 시간에 걸쳐 웨이블릿이 어떻게 퍼지는지를 측정하는)을 특징으로합니다. 원하는 시간 오프셋, 주파수 및 대역폭에서 신호와이 웨이블릿 사이의 많은 상관 관계를 평가해야합니다. 결과는 각 시간 범위 및 각 주파수 대역에 대해 최적의 창 크기가 선택되는 매우 유연한 "타일 형"STFT와 같습니다. 계산 비용 외에도 단점은 효율적인 알고리즘과 인과 알고리즘이 없다는 것입니다 (사전에서 가장 긴 웨이블릿만큼 많은 샘플을 미리 알아야 함). 이러한 기술을 실험하고 싶다면MPTK .

k

  • k 는 이상적으로 미리 알려져 있어야한다. 모델 순서를 최적으로 선택하기 위해 ESTER와 같은 순서 추정 방법이 제안되었습니다.
  • 화이트 노이즈가있을 때 성능이 우수합니다. 분석하기 전에 신호를 화이트닝해야합니다. 필터 뱅크의 개별 채널에서 분석을 수행하는 것도 도움이됩니다.

계산 비용이 많이 들지만 모델 주문 및 / 또는 소음이 낮 으면 짧은 창으로 온라인에서 작업 할 수 있습니다.


4

주파수 또는 피치? 인간 피치 인식에 관한 많은 연구 논문과 책이 이미 있습니다. 그러나 IIRC, 인간은 피치 기본이되지 않는 한 정확하게 "추출"주파수가 나쁜 경향이 있습니다. 그리고 "임계 대역"내의 다중 주파수 피크는 잡음으로 인식되는 경향이 있습니다. 따라서 "인간 정확도가 가까운"모든 방법에는 사람의 지각 적 추정 실패도 포함되어야합니다.

FFT는 직교성 및 가역성이 요구 사항이 아닌 한 많은 목적에 적합하지 않은 필터 뱅크입니다. MEL 주파수 필터 뱅크와 같이 두 가지가 필요하지 않은 경우 (그리고 사람의 인식이 명확하지 않은 경우) 다른 필터 뱅크가 가능합니다. 주파수 피크가 MEL 주파수 필터 뱅크에 의해 식별되면, FFT 보간법 또는 위상 보코더 기술에 의한 추가 분석은 임의의 분리 된 스펙트럼 주파수 피크의 주파수 추정치를 개선하는 데 유용 할 수 있습니다.

FFT와 비교할 때 동일한 시간 영역 데이터 범위에서 사용되는 이러한 필터링 기술로 더 이상의 정보는 실제로 수집되지 않습니다. 실제로 일어나고있는 일은 실제로 인간의 청각 시스템의 "부정확성"또는 이상과 더 잘 일치하는 정보의 손실 일 수 있습니다.

그리고 일련의 주파수로부터의 피치 추정은 완전히 다른 문제입니다. 다시 한 번 많은 연구 논문과 청각학에 관한 책의 주제가 있습니다.

성능에 대한 귀하의 질문의 마지막 부분은 붉은 청어 일 수 있습니다. 요즘 휴대폰 프로세서에서 수십 개의 FFT와 수십 개의 서로 다른 필터 뱅크를 실시간으로 수행 할 수 있습니다. CPU 공급 업체가 제공하는 매우 효율적인 FFT 라이브러리를 감안할 때 1000 개의 "과도한"빈이있는 FFT는 훨씬 작지만 순진한 필터 뱅크보다 더 효율적일 수 있습니다.


매우 유익한 답변, 감사합니다. 피치와 주파수의 차이를 알고 있지만 귀하의 답변은 특정 요구 사항을 충족하는 사운드에 대한 인간의 정확성이 얼마나 중요한지를 강조하는 데 실제로 도움이되었습니다. 인간이 음조 기초가 아닌 주파수를 추출하는 데 상당히 나쁘다는 것이 내 조화에 대한 나의 지식과 일치합니다. 튜닝 간격을 서로 그리고 튜닝 간격을 정확하게 구분할 수 있습니다 (음조 간격은 불 조화보다 더 쉽습니다). 그러나 두 가지 조정 범위를 벗어난 간격 ( "평면", "매우 평평", "급격"등)을 구별하는 데 어려움이 있습니다.
bryhoyt

2

많은 대안이 있지만 그것은 당신이하는 일에 달려 있습니다. 물리적으로, 나는 귀가 FFT보다 병렬 필터 뱅크와 더 비슷하다고 주장하며, 이는 좋은 시간 분해능을 제공하며 "초점화"라는 프로세스는 좋은 주파수 분해능을 제공합니다. 따라서 이론적으로 필터 뱅크를 사용할 수는 있지만 많은 처리가 필요하므로 처리 할 데이터가 많습니다.

웨이블릿을 특히 효율적이고 관련된 필터 세트로 볼 수 있습니다. 음악 및 오디오 분석을위한 웨이블릿의 문제점은 일반적으로 1 옥타브 해상도 만 제공한다는 것입니다 (이에 대해 다양한 작업을 수행 할 수 있지만 웨이블릿이 오디오에 특히 유용하지는 않습니다).

또 다른 방법은 겹치는 FFT 창을 사용하는 것입니다. 크기 정보뿐만 아니라 위상 정보를 보면 FFT의 주파수 분해능을 높일 수 있습니다. 따라서 다른 방법으로 사용할 수있는 것보다 훨씬 짧은 창을 사용할 수 있으므로 성능이 향상되고 시간 해상도가 향상됩니다. 겹치는 창은 올바르게 재 합성하기 어렵고 위상에 대해 너무 많은 가정을하는 것도 위험 할 수 있습니다. 가능하다면, 이러한 종류의 트릭은 아마도 복잡한 시간-주파수 분석 문제를 해결하는 주요 요소 일 것입니다.

특정 응용 프로그램을위한 여러 가지 다른 도구도 있습니다.


1
xnXkmwn
Xfm=nxn+mwnej2πnkN
Nxnm
Xfm=pxpwpmej2π(pm)kN=pxphmp
hn=wnej2πnkN

1
STFT는 필터 뱅크 일 수 있지만 모든 필터 뱅크가 STFT는 아닙니다.
Bjorn Roche
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.