Я использую библиотеку 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;
double 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);
Если я буду делать что-то не так, чтобы получить результаты, пожалуйста, кто-нибудь сможет посоветовать.
Заранее благодарю любую помощь !!! :)
Для почти всех целей следующая вещь, которую вы делаете, - это величина каждого сложного значения. Фазовая информация в домене Фурье является результатом (малых) сдвигов по времени во временной области, и, как правило, это не имеет значения. Если вы измените информацию о фазе и преобразуете ее обратно во временную область, она по-прежнему звучит одинаково.
Величина может быть изображена непосредственно, что значимо.