Дискретное преобразование Фурье: Методические указания к лабораторной работе № 7 по курсу "Обработка сигналов и изображений", страница 5

Здесь исходный вектор подвергается вначале прямому, а затем обратному преобразованию Фурье. Как и следовало ожидать, после цепочки этих преобразо­ваний вновь получается исходный вектор. Заметим, что это справедливо только в том случае, когда при обратном преобразовании использованы все частоты, полу­ченные при прямом преобразовании Фурье.

Внимание. Не стоит обольщаться тем, что в простых, чисто тестовых и де­монстрационных примерах, результат прямого и обратного преобразований Фурье точно восстанавливает исходный вектор. При векторах большой длины это уже не так, а в случае введения ограничений на число гармоник, полученных при прямом БПФ, искажения синтезированного сигнала могут быть весьма за­метными.

Матрица дискретного преобразования Фурье — dftmtx

Функция

А = dftmtx(n)

возвращает матрицу дискретного преобразования Фурье размера n х n, такую, что матричное выражение у = А*х задает прямое дискретное преобразование Фурье. Следующий пример демонстрирует применение функции dftmtx:

х = [1 2 3 4] ; yl = fft (x) ;

n = length(х); у2 = x*dftmtx (n)

yl =

10.0000    -2.0000+2.0000i    -2.0000                 -2.0000-2.0000i

у2 =

10.0000     -2.0000+2.0000i    -2.0000-0.0000i    -2.0000-2.0000i

>> norm(yl-y2)

ans =

2.3019e-015

Здесь для вектора х выполнено прямое дискретное БПФ вначале с помощью функции fft, а затем с применением функции dftmtx. Результаты совпадают с точностью до машинных расчетов. Величина погрешности оценивается нормой разности векторов yl и у2, полученных в этом примере.

Матрица

Ai = conj(dftmtx(n))/n,

соответственно, обеспечивает обратное дискретное преобразование Фурье.

 Прямое и обратное двумерное БПФ — fft2 и ifft2

Функция

У = fft2(X[,m,n])

выполняет прямое двумерное дискретное БПФ для данных, представленных матри­цей X, приведенной к матрице размера m х n. Если матрица X имеет иной размер, то она дополняется до размера вводом нулевых элементов или усекается до этого размера. Если параметры m и n опушены, то преобразование выполняется для массива с размером, соответствующим размеру исходного массива X. Результат преобразования - матрица с комплексными элементами формата double, имею­щая размер m х n или размер матрицы X, соответственно.

Функция

Y   = ifft2(X[,m,n])

выполняет обратное двумерное дискретное БПФ на условиях, отмеченных выше для функции fft2.

Приведенный ниже пример демонстрирует работу функций fft2 и ifft2 на примере преобразования массива размера 2 х 2 с комплексными данными:

>> X1=[1 + 2i  2 + 2i; 3 + 3i  4 + 4i]

X1 =

1.0000 + 2.0000i   2.0000+2.0000i

3.0000 + 3.0000i   4.0000 + 4 .0000i

>> Y=fft2 (X1,2,2)

Y   =

 10.0000 + 11.0000i  -2.0000 -1.0000i

–4.0000  -    3.0000i            0 + 1.0000i

>> Z=ifft2(Y)

1.0000+2.0000i   2.0000+2.0000i

3.0000+3.0000i   4.0000+4.0000i

Как и следовало ожидать, в результате прямого и обратного двумерных диск­ретных БПФ, исходный массив оказался восстановленным.

Двумерное дискретное прямое и обратное преобразования Фурье

Синтаксис:

Y= fft2(X)                         X = iffi2(Y)

Y= fft2(X, m, n)               X = ifft2(Y, m, n)

Функция Y = fft2(X) вычисляет для массива данных X двумерное дис­кретное преобразование Фурье. Если массив X двумерный, вычисляется дискретное преобразование для каждого столбца.

Функция Y = fftf(X, n) вычисляет n-точечное дискретное преобразование Фурье. Если length(X) < n, то недостающие строки массива X заполняются нулями; если length(X) > n, то лишние строки удаляются.

Функция X = ifft(Y) вычисляет обратное преобразование Фурье для мас­сива Y.

Функция X = ifft(Y, n) вычисляет n-точечное обратное преобразование Фурье для массива Y.

Рассмотрим тот же пример, что и для функции fft, но сформируем 2 входных последовательности (рис. 10):

t = 0:0.001:1; % Вектор времени

х = sin (2*pi*50*t) +sin (2*pi*130*t); % Вектор входного сигнала

y1=x+2*randn(size(t));% Сумма сигнала и помехи

y2=x+2*randn(size(t));% Сумма сигнала и помехи

y=[y1;y2];

plot(y(1,1:50)),hold on, plot(y(2,1:50)), grid, hold off