Документация Engee

fft2

Двумерное быстрое преобразование Фурье.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • 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.

  • Y = fft2(X,m,n) — усекает X или дополняет X нулями до конца, формируя матрицу размером m на n перед вычислением преобразования. Если X — матрица, то Y — матрица размером m на n. Если X — многомерный массив, то fft2 формирует первые два измерения X в соответствии с m и n.

Аргументы

Входные аргументы

# X — входной массив
матрица | многомерный массив

Details

Входной массив, заданный как матрица или многомерный массив. Если X имеет тип Float32, то функция fft2 изначально вычисляется с одинарной точностью, и Y также имеет тип Float32. В противном случае Y возвращается как Float64.

Типы данных

Float64, Float32, Int8, Int16, Int32, UInt8, UInt16, UInt32, Bool

Поддержка комплексных чисел

Да

# m — количество строк преобразования
положительный целочисленный скаляр

Details

Количество строк преобразования, заданное как положительное целое число.

Типы данных

Float64, Float32, Int8, Int16, Int32, UInt8, UInt16, UInt32, Bool

# n — количество столбцов преобразования
положительный целочисленный скаляр

Details

Количество столбцов преобразования, заданное как положительное целое число.

Типы данных

Float64, Float32, Int8, Int16, Int32, UInt8, UInt16, UInt32, Bool

Выходные аргументы

# 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)

fft2 1

Вычислим двумерное преобразование Фурье данных. Сдвинем компоненту нулевой частоты в центр выходного сигнала и построим график получившейся матрицы размером 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)

fft2 2

Дополним 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)

fft2 3

Дополнительно

Двумерное преобразование Фурье

Details

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

где и — комплексные корни из единицы:



где — мнимая единица. и — индексы в диапазоне от до , а и — индексы в диапазоне от до . Данная формула сдвигает индексы и на 1, чтобы отразить индексы матриц в Engee.