- ベストアンサー
離散フーリエ変換を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」がどのような処理なのかは理解できていますか?
関連するQ&A
- 離散フーリエ変換をC言語で書く方法について
C言語でDFT離散フーリエ変換を書くにはどの様に書けばよろしいですか? Googleで検索すれば書き方は出てくるのですが、使ってる関数がいまいちよく分かりません。 ・データの入力 ↓ ・フーリエ変換の計算 ↓ ・結果の出力というのをやればいいのは理解できるのですが、C言語でどの様に書けばいいか分からなくて…
- 締切済み
- 数学・算数
- C言語プログラムの離散フーリエ変換
C言語プログラムの離散フーリエ変換について教えてください。「C言語による画像再構成の基礎」という本のプログラムをもとに二次元画像をDFT(通常の離散フーリエ変換)→InveresFFT(逆高速フーリエ変換)すると画像が左右反転、上下反転してしまいます。DFT→InverseDFTやFFT→InverseFFTだとそのようにはなりません。通常のDFTとFFTのアルゴリズムの違いからしかたがないのでしょうか?それともプログラムの変更で修正できるのでしょうか?どうしてもDFT→InverseFFTでがぞうをもとに戻したいのです。 サンプルページ http://www.iryokagaku.co.jp/frame/03-honwosagasu/370/370-dl.html P4-14fourier2d1d.c (離散フーリエ変換DFT) P4-15fft.c(高速フーリエ変換)プログラムです
- 締切済み
- C・C++・C#
- 離散フーリエ展開の意味(イメージ)
離散フーリエ展開のよく意味がわかりません。 フーリエ変換は任意の周期関数をsunやcosの関数の和 で書くことですよね?それの複素表示も理解できるのですが…。 DFT(離散フーリエ展開)は関数の値を細分化して、 そしてそれを変えるいうことですか? それはどのようなことなのでしょうか? Uj=cos(2π/N)jとVj=sin(2π/N)jの離散フーリエ展開を すると、離散フーリエ変換したUkがk=1、N-1で振動成分をもつとはどういうことですか? まだ、大学1年で非常に難しくて困っています。 どなたかわかりやすく教えてほしいです。 お願いします。
- ベストアンサー
- 数学・算数
- 離散フーリエ変換(DFT)について。
離散フーリエ変換(DFT)について。 次の有限長N=4のディジタル信号の離散フーリエ変換(DFT)の周波数スペクトルを求めよ。[F[0],F[1],F[2],F[3]]=[-1,1,-1,2] について。 算出した所、 DFTは F[0]=1 F[1]=j F[2]=-5 F[3]=-jと算出できましたが正解でしょうか。 よろしくお願いいたします。
- ベストアンサー
- 電気・電子工学
- インパルスとフーリエ変換
離散フーリエ変換のプログラムを作成したのですが、初歩的な疑問が出てきました。測定法はオシロスコープからデータを得て離散値をフーリエ変換するというものです。インパルス=δ関数としてこれはオシロ自身が持っている(性能)ものと解釈してよろしいのでしょうか。また「アナログ信号のフーリエ変換」というのも理解に苦しみます。連続量を離散量子化しなければ計算不可のような気がしてならず、また離散フーリエ(DFT)なら有限区間に周期信号が必ず入っていなければ役に立たないと解釈していますが・・・。初歩の初歩ですが混乱しております。またこれらプログラミング等、専門外で初心者なのでよろしく解答お願いします。
- ベストアンサー
- 物理学
- 離散フーリエ変換
フーリエ変換を計算機で扱う場合について聞きたいです。 ある関数(例えばsin(x))を離散フーリエ変換しようとして、まずxを0.1ずつ増やしながらsin(x)をサンプリングします。これを虚部を0として複素数にします。 この後、複素数のフーリエ変換を行い結果が得られます。 と、ここまでは正しいと思うのですが、 その後が分かりません。 文献などに載っているフーリエ変換後のグラフは、横軸が周波数νで、縦軸がf(ν)です。 このグラフと合うようにするには 横軸・縦軸には何をとればいいのでしょうか? 横軸が周波数って言うのは、この場合は1/0.1のことでしょうか? 教えて頂きたいです。お願いします。
- 締切済み
- 数学・算数