Здесь исходный вектор подвергается вначале прямому, а затем обратному преобразованию Фурье. Как и следовало ожидать, после цепочки этих преобразований вновь получается исходный вектор. Заметим, что это справедливо только в том случае, когда при обратном преобразовании использованы все частоты, полученные при прямом преобразовании Фурье.
Внимание. Не стоит обольщаться тем, что в простых, чисто тестовых и демонстрационных примерах, результат прямого и обратного преобразований Фурье точно восстанавливает исходный вектор. При векторах большой длины это уже не так, а в случае введения ограничений на число гармоник, полученных при прямом БПФ, искажения синтезированного сигнала могут быть весьма заметными.
Матрица дискретного преобразования Фурье — 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.