2011-04-06 2 views
2

스트리밍 오디오 데이터에서 JLip-sync와 같은 모음을 캡처하기 위해 빠른 스펙트럼 분석을하려고합니다. PyAudio를 사용하여 짧은 기간 (0.0625 초) 동안 작은 청크 (1024)로 음성 데이터를 캡처합니다. 분석을 위해 numpy.fft를 사용하고 numpy.hanning 창을 사용하여 누출을 제거합니다. 4096 * 4를 샘플링 속도로 사용하고 있습니다 (44100 또는 22050이 아니며 토론에 개방되어 있으며 4096 * 4는 22050에 가장 가깝습니다).윈도우 크기 대 FFT 데이터 길이

관심있는 주파수 (300Hz에서 3000Hz까지)를 고려하면 이상적인 창 크기는 데이터 길이와 최소/최대 주파수를 사용하여 어떻게 계산할 수 있습니까?

감사합니다.

카디르

답변

3

결정적인 요인은 서로 다른 모음을 구별하기 위해 주파수 영역에서 필요로 얼마나 많은 해상도입니다. 해상도는 1/T입니다. 여기서 T은 FFT 창의 지속 시간입니다. 따라서 62.5 밀리 초 동안 샘플링하면 FFT가 샘플링 간격 (1024 샘플)과 같은 크기 인 경우 최대 해상도는 16 Hz입니다 (즉, 각 FFT 빈은 16 Hz입니다). 더 작은 FFT로 간다면 분명히 해상도가 비례하여 나빠질 것입니다. 512 포인트 FFT는 32Hz의 해상도만을가집니다.

+0

답장을 보내 주셔서 감사합니다. "Formants"는 일반적으로 약 100 개의 HZ 분리를 가지고 있습니다.때로는 겹쳐 지지만 두 번째 포먼트는 1000Hz 수준에서 상당히 다릅니다. 128로 내려갈 수 있습니다. 데이터 길이 (1024 : 1024)와 동일한 창 크기를 사용하면 아무 것도 풀리지 않습니까? –

+0

@ 카디르 : 나는 16 헤르츠가 이것에 대한 충분한 해상도라고 생각할 것입니다 - 당신이 개별적인 고조파를 식별하고이 정보를 사용하여 포먼트를 결정할 수 있다면 당신은 괜찮을 것입니다. –

+0

Paul, 다시 감사드립니다. 그게 문제 야. 모든 "에너지"는 하이 엔드에있는 것 같습니다. 이론적으로 나는 개별 고조파를보고 나서 포먼트를 식별 할 수 있지만 그렇지 않습니다. 스펙트럼의 절반 정도 인 300 - 3000Hz 대역에 관심이 있기 때문에 차라리 256p 이동 평균과 같은 것을 사용해야할까요? –

4

@Kadir :

이산 푸리에 변환 (DFT 나 FFT)로 처리하기 전에 데이터를 윈도의 목적은 당신이하려고 할 때 비주기적인 데이터를 푸리에 변환이 발생 스펙트럼 누설을 최소화하는 것입니다 .

창 작업은 시퀀스의 시작과 끝에서 데이터를 0으로 부드럽게 강제 적용하지만 이전에는 적용되지 않습니다. 창을 짧게하면 정보가 불필요하게 파괴됩니다.

그래서 윈도우 길이는 샘플 시퀀스의 길이와 일치해야합니다. 예를 들어, 1024 샘플을 사용하는 경우 윈도우 길이는 1024입니다.

해결하려는 최고 주파수가 3KHz 인 경우 다양한 샘플링 속도로 8192 샘플 이상 (예 : 16384 또는 32768 샘플)을 사용하십시오.

또한 다른 FFT 알고리즘, 다양한 샘플 길이 및 Hann (Hanning)을 비롯한 다른 창을 시도하고 Blackman-Harris 시리즈 및 Kaiser-Bessel과 같은 더 나은 사이드 로브 감쇠가있는 다른 창을 사용해보십시오 계열 등

응용 프로그램에 잡음이 많은 경우에는 더 나은 잡음 억제 창과 높은 스펙트럼 해상도 창 중 하나를 선택해야 할 수 있습니다. 따라서 다른 창을 시도하는 것이 좋습니다. 따라서 응용 프로그램에 가장 적합한 창을 찾을 수 있습니다.

이제 각 설정 (예 : 각 창, 샘플 길이, 샘플링 속도 등)에 결과를 기록하고 여러 설정에서 동의하는 결과를 찾습니다. 당신은 당신의 데이터에 대해 많은 것을 배울 것이고 당신의 문제에 대한 답을 찾을 가능성이 높습니다.

당신은 matlab에 함께이 작업을 수행 할 수 있습니다 http://www.mathworks.com/help/techdoc/ref/fft.html

또는이 온라인 FFT 스펙트럼 분석기 : http://www.sooeet.com/math/fft.php

그리고 여기에 결과를 게시하는 것을 잊지 마세요.