오디오 파일이 있고 파일을 반복하고 각 단계마다 512 개의 샘플을 가져온 다음 FFT를 통과시킵니다.FFT를 스펙트로 그램으로 변환
블록 514가 실제 및 허수 구성 요소가 인터리브 된 상태로 (IPP의 ippsFFTFwd_RToCCS_32f_I 사용) 길이가 긴 데이터로 출력되었습니다.
내 문제는 일단 내가 가지고 있으면 이러한 복잡한 숫자로 무엇을해야합니까? 순간 나는이 약간 사용할 수있는 무언가를 제공
const float realValue = buffer[(y * 2) + 0];
const float imagValue = buffer[(y * 2) + 1];
const float value = sqrt((realValue * realValue) + (imagValue * imagValue));
각 값에 대해 일을 해요하지만 난 오히려 이상 그와 함께 1로 범위는 0에서 문제를 값을 받고있는 방법은 피크 인 것 약 9 이상으로 다시 돌아옵니다. 즉, 일이 악의적으로 포화 상태에 이르렀을 때, 오디션의 스펙트로 그램을 통해 오디오를 실행할 때 매우 강하게 보이지만 간신히 나타나게되는 스펙트로 그램의 다른 부분이 있습니다. 나는 완전히 내가 FFT에 의해 반환 된 데이터가 무엇인지 100 % 확신하지 못한다는 것을 인정한다. (그렇지 않으면 내가 통과하는 512 샘플 긴 블록의 빈도 값을 나타낸다.) 특히 compex 번호가 무엇을 의미하는지에 대한 나의 이해가 부족합니다.
모든 조언과 도움을 주시면 감사하겠습니다.
편집 : 설명하기 만하면됩니다. 내 큰 문제는 스케일이 무엇인지에 대한 아이디어가 없으면 리턴 된 FFT 값은 의미가 없다는 것입니다. 누군가 저 저울을 해결하기 위해 나를 가리킬 수 있습니까?
Edit2가 : 내 눈이 심지어 내가 살펴 보았다 다른 대부분의 스펙트로 구현보다 더 나은 모습으로
size_t count2 = 0;
size_t max2 = kFFTSize + 2;
while(count2 < max2)
{
const float realValue = buffer[(count2) + 0];
const float imagValue = buffer[(count2) + 1];
const float value = (log10f(sqrtf((realValue * realValue) + (imagValue * imagValue)) * rcpVerticalZoom) + 1.0f) * 0.5f;
buffer[count2 >> 1] = value;
count2 += 2;
}
: 정말 좋은 찾고 다음을 수행하여 결과를 얻을 수 있습니다.
제가하고있는 일에 중대한 문제가 있습니까?
복소수의 크기를 구하는 데 올바른 방법을 사용하고 있습니다. 이 (복잡한) 숫자 (0-1, 0-255, ..?)의 크기를 알아 내야합니다. FFT 함수의 문서를 참조하십시오.범위가 너무 커서 좋아하는 경우, 아래에 제안 된대로 크기의 log()를 사용하면 도움이됩니다. – Wim
아마 당신의 사용에는 중요하지 않지만 FFT 너비로 나누어 주파수 도메인 값 (예 : FFT에서 얻은 값)을 정규화 할 수도 있습니다. (즉, FFT가 넓을수록 다양한 주파수 버킷의 값이 커집니다) –