FFTW@wiki内検索 / 「Complex Multi-Dimensional DFTs」で検索した結果

検索 :
  • Complex Multi-Dimensional DFTs
    複素多次元離散フーリエ変換 Complex Multi-Dimensional DFTs  多次元変換も、一次元の変換とほとんど同じように動きます。すなわち、まずfftw_complexの配列のメモリを確保し、(fftw_mallocの使用を推奨)、次にfftw_planを作成し、3番目に、fftw_execute(plan)を必要な回数実行し、最後にfftw_destroy_plan(plan)とfftw_freeでメモリの解放を行います。唯一の違いは、プランを作るときに使うルーチンだけです。 すなわち、 fftw_plan fftw_plan_dft_2d(int nx, int ny, fftw_complex *in, fftw_complex *out, ...
  • FFTW Tutorial
    ...読む前に、最初の節(Complex One-Dimensional DFTs)は目を通してください。  FFTWのバージョン2以前のユーザーは7章のUpgrading FFTW version2を参照すると良いでしょう。 複素1次元離散フーリエ変換(Complex One-Dimensional DFTs) 複素多次元離散フーリエ変換(Complex Multi-Dimensional DFTs) 実データ1次元離散フーリエ変換(One-Dimensional DFTs of Real Data) 実データ多次元離散フーリエ変換(Multi-Dimensional DFTs of Real Data)
  • Complex One-Dimensional DFTs
    複素1次元離散フーリエ変換 Complex One-Dimensional DFTs  プランとは、偶然の結果を達成するための最善の方法をいろいろ思い悩むことである。 (Ambrose Bierce, The Enlarged Devil’s Dictionary.)  FFTWで、サイズNのデータの一次元DFTを計算する方法はいたって簡単で、おおよそ以下のようなコードになります。 #include fftw3.h ... { fftw_complex *in, *out; fftw_plan p; ... in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); out = (...
  • Multi-Dimensional DFTs of Real Data
    実データ多次元離散フーリエ変換 Multi-Dimensional DFTs of Real Data 実データの多次元離散フーリエ変換は、以下のプランナールーチンを使います。 fftw_plan fftw_plan_dft_r2c_2d( int nx, int ny, double *in, fftw_complex *out, unsigned flag ); fftw_plan fftw_plan_dft_r2c_3d( int nx, int ny, int nz, double *in, fftw_complex *out, unsigned flag ); fftw_plan fftw_plan_dft_r2c( int rank, con...
  • One-Dimensional DFTs of Real Data
    実データ1次元離散フーリエ変換 One-Dimensioanal DFTs of Real Data  実際の利用上、多くの場合、入力データin[i]は実数で、その場合DFTの出力は、”エルミート冗長性”を満たします。すなわち、out[i]はout[n-i]の共役となります。この性質の利点を生かすと、大雑把にいえば、スピードの向上と、メモリ節約を図ることができます。  このスピード向上と、メモリ節約といった利点と引き換えに、ユーザーはFFTWの複素変換の簡易性を犠牲にしなければなりません。  第1に、入出力の配列が異なるサイズ、型になります。入力がn個の実数だった場合、出力は(冗長でない形で)n/2+1個の複素数となります。また、入出力が等しい、in-place変換の場合、入力の配列にわずかに”パディング”(余白)を設ける必要があります。  第2に、複素数から実数への逆変換...
  • Real-Data DFTs
    FFTWマニュアル - FFTWリファレンス - ベーシックインターフェース - 実データ離散フーリエ変換 実データ離散フーリエ変換 Real-Data DFTs fftw_plan fftw_plan_dft_r2c_1d( int n, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c_2d( int nx, int ny, double *in, fftw_complex *out, unsigned flags );...
  • DCexchange
    /** * @brief origin shift (top-left - center) * @author maeda * @date 2008/09/10 */ #include "DCexchange.h"   /** * in-place DC exchange for 2dimensional data (top-left - center) * this function works both odd/even size data * @param data fft data * @param cols column size of the data ( sometimes the size of x ) * @param rows row size of the data ( sometimes the size of y ) * @r...
  • realdataDFT
    /** * @brief test of fftw r2c transform * @author maeda * @date 2008/09/24 */ #include cv.h #include cxcore.h #include highgui.h #include "fftw3.h"   #include "powerspectol.h"   #pragma comment( lib, "cv.lib" ) #pragma comment( lib, "cxcore.lib" ) #pragma comment( lib, "highgui.lib" ) #pragma comment( lib, "fftw3.lib" ) &n...
  • fftwandopencv
    /** * @brief basic form of fftw with opencv */   #include stdio.h   #include cv.h #include cxcore.h #include highgui.h   #define _USE_MATH_DEFINES #include "math.h" #include "fftw3.h"   #pragma comment( lib, "cv.lib" ) #pragma comment( lib, "cxcore.lib" ) #pragma comment( lib, "highgui.lib" ) #pragma comment( lib, "...
  • fftw2D
    /* * test of self compiled fftw3 * 2D version * @author maeda * @date 2008/09/09 */   #include stdio.h #define _USE_MATH_DEFINES #include math.h   #include "fftw3.h" #pragma comment( lib, "fftw3.lib" )   #define SIZEX 16 #define SIZEY 8 #define SIZE (SIZEX*SIZEY)   int main( void ){   fftw_complex *in = NULL; fftw_complex *out = NULL; ...
  • fftw1D
    /* * test of self compiled fftw3 * * @author maeda * @date 2008/09/09 */ #include stdio.h #define _USE_MATH_DEFINES #include math.h   #include "fftw3.h" #pragma comment( lib, "fftw3.lib" )   #define SIZE 64   int main( void ){   fftw_complex *in = NULL; fftw_complex *out = NULL; fftw_plan p = NULL; int i;   size_t mem_size = size...
  • Complex DFTs
    FFTWマニュアル - FFTWリファレンス - ベーシックインターフェース - 複素離散フーリエ変換 複素離散フーリエ変換 fftw_plan fftw_plan_dft_1d( int n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags ); fftw_plan fftw_plan_dft_2d( int nx, int ny, fftw_complex *in, fftw_complex *out, int sign, unsigned flags ); fftw_plan ff...
  • FFTW Introduction
    Introduction  このマニュアルはFFTW(the Fastest Fourier Transform in the West)バージョン3.1.2のものです.FFTWは離散フーリエ変換を計算する包括的な高速Cルーチン集であり、以下のような特徴があります. 複素数データ,実数データ,偶対称,奇対称な実数データのDFT(*1),実数データの離散Hartley変換(DHT)を計算可能 入力データは任意のサイズがとれる.O(nlogn)アルゴリズムを,素数を含む,すべてのサイズで採用. 計算の時間の次元がデータ数nに対して,nlogn 任意の多次元データをサポート SSE/SSE2/3DNow!/Altivecの命令セットをサポート FFTW3.1.2は共有メモリシステムに対しては、並列(マルチスレッド)変換が可能。FFTW3.1.2は分散メモリ並列変換ができないが、MP...
  • Dynamic Arrays in C
    FFTWマニュアル - その他重要なこと - 多次元配列のフォーマット - C言語における動的配列 C言語における動的配列 Dynamic Arrays in C  ほとんどの場合に、動的にfftw_mallocを使って、配列を確保することを推奨します。1次元の場合よりも、多次元の方が複雑ではありますが、これは難しいことではありません。  配列の生成は簡単です。fftw_mallocのような動的メモリ確保ルーチンを使って、N個のfftw_complex値(複素数DFTに関しては)の大きさの配列を確保します。ここで、Nは配列の次元の積(すなわち、配列の複素数知の総数)です。以下に、ランク3の5x12x27の配列を確保するコード例を示します。 fftw_complex *an_array; an_array = (fftw_complex*)fftw_malloc( 5...
  • phase.cpp
    /** * Phase calculation * @author maeda * @date 2008/09/01 */ #include "phase.h" #define _USE_MATH_DEFINES #include "math.h"   /** * get the phase of the signal and normalize it to 0-1 range * if we can t get the phase i.e. power=0, set -1 * @param in input data ( frequency domain ) * @param out 0-1 normalized phase ( frequency domain ) * @param rows ( width ) * @param col...
  • Complex numbers
    ... 複素数の取扱 Complex numbers  FFTWのインターフェースは、すべての浮動小数点数に、double精度を用いており、複素数を保持するfftw_complex型を以下のように定義しています typedef double fftw_complex[2];  ここで、[0]の要素は実部、[1]の要素は虚部をそれぞれ表しています。 代替手段として、(gccのような)ANSI C標準のC99をサポートするCコンパイラがあれば、C言語の新しいネイティブな複素数型(バイナリとしては、上の型と同じ)も使うことができます。すなわち、#include complex.h を fftw3.h の前にインクルードすれば、fftw_complexが、ネイティブの複素数型として定義され、通常の数学で扱うことができるようになります(たとえば、x = y * (3+4*I)...
  • Precision
    FFTWマニュアル - FFTWリファレンス - データタイプとファイル - 精度 精度 Precision  単精度、4倍精度(long-double)バージョンのFFTWをインストールすることもできます。これはそれぞれ、通常のdouble型の所を、floatとlong doubleにそれぞれ置き換えるものです。(詳細は8章のインストールとカスタマイズ)をご覧ください。これらのインターフェースを使うには、以下のようにすればよい。 単精度/4倍精度のライブラリにリンクする。Unixでは、-lfftw3fや-lfftw3lを-lfftw3の代わりにつければよい。(同時に違う精度のライブラリにリンクすることもできる) 同じヘッダ fftw3.h をインクルードする すべての小文字の fftw_ インスタンスを fftwf_ や fftwl_ にそれぞれ置き換える(前者が単...
  • phase
    /** * @brief phase calculation * @auther maeda * @date 2008/09/23 */ #include "phase.h" #define _USE_MATH_DEFINES #include "math.h"   /** * get the phase of the signal and normalize it to 0-1 range * if we can t get the phase i.e. power=0, set -1 * @param in input data ( frequency domain ) * @param out 0-1 normalized phase ( frequency domain ) * @param rows ( height ) * @p...
  • powerspectol
    /** * Powerspectol calculation * @author maeda * @date 2008/09/01 */ #include "powerspectol.h" #define _USE_MATH_DEFINES #include "math.h"   /** * get the log scaled powerspectol of the signal and normalize it to 0-1 range * @param in input data ( frequency domain ) * @param out output data ( frequency domain ) * @param cols ( width ) * @param rows ( height ) * @return tru...
  • Dynamic Arrays in C-The Wrong Way
    FFTWマニュアル - その他重要なこと - 多次元配列のフォーマット - C言語における動的配列(間違えた使い方) C言語における動的配列(間違えた使い方) Dynamic Arrays in C - The Wrong Way  C言語で多次元配列のメモリ確保に用いられる他の方法は、しばしばFFTWで利用できません。これを行うと、FFTWで深刻なエラーがおきるかもしれません。ここではその方法は、よく知られ使われているため、これについて議論します。この方法は、配列のポインタの配列のポインタの・・・を作るものです。たとえば、以下のようなものです。 int i,j; fftw_complex ***a_bad_array; /* 5x12x27の配列を確保する他の方法 */ a_bad_array = (fftw_complex***)malloc( 5 * sizeof(...
  • SIMD alignment and fftw_malloc
    FFTWマニュアル - データの並び - SIMDの並びとfftw_malloc SIMDのならびとfftw_malloc SIMD alignment and fftw_malloc "Single Instruction Multiple Data"(単一命令複数データ流)を意味するSIMDは、 いくつかの、単一命令で複数回(通常2回または4回)同時に操作を行えるプロセッサでサポートされています。SIMD浮動小数点命令は、いくつかのポピューラーなCPUで使えます。たとえば、SSE/SSE2(単精度/倍精度)は、Pentium Ⅲ/Ⅳ以上、3DNow!(単精度)はAMD K7以上、そしてAltiVec(単精度)はPowerPC G4以上で利用できます。FFTWは、これらのいかなるシステムの対してもSIMD命令をサポートするようにコンパイルできます。 ...
  • Fixed-size Arrays in C
    FFTWマニュアル - その他重要なこと - 多次元配列のフォーマット - C言語における固定配列 C言語における固定配列 Fixed-size Arrays in C  C言語でコンパイル時にサイズが宣言されている多次元配列は、すでに列メジャーオーダーになっています。したがって、何も特別なことをする必要はありません。以下に例を示します、 { fftw_complex data[NX][NY][NZ]; fftw_plan plan; ・・・ plan = fftw_plan_dft_3d( NX, NY, NZ, data[0][0][0], FFTW_FORWARD, FFTW_ESTIMATE ); ・・・ }  これは、NXxNyxNzの入出力が同じである、インプレース変換のプランです。プランナーにわた...
  • Real-data DFT Array Format
    FFTWマニュアル - FFTWリファレンス - ベーシックインターフェース - 実データ離散フーリエ変換配列様式 実データ離散フーリエ変換配列様式  実データの離散フーリエ変換出力(r2c変換)は、対称性を持つ。つまり、原則的には、2倍の冗長性を持つ(4.7節What FFTW Really Computes参照)。(逆c2r変換の入力も、同様)。実際のところ、これらの冗長性の排除を、効果的かつ理解しやすい形式(多次元変換の一般化するもの)で行うことを、完全に実現することは不可能である。その代わりに、r2c変換の出力は、対応する複素変換の出力の半分をわづかに超える。データはいかなる方法でも”圧縮”せず、通常のfftw_complex値の配列として、格納している。実際のところ、このデータは対応する複素変換の配列の一部分である。  具体的にいえば、d(=ランク)次元の n1...
  • Planner Flags
    FFTWマニュアル - FFTWリファレンス - ベーシックインターフェース - プランナーフラグ プランナーフラグ Planner Flags FFTWのすべてのプラン生成ルーチンは、整数のflags引数をとり、これは以下で定義される0個以上のビット毎定数フラグの、のOR( | )となります。これらのフラグは、プラン生成の計算の厳密性(および時間)に関係し、同時にまた、使われる変換アルゴリズムに制限を加えることも可能です。 重要 プラン生成時に、入力配列は上書きされます。したがって、プラン生成の後に入力配列の初期化を行う必要があります。これは、FFTW_ESTIMATEフラグを宣言することによってのみ、回避可能です。 プラン生成のの厳密さにかかわるフラグ Planning-rigor flags FFTW_ESTMATE FFTW_ESTIMATEは、異なるア...
  • Using Plans
    FFTWマニュアル - FFTWリファレンス - プランの利用 プランの利用 Using Plans  FFTWにおけるすべての変換のプランは、fftw_plan型として(不透明なポインタ型)格納され、これからの節で述べる様々なルーチンによって生成されます。fftw_planは、変換を計算するのに必要なすべての情報を持っていて、たとえば入出力配列のポインタなどもそれに含まれます。 void fftw_execute( const fftw_plan plan );  上記によってプランが実行され、あらかじめ計画された配列に対する変換が計算されます(その配列はこの時、存在する必要があります)。プランに変更がなければ、fftw_executeは所望の回数だけ実行することができます。  既にあるプランを、違う配列に使いたいときは、グルインターフェースを使うことができ...
  • サンプルプログラム
    - 番目のお客様♪ (※) プログラムを実行していかなる結果が生じても責任は負いません。悪しからず。 プログラムおよび実行結果 fftw+C言語標準ライブラリのみで動くプログラム とりあえず、試してみたい方へ。 プログラムの内容 ソースコード 実行結果 基本の使い方 1次元FFT fftw1D.cpp result1 基本の使い方 2次元FFT fftw2D.cpp result2 原点移動(2次元) DCexchange.cpp result3 パワースペクトルを得る powerspectol.cpp result4 位相を得る phase.cpp 画像出力する プランの再利用 メモリを節約したFFT OpenCVを利用したプログラム OpenCVというライブラリが必要だが、ライブラリ導入によって、コードも簡単、入出力も簡単になりオススメ...
  • Caveats in Using Wisdom
    FFTWマニュアル - その他重要なこと - 知の利用上の注意-Caveats in Using Wisdom 知の利用上の注意 Caveats in Using Wisdom 實に, 知惠が 多くなれば 惱みも 多くなり, 知識を 增す 者は 悲しみを 增す.[Ecclesiates 1 18]  wisdomの利用には落とし穴があります。それはFFTWのハードウェアやその他の条件への適応能力を、無意味なものにしてしまいうることです。例えば、あるプロセッサで稼働するプログラムから、wisdomを外部へ出力し、他のプロセッサーで稼動するプログラムに取り込むなどという状況は、十分に想定されます。これを行うと、2番目のプログラムは、そのマシンの最適なプランではなく、1番目のプロセッサで最適化されたプランを使うことを意味します。  wisdomは、ハードウェアとプロ...
  • comments
    Re powerspectol.hとは?   すみません.見逃してました.ありました.とても参考になりました - 名無しさん 2012-10-10 20 01 06 powerspectol.hとは? - 名無しさん 2012-10-10 19 57 28 わかりやすく、ありがとうございます。 - yukichi 2012-06-10 17 24 44 がびょーん - 通りすがり 2012-05-14 23 51 29 文字ばっかりでわかりづらいぞっ - 名無し 2009-07-05 11 41 03 名無しさん ほっ、ほんとうだ・・・。ご指摘ありがとうございます。 - 管理人 2009-06-28 23 50 57 とても参考になりますた。 - 16 55 36の人 2009-06-24 17 39 31 サンプルプログラムの「位相を得る」のソース中のat...
  • Words of Wisdom-Saving Plans
    FFTWマニュアル - その他重要なこと - 知の利用-プランの保存 知の利用-プランの保存 Words of Wisdom - Saving Plans  FFTWは、プランを保存したり、保存してあるプランを復元したりする方法を実装しています。実際のところは、FFTWがやっていることは、プランを保存して読み込むというだけでなく、もっと一般的なことをやっています。そのメカニズムは、”wisdom(知)”と呼ばれます。ここでは、この特徴を大雑把に説明します。詳細は、4章のFFTW Referenceの21ページを見てください。ここには、FFTWでwisdomをどう利用するかについて、より難しくなりますが、細かいところまで完全に議論が展開されています。  FFTW_MEASURE,FFTW_PATIENT,FFTW_EXHAUSTIVEオプションで生成されたプランは、最適に近...
  • Other Important Topics
    その他重要なこと Other Important Topics データの並びSIMDの並びとfftw_malloc x86アーキテクチャにおけるスタックの並び 多次元配列のフォーマット列メジャー形式 行メジャー形式 C言語における固定配列 C言語における動的配列 C言語における動的配列-誤った方法 知の利用 -プランの保存 知の利用上の注意 Wisdom利用上の注意
  • FFTWマニュアル
      - 番目のお客様 (^-^)/~~ FFTWのページ  このページは、フリーのFFTライブラリFFTWが有効に活用されるように作られたページです。 マニュアルの日本語訳や、使用上の注意、サンプルプログラムがあります。 未完成のところも多いですが、常時更新していきます。 FFTWはバージョン2と3では大幅に仕様が異なるので、ご利用のバージョンにご注意ください。  ご意見や、感想を掲示板のほうへお寄せください。 動かない、分からないなどのお問い合わせは takaidohigasi あっと gmail.com へ!(回答あるかどうかは、保証しかねますが。。。) FFTW3.1.2 マニュアル FFTWとは?? FFTWの使い方 (簡単な使い方)複素1次元離散フーリエ変換 複素多次元離散フーリエ変換 実データ1次元離散フーリエ変換 実データ多次...
  • Stack alignment on x86
    x86アーキテクチャにおけるスタックの並び  Pentiumやそれに続くx86のプロセッサーでは、倍精度の変数が8-byte並びになっていないと、かなりのパフォーマンスの損失があります。(2つ以上の因数というのは普通ではありません?? 原文 a factor of two or more is not unusual) 残念なことに、スタック(ローカル変数や、サブルーチンの引数が格納される場所)はIntel ABIでは8-byte並びになっていることは保証されていません。  最近のgcc(Intel、Metrowerks、Microsoftなどの大多数のその他のコンパイラも同様)では、スタックを8-byte並びにすることができ、gccはこれをデフォルトでやってくれます(gccドキュメントの-mpreferred-stack-boundaryを参照)。もし、あなたのコンパイラが...
  • FFTW使用上の注意
    全般 # スケーリング 変換の結果は配列のスケール倍される。 プラン生成 プラン生成は、原則的にデータの”メモリ空間”に対して行われ、 (これはFFTWのバージョン3になってから大きく変更されたポイントである。) プラン生成時には、計算時間の最適化などを行うので、多少時間がかかる。 したがって、繰り返し計算を行う時には、一度生成したプランを繰り返し使うことが推奨されている。 すると、例えば、同じサイズの入力データが複数あるとき、一度プランを生成してから、プラン生成時に指定したメモリ空間にデータをコピーして演算を行うことが考えられる。 この際、プラン用のメモリ空間が、”バッファ”として余分に消費されることになるので、多くのメモリを必要とする場合には検討が必要だ。 また、ここまででプランは特定の”メモリ空間”に対して生成されると述べたが、データサイズが同じ、...
  • FFTW Reference
    FFTWマニュアル - FFTWリファレンス FFTWリファレンス FFTW Reference  この章では、連続(シングルプロセッサの)FFTWの関数すべての、完全なマニュアルを扱います。並列変換については、5章のParallel FFTWをご覧くさい データタイプとファイル 複素数 精度 メモリの確保 プランの利用 ベーシックインターフェース
  • @wiki全体から「Complex Multi-Dimensional DFTs」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索