Быстрое n-точечное преобразование Фурье - C#
Формулировка задачи:
Здравствуйте. Подскажите, пожалуйста, я получил массив данных с wav-файла в виде double, его и нужно отправлять на вход быстрого преобразования Фурье? Подскажите, пожалуйста, как осуществить БПФ для N=512?
Решение задачи: «Быстрое n-точечное преобразование Фурье»
textual
Листинг программы
// Вычисление поворачивающего модуля e^(-i*2*PI*k/N) private static Complex w(int k, int N) { if (k % N == 0) return 1; double arg = -2 * Math.PI * k / N; return new Complex(Math.Cos(arg), Math.Sin(arg)); } // Метод, осуществляющий быстрое преобразование Фурье public static Complex[] FFT(Complex[] x) { int N = x.Length; if (N == 2) { X = new Complex[2]; X[0] = x[0] + x[1]; X[1] = x[0] - x[1]; } else { Complex[] x_even = new Complex[N / 2]; Complex[] x_odd = new Complex[N / 2]; for (int i = 0; i < N / 2; i++) { x_even[i] = x[2 * i]; x_odd[i] = x[2 * i + 1]; } Complex[] X_even = FFT(x_even); Complex[] X_odd = FFT(x_odd); X = new Complex[N]; for (int i = 0; i < N / 2; i++) { X[i] = X_even[i] + w(i, N) * X_odd[i]; X[i + N / 2] = X_even[i] - w(i, N) * X_odd[i]; } } return X; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д