- ベストアンサー
離散フーリエ変換をC言語でどの様に書けばいいですか?
C言語でDFT離散フーリエ変換を書くにはどの様に書けばよろしいですか? Googleで検索すれば書き方は出てくるのですが、使ってる関数がいまいちよく分かりません。 ・データの入力 ↓ ・フーリエ変換の計算 ↓ ・結果の出力というのをやればいいのは理解できるのですが、C言語でどの様に書けばいいか分からなくて…
- みんなの回答 (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 などを使ってファイルをリストすれば良いでしょう。
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
DFTのコードを書くのが目的ですか? それとも利用することですか? 後者なら適当なライブラリを呼び出せばいい。あなたが書くのは入出力だけです。
- Tacosan
- ベストアンサー率23% (3656/15482)
それって, ほとんど何も書いてないよ. およそあらゆる処理が「データの入力→適切な処理→結果の出力」なんだけど.... 「DFT」がどのような処理なのかは理解できていますか?