Быстрое 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;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5