У меня есть аудиофайл, и я выполняю итерацию через файл и беру на каждый шаг 512 образцов, а затем передаю их через БПФ.
У меня есть данные как блок длиной 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) );
Это дает что-то немного полезное, но я бы предпочел каким-то образом получить значения в диапазоне от 0 до 1. Проблема с ним выше в том, что пики в конечном итоге возвращаются примерно на 9 или более. Это означает, что вещи становятся злобно насыщенными, а затем появляются другие части спектрограммы, которые едва проявляются, несмотря на то, что они кажутся довольно сильными, когда я запускаю аудио через спектральную аудиторию. Я полностью признаю, что не уверен на 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;
}
На мой взгляд, это даже выглядит лучше, чем большинство других реализаций спектрограмм, на которые я смотрел.
Есть ли что-то БОЛЬШОЕ неправильно с тем, что я делаю?