fft2
Двумерное быстрое преобразование Фурье.
| Библиотека |
|
Синтаксис
Вызов функции
-
Y = fft2(X)— возвращает двумерное преобразование Фурье матрицыX, используя алгоритм быстрого преобразования Фурье, что эквивалентно вычислениюfft(fft(X).').'.Если
X— многомерный массив,fft2вычисляет двумерное преобразование Фурье для первых двух измерений каждого подмассиваX, который можно рассматривать как двумерную матрицу для размерностей больше2. Например, еслиX— массив размеромm×n×1×2, тоY(:,:,1,1) = fft2(X(:,:,1,1))иY(:,:,1,2) = fft2(X(:,:,1,2)). Выходной размерYсовпадает с размеромX.
Аргументы
Входные аргументы
#
X —
входной массив
матрица | многомерный массив
Details
Входной массив, заданный как матрица или многомерный массив. Если X имеет тип Float32, то функция fft2 изначально вычисляется с одинарной точностью, и Y также имеет тип Float32. В противном случае Y возвращается как Float64.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
m —
количество строк преобразования
положительный целочисленный скаляр
Details
Количество строк преобразования, заданное как положительное целое число.
| Типы данных |
|
#
n —
количество столбцов преобразования
положительный целочисленный скаляр
Details
Количество столбцов преобразования, заданное как положительное целое число.
| Типы данных |
|
Выходные аргументы
#
Y —
выходной массив
матрица | многомерный массив
Details
Выходной массив, возвращаемый в виде матрицы или многомерного массива.
Примеры
Двумерное преобразование
Details
Двумерное преобразование Фурье полезно для обработки двумерных сигналов и других двумерных данных, таких как изображения.
Создадим и отобразим на графике двумерные данные с повторяющимися блоками.
function peaks(n)
x = range(-3, 3, length=n)
y = range(-3, 3, length=n)
X = repeat(x', n, 1)
Y = repeat(y, 1, n)
Z = 3 * (1 .- X).^2 .* exp.(-X.^2 .- (Y .+ 1).^2) .-
10 * (X/5 .- X.^3 .- Y.^5) .* exp.(-X.^2 .- Y.^2) .-
1/3 * exp.(-(X .+ 1).^2 .- Y.^2)
return Z
end
P = peaks(20)
X = repeat(P, 5, 10)
heatmap(X, aspect_ratio=1, c=:viridis, yflip=true)
Вычислим двумерное преобразование Фурье данных. Сдвинем компоненту нулевой частоты в центр выходного сигнала и построим график получившейся матрицы размером 100 на 200, что соответствует размеру X.
import EngeeDSP.Functions: fft2, fftshift
Y = fft2(X)
Y_shifted = fftshift(Y)
heatmap(abs.(Y_shifted), aspect_ratio=1, c=:viridis, yflip=true)
Дополним X нулями, чтобы вычислить преобразование размером 128 на 256.
n1 = nextpow(2, 100) # 2^7 = 128
n2 = nextpow(2, 200) # 2^8 = 256
Y_padded = fft2(X, n1, n2)
Y_padded_shifted = fftshift(Y_padded)
heatmap(abs.(Y_padded_shifted), aspect_ratio=1, c=:viridis, yflip=true)
Дополнительно
Двумерное преобразование Фурье
Details
Данная формула определяет дискретное преобразование Фурье матрицы размером на :
где и — комплексные корни из единицы:
где — мнимая единица. и — индексы в диапазоне от до , а и — индексы в диапазоне от до . Данная формула сдвигает индексы и на 1, чтобы отразить индексы матриц в Engee.