Функция fftshift
Функция fftshift выполняет перестановку элементов массива
так, чтобы нулевая частота (постоянная составляющая) оказалась в центре.
Это необходимо для визуализации спектра, полученного с помощью fft,
поскольку прямое преобразование Фурье помещает нулевую частоту в начало массива.
Первый параметр - входной массив. Второй параметр (необязательный) - оси,
по которым выполняется сдвиг.
Синтаксис
np.fft.fftshift(x, axes=None)
Пример
Выполним прямое преобразование Фурье и сравним результат до и после применения fftshift:
import numpy as np
# Create a test signal
t = np.linspace(0, 1, 100)
signal = np.sin(2 * np.pi * 5 * t)
# Compute FFT
spectrum = np.fft.fft(signal)
freqs = np.fft.fftfreq(len(signal))
# Shift zero frequency to center
spectrum_shifted = np.fft.fftshift(spectrum)
freqs_shifted = np.fft.fftshift(freqs)
print("Original frequency array shape:", freqs.shape)
print("Shifted frequency array shape:", freqs_shifted.shape)
Результат выполнения кода:
"Original frequency array shape: (100,)"
"Shifted frequency array shape: (100,)"
Пример
Применим fftshift к одномерному массиву, чтобы увидеть, как меняется порядок элементов:
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
res = np.fft.fftshift(arr)
print("Original array:", arr)
print("After fftshift:", res)
Результат выполнения кода:
"Original array: [0 1 2 3 4 5 6 7]"
"After fftshift: [4 5 6 7 0 1 2 3]"
Пример
Работа с двумерным массивом и указание осей для сдвига:
import numpy as np
arr = np.array([
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
])
# Shift along both axes (default)
res_both = np.fft.fftshift(arr)
# Shift only along rows (axis=0)
res_rows = np.fft.fftshift(arr, axes=0)
# Shift only along columns (axis=1)
res_cols = np.fft.fftshift(arr, axes=1)
print("Both axes:\n", res_both)
print("Rows only:\n", res_rows)
print("Cols only:\n", res_cols)
Результат выполнения кода:
"Both axes:"
[[10 11 8 9]
[14 15 12 13]
[ 2 3 0 1]
[ 6 7 4 5]]
"Rows only:"
[[ 8 9 10 11]
[12 13 14 15]
[ 0 1 2 3]
[ 4 5 6 7]]
"Cols only:"
[[ 2 3 0 1]
[ 6 7 4 5]
[10 11 8 9]
[14 15 12 13]]