喫茶XRAYトップページ

[スレッド全体
]

[9115] Delphiで複素数計算返信 削除
2015/8/24 (月) 13:04:37 taki
困っています。助けてください。

音声の線形予測分析でスペクトル包括を求めています。
n次のLPC係数とそれぞれの残差分散が配列a[n],e[n]として求まった段階です。
スペクトル包括はFIRフィルター?のフィルタ係数として求めたa[n],e[n]を
代入すれば求まるそうです。

参考にしたWebページは
http://mitsui725.blogspot.jp/2013/08/c.html

C言語で書かれたプログラムをPascalに書き直しているのですが、複素数を扱う
complexというのが出てきます。
Delphi XE4 Starter ではVariant形式で複素数を扱うことができることが分かって
います。

悩んでいる内容は以下のような事です。

=== C言語 =========
double N2pi = 2*M_PI/N;
for (n=0;n<N + 1; ++n){
double complex z,x,・・略
x=-I*N2pi * n;
z=cexp(x);
 略

これを(我流で)書き換えると
var
  n:integer;
  N2pi,x,z:Variant;
begin
  N2pi := VarComplexCreate;
  x := VarComplexCreate;
  z := VarComplexCreate;
  N2pi := 2.0 * PI / NN;    // NNは分割する数で、外部からの値。
  for n := 0 to n do begin
    x := -I*N2pi * n;         // <- ここが分からない
    z := exp(x);

-I*N2pi * n;の意味を(-N2pi * n)を虚数部に代入する意味かなと思い、
x.Imaginary := -1.0 * N2pi * n; とかしたのですが、自身がありません。
実数部は0.0のままでいいのかな?

分かっている人からすれば、実際に数値を代入して計算させたら
正しいかどうか分かるんじゃない?と言われると思いますが、複素数の
計算をやったことが無いので、どんな計算をして確かめたらいいのかすら
分かりません。

何かヒントください。 m(_ _)m

環境は
Win7 Pro(32bit) + Delphi XE4 Starter



[9120] Re:Delphiで複素数計算返信 削除
2015/8/24 (月) 18:01:44 Mr.XRAY
▼ takiさん,お疲れ様です.

> 困っています。助けてください。

助けられません (^^;

> 正しいかどうか分かるんじゃない?と言われると思いますが、複素数の
> 計算をやったことが無いので、どんな計算をして確かめたらいいのかすら
> 分かりません。


確かに.というより,数値計算の場合に言えますね.
昔,DEC のコンピュータ(パソコンじゃなくて)に付属していた数値計算
ライブラリをリファレンスにしていました.
そういうのがないと難しいのではないかと.

福士さんが書いている

>によると、C99のcomplexでは(大文字の)"I"は数学の虚数単位iのことだそうです。

これを見て,あっ! そうだ.c は大文字と小文字は区別するんだっけ.
と改めて認識しました.Delhpi 使っていると,区別ないですからね.
要注意です.

今回のとは直接関係があるかは分かりませんが.
数値計算関係が出てきたので,ついでに.
Delphi での情報は割と少ないようですが,皆さんの参考に.

[複素高速フーリエ変換]
http://www.w-frontier.com/delphi/tips.html#cfft

[岡本安晴のホームページ]
http://homepage2.nifty.com/okamotoy/

老舗ですが,これも
[TPMath] FFT のライブラリあり
https://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm

どれも実務では使ったことがありません.あしからず.
この他にも数値計算関係のライブラリを見たことがあるのですが,失念.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82