Дискретное преобразование Фурье C++ - Что делать дальше?

Я использую библиотеку fftw для выполнения ДПФ на аудиосигнале, который я получил от видеозаписи.

Это мой первый раз, используя этот вид математики и анализ сигналов, но я считаю, что после вычисления вы получите правильные значения из данных.

Тем не менее, теперь я не уверен, что делать с массивом сложных чисел, и как я мог бы сделать это в графике.

Пожалуйста, может кто-то посоветовать, что делать дальше, вот пример данных до и после...

(in, out(real;im))
(-12190, (real:-3103; im:0))
(-16316, (real:-3108.465666587691; im:49.512823501357843))
(-10005, (real:-3096.7767811251124; im:99.645004992013128))
(first 3 from a sample of 512)

Кроме того, вот код, который я использую для получения этих результатов...

int n = 512;

 ****** in[512];
 fftw_complex out[512];
 fftw_plan p;

 ifstream rFile ("audioswap.csv");
 string line;

 if (rFile.is_open())
 {
 for (int i = 0; i < n; i++)
 {
 if ( getline (rFile, line))
 {
 in[i] = ::atof(line.c_str());
 }
 else
 {
 break;
 }
 }
 }

 p = fftw_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE);

 fftw_execute(p);

 fftw_destroy_plan(p);

Если я буду делать что-то не так, чтобы получить результаты, пожалуйста, кто-нибудь сможет посоветовать.

Заранее благодарю любую помощь !!! :)

1 ответ

Для почти всех целей следующая вещь, которую вы делаете, - это величина каждого сложного значения. Фазовая информация в домене Фурье является результатом (малых) сдвигов по времени во временной области, и, как правило, это не имеет значения. Если вы измените информацию о фазе и преобразуете ее обратно во временную область, она по-прежнему звучит одинаково.

Величина может быть изображена непосредственно, что значимо.

licensed under cc by-sa 3.0 with attribution.