Я пишу приложение для процедурных аудиофайлов, мне нужно проанализировать мой новый файл, получить его частотный спектр и изменить его в его вычислении.Обратный БПФ в C#
Я хочу сделать это с помощью быстрого преобразования Фурье (FFT). Это мой рекурсивный C# FFT:
void ft(float n, ref Complex[] f)
{
if (n > 1)
{
Complex[] g = new Complex[(int) n/2];
Complex[] u = new Complex[(int) n/2];
for (int i = 0; i < n/2; i++)
{
g[i] = f[i * 2];
u[i] = f[i * 2 + 1];
}
ft(n/2, ref g);
ft(n/2, ref u);
for (int i = 0; i < n/2; i++)
{
float a = i;
a = -2.0f * Mathf.PI * a/n;
float cos = Mathf.Cos(a);
float sin = Mathf.Sin(a);
Complex c1 = new Complex(cos, sin);
c1 = Complex.Multiply(u[i], c1);
f[i] = Complex.Add(g[i], c1);
f[i + (int) n/2] = Complex.Subtract(g[i], c1);
}
}
}
Вдохновляющий пример был
Я сравнивались мои результаты с теми из wolframalpha для того же входа 0.6,0.7,0.8,0.9
но результаты не должны быть одинаковыми. Мои результаты в два раза больше, чем Вольфрам, а мнимая часть - это 2 раза от Вольфрама.
Кроме того, вики показывает, что обратное БПФ может быть вычислена с
Но я сравниваю входы и выходы, и они разные.
Есть ли у кого-нибудь идеи, что не так?
Найдите существующую библиотеку, которая имеет дело с FFT. Не совсем уверен, что вы ожидаете получить от кого-то другого, отлаживающего ваш код для вас. –
Мне нужен кто-то с опытом работы fft, как объяснить мне, как получить обратный fft, например, использовать другой алгоритм или, возможно, это невозможно. Мой код работает. Я пробую его с помощью синуса и косинуса и получаю правильный выход. –