部分実装

FFT・Spectrum・Convolveの計算規則#

FFTは有限サンプルの離散フーリエ変換、Convolveは有限係数による近傍計算です。結果の意味はDirect/FFTなどの実装方法によって変えません。公開型への移行と、現在の実行制約は分けて説明します。

FFTとIFFT#

ShapeをN₀,…,Nₙ₋₁、サンプル添字をp、周波数添字をkとすると、現在のForwardは次です。各Value成分は独立に変換します。

F[k]=∑pf[p]exp⁡(−2πi∑j=0n−1kjpjNj)F[k] = \sum_p f[p]\exp\left(-2\pi i\sum_{j=0}^{n-1}\frac{k_jp_j}{N_j}\right)

Forwardは正規化しません。Inverseは正の符号と全軸のサンプル数の積による正規化を使います。

f[p]=1∏jNj∑kF[k]exp⁡(+2πi∑j=0n−1kjpjNj)f[p] = \frac{1}{\prod_j N_j}\sum_k F[k]\exp\left(+2\pi i\sum_{j=0}^{n-1}\frac{k_jp_j}{N_j}\right)

Shapeは維持します。Transformはサンプル配列の周期的な離散変換であり、画像を自動で外へゼロ拡張する処理ではありません。必要なpaddingは明示します。Vectorの三成分は三つの独立した信号であり、三つの空間軸ではありません。

周波数位置と型#

規則的な座標間隔Δの軸では、周波数間隔は1/(NΔ)です。並べ替え前はDCが添字0にあり、上半分は周期表現上の負周波数です。Spectrumの中央表示は観測時の並べ替えで、保存値そのものを書き換えません。不規則なCoordinateに通常FFTをそのまま適用しても、等間隔の物理周波数になりません。

現在のCNLは内部Complexと周波数Gridを使用します。Complexは新しい公開Value型ではありません。論理Colorは数値成分へ分けてFFTし、IFFTの数値出力を色とみなすときは解釈を明示します。新しいFieldのCoordinate・Attribute伝播は全面移行が必要で、物理周波数を表示できると決め打ちしません。

Spectrum#

Magnitudeは実部r、虚部iから√(r²+i²)、Phaseはatan2(i,r)です。Spectrumは中心を移し、Magnitudeへlog(1+Magnitude)と設定範囲の表示写像を適用します。位相や高ダイナミックレンジの元データは失いません。数値を保持するFFTと、見やすい観測画像を作るVisualize/Outputは別の処理です。

Convolveの既定規則#

現行の既定計算は、名称にかかわらず係数を反転しないoffset correlationです。Grid/Image係数の添字kとサイズKに対し、中心offsetをk−floor(K/2)とします。

g[p]=∑kf[p+k−⌊K/2⌋]w[k]g[p] = \sum_k f\left[p+k-\left\lfloor K/2\right\rfloor\right] w[k]

入力領域の外は0です。出力Shapeは入力と同じです。係数を自動正規化しません。偶数サイズでも上式がanchorを定めます。数学的なconvolutionとして使うときは係数と中心を明示的に反転します。非対称係数では向きが違うため、Sobelなどの方向を確認してください。

Scalar係数は対応する各成分へ同じ重みを適用します。同じ成分型の係数は成分別に乗算します。Color係数をアルファ合成操作とは解釈しません。Vector同士の有限Fieldでは、サンプル軸とValue成分を区別します。Value同士だけの場合は一tapの成分演算であり、Vectorの成分を空間方向へ畳み込みません。

実行プロファイル#

ネイティブVulkan FFTはFloat32のScalar/Vector/Color成分のrank1〜3 Grid、Image、Videoが対象です。ColorとVideoは各RGBA成分を独立に数値変換し、Complexの数値Gridを返します。rank1/2は軸長1〜65536、素因数31以下のmixed radixで、1920×1080もpaddingせず変換します。rank3は現在2冪軸のみです。任意rank、任意素数、全Value/Precisionへ対応したという意味ではありません。

動的Convolveはrank1〜3、係数の最大1,048,576セルの現在プロファイルを持ち、実際のGPU・scratch上限を満たす必要があります。小係数はDirect、大係数はFFTを選んでも同じ既定規則を保ちます。未対応の型や予算不足を無言でCPUへ回しません。20msは普遍的な保証ではありません。

VideoをSourceにしたConvolveはX・Y・Timeのサンプル軸へ作用します。Scalar係数または同じRGBA成分の有限3D係数を使い、出力はVideoのShape・Dimension・Coordinateを維持します。不規則なTimeも保存できますが、これはサンプル添字上の演算です。不規則な時刻間隔を等間隔の物理時間へ置き換えるものではありません。

FFTノード · Convolveノード · Visualize · Field構造 · 対応状況

このページを編集GitHubへのアクセス権が必要です。

CompNode Guide · 日本語製品ドキュメント仕様と実装範囲は各項目で区別しています。

ドキュメントを検索

検索語を入力してください。

    ↑ ↓ で結果を移動、Enter で開く · 検索はこの端末内だけで実行されます。