Алгоритмы преобразования Фурье. Применение в цифровой обработке сигналов Северный (Арктический) Федеральный Университет им. М.В. Ломоносова, Институт математики, информационных и космических технологий Тюльпин А.А. [email protected]Архангельск – 2013
Доклад был сделал на одном из семинаров в Северном (Арктическом) Федеральном Университете
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Тригонометрическим рядом Фурье периодической функцииf(x), имеющей период T называется ряд
a02
+
∞∑k=1
(ak coskx
T+ bk sin
kx
T),
где
a0 =2
T
T/2∫−T/2
f(x)dx,
an =2
T
T/2∫−T/2
f(x) cos(kx)dx,
bn =2
T
T/2∫−T/2
f(x) sin(kx)dx
Разложение в комплексный ряд Фурье
В более общем виде рядом Фурье элемента гильбертовапространства называется разложение этого элемента поортогональному базису. Существует множество системортогональных функций: Уолша, Лагера, Котельникова и др. Впространстве L2[a, b] одной из таких систем является ситемафункций
{e−ikx
∣∣ k ∈ Z}. Разложение функции f(x) в ряд
Фурье по данной системе будет иметь следующий вид:
∞∑k=−∞
Cke−ikx
где
Ck =1
T
T/2∫−T/2
f(x)e−i2πkxT dx — комплексный интеграл Фурье
Преобразование Фурье
Преобразованием Фурье будем называть операцию,сопоставляющуюю функции f(x) функцию f̃(ω),описывающую коэффициенты разложения f(x) в ряд Фурье:
f̃(ω) =
∞∫−∞
f(x)e−iωxdx
Обратным преобразованием Фурье будем называть операцию,обращающую преобразование Фурье:
f(x) =1√2π
∞∫−∞
f̃(ω)eiωxdω
Часть II. Применение преобразования Фурье в цифровойобработке сигналов
Свертка – операция в функциональном анализе, показывающаясхожесть одной функции с отраженной и сдвинутой копиейдругой. На рисунке представлен пример сверки двухпрямоугольных импульсов:
Вычисление свертки
Свертка сигналов во временной области:
(x ∗ h)(t) =∞∫−∞
x(τ)h(t− τ)dτ
Пусть X(ω) и H(ω) – образы сигналов x(t) и h(t)соответственно. Тогда преобразование Фурье свертки данныхсигналов можно вычислить по формуле:
∞∫−∞
(x ∗ h)(t)e−iωtdt = X(ω) ·H(ω)
На основании приведенных выше формул следует, что:
Часть III. Алгоритмы вычисления преобразования Фурье.Быстрая свертка
Дискретные сигналы
Дискретизация сигнала по времени – процедура, состоящаяв замене несчетного множества его значений их счетным(дискретным) множеством, которое содержит информацию означениях непрерывного сигнала в определенные моментывремени.
Выбор частоты дискретизации
Теорема Котельникова-Найквиста-Шеннона
Непрерывный сигнал x(t) с ограниченным спектром можноточно восстановить (интерполировать) по его отсчетам x(n·dT ),взятым через интервалы dT =
1
2F, где F – верхняя частота
спектра сигнала.
Дискретное преобразование Фурье (ДПФ)
Обозначения:xn – значение сигнала в момент времени tnX(ωk) = Xk – значение спектра сигнала в точке ωkN – количество отсчетовωk = 2πk
fk – k-я частота спектраj – мнимая единица
Xk =
N−1∑n=0
xne−jωknN
xn =1
N
N−1∑k=0
Xkejωkn
N
Вычислительная сложность ДПФ
Пусть {k ∈ 0, N − 1} – отсчеты спектра сигнала x(t). Тогда длявычисления как прямого, так и обратного преобразованияФурье потребуется O(n2) операций:
def DFT(x, df):X = zeros(df,dtype = np.complex)N = len(x)for k in xrange(df):
for n in xrange(N):X[k] += x[n] * np.exp(-1j * 2 * np.pi * k * n / N)
return X
def IDFT(X):N = len(X)x = zeros(N,dtype = np.complex)for n in xrange(N):
for k in xrange(N):x[n] += X[k] * np.exp(1j * 2 * np.pi * k * n / N)
x[n] /= Nreturn x
Введение в быстрое преобразование Фурье (БПФ)
Виды БПФ:БПФ с прореживанием по частоте (DIF FFT)БПФ с прореживанием по времени (DIT FFT)
Первая программная реализация алгоритма БПФ былаосуществлена в начале 60-х годов XX века Джоном Кули ввычислительном центре IBM под руководством Джона Тьюки,а в 1965 году ими же была опубликована статья, посвященнаяалгоритму быстрого преобразования Фурье (Cooley–TukeyFFT).
БПФ. Основная идея
Основная идея БПФ состоит в разбиении спектра на 2 части, ивычислении БПФ уже для каждой из частей размерности N/2.
БПФ с прореживанием по времени
Рассмотрим один из алгоритмов вычиcления преобразованияФурье последовательностей отсчетов длины N = 2l, l ∈ R заO(N log2N) операций – алгоритм прореживания по времени.Обозначим Wnk
N = e−jn2πk
N . Разобьем последовательностьотсчетов сигнала на четные и нечетные:
Xk =
N−1∑n=0
xn ·WnkN =
N/2−1∑n=0
x2n ·W 2nkN +
+
N/2−1∑n=0
x2n+1 ·W (2n+1)kN =
N/2−1∑n=0
x2n ·WnkN/2︸ ︷︷ ︸
X0(ωk)
+
+W kN
N/2−1∑n=0
x2n+1 ·WnkN/2︸ ︷︷ ︸
X1(ωk)
= X0(ωk) +W kNX1(ωk)
БПФ с прореживанием по времени
Рассмотрим разбиение спектра на две части:
X = {Xk|k = 0, N − 1} =
= {Xm|m = 0, N/2− 1}⋃{Xr|r = N/2, N − 1} =
= {Xm|m = 0, N/2− 1}⋃{Xr+N/2|r = 0, N/2− 1}
Вычислим вторую половину спектра:
Xk+N/2 =
N/2−1∑n=0
x2n ·Wn(k+N/2)N/2 +
+Wk+N/2N
N/2−1∑n=0
x2n+1 ·Wn(k+N/2)N/2
БПФ с прореживанием по времени
Рассмотрим некоторые особенности коэффициентов WnkN
Wn(k+N/2)N/2 =W
nN/2N/2 ·W
nkN/2
WnN/2N/2 = e
−j2πnN/2N/2 = e−j2πn = cos(−2πn)− j sin(−2πn) = 1
Получаем:W
n(k+N/2)N/2 =Wnk
N/2
Также, стоит отметить, что
Wk+N/2N = e
−j2πN2N W k
N = −W kN
БПФ с прореживанием по времени
Для первой половины спектра:
Xk = X0(ωk) +W kNX1(ωk)
Для второй половины спектра:
Xk+N/2 = X0(ωk)−W kNX1(ωk)
def W(n, N): return np.exp(-1j * 2 * np.pi * n/N) def fft(x): N = len(x) if N <= 1: return x even = fft(x[0::2]) odd = fft(x[1::2]) return [even[n] + W(n, N) * odd[n] for n in xrange(N/2)] + \ [even[n] - W(n, N) * odd[n] for n in xrange(N/2)]
Литература
A. Oppenheim, R. Schafer. Digital Signal ProcessingL. Franks. Signal theoryH. Nussbaumer. Fast Fourier Transform and ConvolutionAlgorithmsE. Titchmarsh. Introduction to the Theory of FourierIntegralsE. Chu, A. George. Inside the FFT Black Box: Serial andParallel Fast Fourier Transform AlgorithmsА. Н. Колмогоров, С.В. Фомин. Элементы теориифункций и функционального анализаСайт профессора Давыдова – http://prodav.narod.ru/О. В. Бесов Тригонометрические ряды ФурьеСайт http://dsplib.ru/