Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - Русский
Scilabヘルプ >> Signal Processing > Transforms > fftshift

fftshift

fft出力を再配置し,スペクトルの中心に周波数0を移動する

呼び出し手順

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

引数

x, y

同じサイズのベクトル、行列またはハイパーマトリックス.

along

整数, 選択する次元, または文字列 'all'

説明

xがFFT計算の結果の場合, y= fftshift(x) または y= fftshift(x,"all") は,扱いが容易な形式である,周波数0要素をよりスペクトルの中心に移動します.

x = [x1  x2 ]    gives   y = [x2  x1 ]  // vector

    [x11 x12]                [x22 x21]
x = |       |    gives   y = |       |  // matrix
    [x21 x22]                [x12 x11]
etc

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)       // Corners go to the center
 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")  // External rows become middle rows
 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")  // External columns become middle columns
 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);
//compute the fft
y = fft(x,-1);

//表示
clf();
subplot(2,1,1); plot2d(abs(y))
subplot(2,1,2); plot2d(fftshift(abs(y)))
//2次元画像を作成
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);
//fftを計算
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)))

参照

  • fft — 高速フーリエ変換
  • ifftshift — fftshiftを反転する
  • flipdim — 指定した次元に沿って x ブロック要素を反転
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Feb 14 15:02:12 CET 2019