#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#define PI 3.14159265358979
#define N 512
#define M 9 /*ビット数*/
int dsize;
double x[N];
double y[N];
double z[N];
double wx[N], wy[N];
double datai[N];
void fft(void)
{
double xx, xy;
int i, ii, il, j, jj, k, l, l2, nv2;
double z;
nv2 = N / 2;
j = 0;
for (i = 0; i < N - 1; i++){
if (i < j){
z = y[j]; y[j] = y[i]; y[j] = z;
z = datai[j]; datai[j] = datai[i]; datai[j] = z;
}
k = nv2;
if (k < j + 1) do{ j = j - k; k = k / 2; } while (k < j + 1);
j = j + k;
}/*ビット反転*/
for (i = 1; i <= M; i++){
l = 1;
l = l << i;
l2 = l / 2;
jj = 0;
ii = N / l;
for (j = 0; j < l2; j++){
for (k = j; k < N; k = k + l){
il = k + l2;
xx = y[il] * wx[jj] - datai[il] * wy[jj];
xy = datai[il] * wx[jj] + y[il] * wy[jj];
y[il] = y[k] - xx;
datai[il] = datai[k] - xy;
y[k] = y[k] + xx;
datai[k]= datai[k] + xy;
}
jj = jj + ii;
}
}/*バタフライ演算*/
}
int main(void){
double wstep;
int i;
wstep = -2.0 * PI/(N*0.01);
for (i = 0; i < N; i++){
wx[i] = cos((N/2*0.01-x[i])*wstep);
wy[i] = sin((N / 2 * 0.01 - x[i])*wstep);/*三角関数の値格納*/
datai[i] = 0.0;/*虚数部分 0*/
}
fft();
for (i = 0; i < N; i++){
z[i] = (datai[i] * datai[i] + y[i] * y[i])/(N*N);
}
_getch();
return 0;
}
ファイルを読み込んで配列x{i}にtの値,配列yにYの値を代入して高速フーリエ変換をしたのですが,少し違うようでわからない有様です.一応printfにてtとYの値が配列x,yに格納されるのは確認できました.恐らく刻み時間か三角関数の扱いが悪いのだと思いますがどうすれば直るでしょうか