|
|
> rdftはフーリエ変換と逆変換をしているようですがちがいますか。
その通りです。
rdft()関数の2番目のパラメータを
1にすると フーリエ変換
-1にすると逆フーリエ変換
が計算できます。
他に質問があればまた書き込んでください。
(注)
fftsg_h.c及びrdft()関数は私が作ったプログラムではありません。
以下、fftsg_h.c より引用
-------- Real DFT / Inverse of Real DFT --------
[definition]
<case1> RDFT
R[k] = sum_j=0^n-1 a[j]*cos(2*pi*j*k/n), 0<=k<=n/2
I[k] = sum_j=0^n-1 a[j]*sin(2*pi*j*k/n), 0<k<n/2
<case2> IRDFT (excluding scale)
a[k] = (R[0] + R[n/2]*cos(pi*k))/2 +
sum_j=1^n/2-1 R[j]*cos(2*pi*j*k/n) +
sum_j=1^n/2-1 I[j]*sin(2*pi*j*k/n), 0<=k<n
[usage]
<case1>
rdft(n, 1, a);
<case2>
rdft(n, -1, a);
[parameters]
n :data length (int)
n >= 2, n = power of 2
a[0...n-1] :input/output data (double *)
<case1>
output data
a[2*k] = R[k], 0<=k<n/2
a[2*k+1] = I[k], 0<k<n/2
a[1] = R[n/2]
<case2>
input data
a[2*j] = R[j], 0<=j<n/2
a[2*j+1] = I[j], 0<j<n/2
a[1] = R[n/2]
[remark]
Inverse of
rdft(n, 1, a);
is
rdft(n, -1, a);
for (j = 0; j <= n - 1; j++) {
a[j] *= 2.0 / n;
}
.
|
|