dポイントプレゼントキャンペーン実施中!

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

Googleで検索すれば書き方は出てくるのですが、使ってる関数がいまいちよく分かりません。


・データの入力

・フーリエ変換の計算

・結果の出力というのをやればいいのは理解できるのですが、C言語でどの様に書けばいいか分からなくて…

A 回答 (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 …
    • good
    • 0

DFTのコードを書くのが目的ですか? それとも利用することですか?


後者なら適当なライブラリを呼び出せばいい。あなたが書くのは入出力だけです。

参考URL:http://www32.atwiki.jp/amaeda/
    • good
    • 0

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


「DFT」がどのような処理なのかは理解できていますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!