Дискретне перетворення Фур'є — Вікіпедія

Дискретне перетворення Фур'є (ДПФ, англ. Discrete Fourier Transform) — це математична процедура, що використовується для визначення гармонічного, або частотного, складу дискретних сигналів. ДПФ є однією з найбільш розповсюджених і потужних процедур цифрової обробки сигналів. ДПФ дозволяє аналізувати, перетворювати і синтезувати сигнали такими способами, які неможливі при неперервній (аналоговій) обробці.

Формули перетворень[ред. | ред. код]

Витоком ДПФ є неперервне перетворення Фур'є , яке визначається:

Експоненціальна форма:

Тригонометрична форма:

Позначення:

  •  — -ий компонент ДПФ, тобто ,
  •  — індекс ДПФ в частотній області, ,
  •  — послідовність вхідних відліків, ,
  •  — часовий індекс вхідних відліків, ,
  •  — кількість відліків вхідної послідовності і кількість частотних відліків результату ДПФ.

Якщо представити довільний відлік ДПФ як суму дійсних і уявних частин:

з кутом ,

то амплітуда обчислюється:

Фазовий кут , , обчислюється так:

Потужність відліків , яка називається спектром потужності, являє собою амплітуду, піднесену до квадрату:

Властивості[ред. | ред. код]

  1. Симетрія
  2. Лінійність
    Якщо вхідна послідовність має ДПФ , а інша вхідна послідовність має ДПФ , то ДПФ суми цих послідовностей рівна:
  3. Зсув в часі

Приклад обчислення[ред. | ред. код]

У цьому прикладі ДПФ застосовується до послідовності довжиною , а саме, до вхідного вектора

Обчислимо ДПФ за допомогою експоненциальної форми:

що дає

Приклад програми[ред. | ред. код]

Нижче подано приклад функції обчислення ДПФ на мові програмування C#

// Структура комлексних чисел public struct Complex {     public double Re;     public double Im;     public Complex(double Re, double Im)     {         this.Re = Re;         this.Im = Im;     } } public double Sqr(double x) {      return x*x; } // x - послідовність вхідних відліків // X - послідовність вихідних відліків // AS - спектр амплітуд // FS - спектр фаз // PS - спектр потужностей // N - кількість відліків public void DFT(double[] x, ref Complex[] X, ref double[] AS, ref double[] FS, ref double[] PS, int N) {     Complex S = new Complex();     Complex[] XC = new Complex[N];     int k, n;     for (k = 0; k < N; k++)     {          S.Re = 0.0;          S.Im = 0.0;          for (n = 0; n < N; n++)          {               S.Re += x[n] * Math.Cos(2 * Math.PI * k * n / N);               S.Im -= x[n] * Math.Sin(2 * Math.PI * k * n / N);          }          X[k].Re = S.Re;          X[k].Im = S.Im;      }      for (k = 0; k < N; k++)      {           AS[k] = Math.Sqrt(Sqr(X[k].Re) + Sqr(X[k].Im)) / (N / 2);           PS[k] = X[k].Re * X[k].Re + X[k].Im * X[k].Im;           if (Math.Abs(X[k].Re) < 1e-5)           {                if (X[k].Im > 1e-5)                    FS[k] = 90;                if (Math.Abs(X[k].Im) < 1e-5)                    FS[k] = 0;                if ((X[k].Im < 0) && (Math.Abs(X[k].Im) > 1e-5))                    FS[k] = -90;            }            else                FS[k] = Math.Atan2(X[k].Im, X[k].Re) * 180.0 / Math.PI;       } } 

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]

  • Ричард Лайонс. Цифровая обработка сигналов. — 2-е. — Москва : Бином, 2006. — 656 с. — ISBN 5-9518-0149-4.
  • Сергиенко А. Б. Цифровая обработка сигналов. — 2-е. — Спб : Питер, 2006. — 751 с. — ISBN 5-318-00666-3.

Посилання[ред. | ред. код]