• ベストアンサー

離散フーリエ変換をC言語でどの様に書けばいいですか?

C言語でDFT離散フーリエ変換を書くにはどの様に書けばよろしいですか? Googleで検索すれば書き方は出てくるのですが、使ってる関数がいまいちよく分かりません。 ・データの入力 ↓ ・フーリエ変換の計算 ↓ ・結果の出力というのをやればいいのは理解できるのですが、C言語でどの様に書けばいいか分からなくて…

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

学習中である場合とする解答です。使用パソコンは Linuxまたは Mac OSX などの UNIX系OSです。 <・データの入力> 1)エディタで専用データファイルを作ることから始めます。  マトリックスは、それに対応した数値をファイル内配置します。   N   W0 W0 W0 W0 ....   W0 W1 W2 W3 ....   W0 W2 W4 W6 ....   ....   N0   N1   N2    .    .  上記定義されたマトリックスを ↓のようにファイルに書き込む  仮に整数値としていますが、実数ならば実数値を書き込んで下さい。 5   0 0 0 0 .... 0 1 2 3 .... 0 2 4 6 ....   ....   0   1   2   .   .  各数値間は半角スペースで区切ってそれぞれの数式定義対応マトリックスを作ります。  ファイル名は半角英字がエラーなく行えるので英字ファイル名を使うことを勧めます。 2)データの読み込み  データの入力は scanf() を使います。  最初にNを読み込めば、マトリックス行数がわかるため for() を使ってプログラムしますが、慣れない場合は腕力で scanf() 関数を連発するのもひとつの方法です。  データファイル読み込みに際しての疑問は、作成したプログラムを起動する際、ターミナルのシェルプロンプトとから    ./a.out<データファイル名  と打鍵すればデータファイルを取り込むことができます。  以上をCで表すと次のようになります。scanf() はそちらで勉強して下さい。  プログラム作成に際しては、一気に書き込まず。途中で printf() を入れてデータ取り込みを確認されることを勧めます。 3)Cプログラム  /* magatai.c DFT program   * file name: magatai.c   * compile: gcc magatai.c   * execution: ./a.out<data_file   */  #define N 10 取り込みデータ数+α  double n;  double w[N][N];  double x[N];  int main(void)  {   int i, j;   scanf(%d, &n);   for (i = 0; i < n; i++)    scanf(%......    .... ↓のフーリエ式が入る。    .... ↓↓の結果の出力が入る。   return 0;  } <・フーリエ変換>  これは for() の入れ子になります。   for (i = 0; i < n; i++) {    for (j = 0; j < n; j++ {     フーリエ変換式;    }   } <・結果の出力>  printf() を使います。↑のフーリエ・プログラムに続いて書きます。   for (i = 0; i < n; i++ )    printf("%f?n", x[i]);  計算結果を特定のファイルに残したいという場合は、プログラム起動の際、リダイレクトを使います。    ./a.out<データファイル名>書き込むファイル名  後は、 cat などを使ってファイルをリストすれば良いでしょう。

参考URL:
http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap6/index.htm

その他の回答 (2)

回答No.2

DFTのコードを書くのが目的ですか? それとも利用することですか? 後者なら適当なライブラリを呼び出せばいい。あなたが書くのは入出力だけです。

参考URL:
http://www32.atwiki.jp/amaeda/
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

それって, ほとんど何も書いてないよ. およそあらゆる処理が「データの入力→適切な処理→結果の出力」なんだけど.... 「DFT」がどのような処理なのかは理解できていますか?

関連するQ&A