Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.0.0 - Русский


fftshift

перегруппировывает результат БПФ, сдвигая нулевую частоту в центр спектра

Синтаксис

y = fftshift(x)
y = fftshift(x, along)

Аргументы

x, y

векторы, матрицы или гиперматрицы одинакового размера.

along

1 | "r" | 2 | "c" | 0<along<=ndims(x): размерность, вдоль которой половинки меняются местами.

Описание

Если x является результатом вычисления БПФ, то y=fftshift(x) или y=fftshift(x,"all") двигает нулевую частоту в центр спектра, что иногда является более удобной формой.

x = [x1  x2 ]    даёт   y = [x2  x1 ]  // вектор

    [x11 x12]                [x22 x21]
x = |       |    даёт   y = |       |  // матрица
    [x21 x22]                [x12 x11]
и т.д.

y=fftshift(x,n) меняет местами только вдоль n-ой размерности.

Примеры

x = [1 2 3 4 5 6 7]
fftshift(x)
--> x = [1 2 3 4 5 6 7]
 x  =
   1.   2.   3.   4.   5.   6.   7.

--> fftshift(x)
 ans  =
   5.   6.   7.   1.   2.   3.   4.

x = matrix(1:36,6,6)
fftshift(x)
fftshift(x, "r")
fftshift(x, "c")
--> x = matrix(1:36,6,6)
 x  =
   1.   7.    13.   19.   25.   31.
   2.   8.    14.   20.   26.   32.
   3.   9.    15.   21.   27.   33.
   4.   10.   16.   22.   28.   34.
   5.   11.   17.   23.   29.   35.
   6.   12.   18.   24.   30.   36.

--> fftshift(x)       // Углы переходят в центр
 ans  =
   22.   28.   34.   4.   10.   16.
   23.   29.   35.   5.   11.   17.
   24.   30.   36.   6.   12.   18.
   19.   25.   31.   1.   7.    13.
   20.   26.   32.   2.   8.    14.
   21.   27.   33.   3.   9.    15.

--> fftshift(x, "r")  // Внешние строки становятся строками в середине
 ans  =
   4.   10.   16.   22.   28.   34.
   5.   11.   17.   23.   29.   35.
   6.   12.   18.   24.   30.   36.
   1.   7.    13.   19.   25.   31.
   2.   8.    14.   20.   26.   32.
   3.   9.    15.   21.   27.   33.

--> fftshift(x, "c")  // Внешние столбцы становятся столбцами в середине
 ans  =
   19.   25.   31.   1.   7.    13.
   20.   26.   32.   2.   8.    14.
   21.   27.   33.   3.   9.    15.
   22.   28.   34.   4.   10.   16.
   23.   29.   35.   5.   11.   17.
   24.   30.   36.   6.   12.   18.

// Сделаем сигнал
t = 0:0.1:1000;
x = 3*sin(t)+8*sin(3*t)+0.5*sin(5*t)+3*rand(t);
// Выполним БПФ
y = fft(x,-1);

// Отобразим
clf();
subplot(2,1,1); plot2d(abs(y))
subplot(2,1,2); plot2d(fftshift(abs(y)))
// Сделаем двумерную картинку
t = 0:0.1:30;
x = 3*sin(t')*cos(2*t)+8*sin(3*t')*sin(5*t)+..
  0.5*sin(5*t')*sin(5*t)+3*rand(t')*rand(t);
// Выполним БПФ
y = fft(x,-1);

// Отобразим
clf();
gcf().color_map = hotcolormap(256);
subplot(2,1,1); Matplot(abs(y))
subplot(2,1,2); Matplot(fftshift(abs(y)))

Смотрите также

  • ifftshift — inverse of fftshift
  • flipdim — меняем порядок (частей) строк, столбцов, страниц... массива
  • circshift — смещает по кругу элементы матрицы
  • fft — прямое или обратное Быстрое Преобразование Фурье вектора, матрицы или гиперматрицы
Report an issue
<< fft2 transforms hilb >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Oct 24 14:37:07 CEST 2023