Я пытаюсь получить амплитуды и фазы (падающего) пилообразного сигнала. Мой зуб пилы имеет длину 1024 семпла и генерируется как
int numSamples = 1024;
for (int i = 0; i < numSamples; i++)
{
samples[i] = -((float)i / (float)(numSamples - 1) * 2.0f - 1.0f);
}
Я устанавливаю реальный и мнимый массивы как
for (int i = 0; i < numSamples; i++)
{
double sample = samples[i];
re[i] = sample;
im[i] = 0.0;
}
затем передавая его в функцию БПФ. Я считываю результат как
int numPartials = numSamples / 2;
for (int i = 1; i < numPartials; i++)
{
outMagnitudes[i] = (float)sqrt(re[i] * re[i] + im[i] * im[i]);
outPhases[i] = (float)atan2(im[i], re[i]);
}
возникают 2 проблемы:
- величины только вдвое меньше, чем должны быть
- фазы варьируются линейно от -PI / 2 для первого частичного до нуля для последнего, где я ожидаю, что все они будут равны нулю для данного сигнала
Я действительно не понимаю, что я делаю неправильно здесь.
У кого-нибудь есть идея?