画像変換や波数-周波数解析などで周波数ゼロ成分を中心にするように並び替える必要が出てくる。そのための便利なメソッドが用意されている。
fftで返される複素数配列の各要素はそれぞれ以下の周波数に対応している。
インデックス | 0 | 1 | 2 | ... | n/2-1 | n/2+1 | ... | n-2 | n-1 |
---|
周波数 | 0 | 1/n | 2/n | ... | (n-1)/2n | -(n-1)/2n | ... | -2/n | -1/n |
---|
インデックス | 0 | 1 | 2 | ... | n/2-1 | n/2 | n/2+1 | ... | n-2 | n-1 |
---|
周波数 | 0 | 1/n | 2/n | ... | (n-1)/2n | 合計 | -(n-1)/2n | ... | -2/n | -1/n |
---|
これを周波数の小さい側から大きい側にゼロ成分が中心となるように並べ替える。
f = fftpack.fft(x)
f = fftpack.fftshift(f)
#多次元配列の場合は入れ替える軸を指定
f = fftpack.fftshift(f, axes=(0,))
#逆にもとに戻すときは
f = fftpack.ifftshift(f)
x = fftpack.ifft(f)
- サンプルが偶数の場合はf[-1]は
係数ではないので注意。ナイキスト以上の成分とみなせばフィルターかけるときは問題ない。
- 小さい方から並べるには
#複素FFTの場合
fftpak.fftshift(fftpack.fft(data))
#実FFTの場合はマイナスはない
fftpack.rfft(data)