Дискретне перетворення Фур'є
Дискретне перетворення Фур'є (ДПФ, Discrete Fourier Transform) - це математична процедура, що використовується для визначення гармонічного, або частотного, складу дискретних сигналів. ДПФ є однією з найбільш розповсюджених і потужних процедур цифрової обробки сигналів. ДПФ дозволяє аналізувати, перетворювати і синтезувати сигнали такими способами, які неможливі при неперервній (аналоговій) обробці.
Зміст |
Формули перетворень [ред.]
Витоком ДПФ є неперервне перетворення Фур'є
, яке визначається:
Експоненціальна форма:
Тригонометрична форма:
Позначення:
-
-ий компонент ДПФ, тобто
,
- індекс ДПФ в частотній області,
,
- послідовність вхідних відліків,
,
- часовий індекс вхідних відліків,
,
- кількість відліків вхідної послідовності і кількість частотних відліків результату ДПФ.
Якщо представити довільний відлік ДПФ
як суму дійсних і уявних частин:
з кутом
,
то амплітуда
обчислюється:
Фазовий кут
,
, обчислюється так:
Потужність відліків
, яка називається спектром потужності, представляє собою амплітуду, піднесену до квадрату:
Властивості [ред.]
- Симетрія

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

Приклад програми [ред.]
Нижче подано приклад функції обчислення ДПФ на мові програмування 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
Посилання [ред.]
Дискретне перетворення Фур'є(рос.)
Властивості дискретного перетворення Фур'є(рос.)
Реалізація дискретного перетворення Фур'є на процесорі TMS320C55x фірми Texas Instruments(укр.)




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



має ДПФ
, а інша вхідна послідовність
має ДПФ
, то ДПФ суми цих послідовностей
рівна: 
