Chapter 20. 2次元高速フーリエ変換

Table of Contents

20.1. 実装例(GPGPU)
20.2. 2次元カーネルの実装
20.2.1. 全体の流れ
20.3. GPGPUへの修正点(メモリストライド・Bank Conflict対策)

Note

この項目の2次元FFTはCPUのアルゴリズムですが、FFTの実装部をOpenCL実装に変えるだけで、GPGPUに適したデータ並列化が可能です。

2次元高速フーリエ変換は、前の項目で解説したFFT/IFFTをそのまま使います。

基本的な手順は「図:2次元FFTの手順」(Figure 20.1, “図:2次元FFTの手順”)にある通りです。

まず各走査線(生データの行部分)をスキャンし、各行(スライス)のフーリエ変換をします。全ての走査線のFFTが終了したら、変換した行列の列スキャンを行い、各列に対してフーリエ変換を行います。

Figure 20.1. 図:2次元FFTの手順

FFT-2D.png

Note

筆者の使う擬似コードのエディターが日本語対応していないため、英語で記述しましたが、以下が英文の意味です。

  • Sliced FFT: Horizontal Scan(各行をスキャンした配列・スライスのFFT)
  • Sliced FFT: Vertical Scan(各列をスキャンした配列・スライスのFFT)
  • Inverse FFT(逆フーリエ変換)
  • Apply low/high pass filter(出力行列Gに対して低域・高域フィルターを適用)

注意点として、この擬似コードでは、実数部分と虚数部分を別の変数としていないので、実際のコードでは配列の記憶域は2倍となり、変数の更新も若干異なります。

Copyright 2018-2019, by Masaki Komatsu