プロが教えるわが家の防犯対策術!

512個のデータに対してFFTをかけ、変換後の絶対値を得たいのですが矢印の部分でプログラムがとまり、特にエラーメッセージも出ません。
原因がわかりません。申し訳ありませんが、よろしくお願いします。

void FFT(int x[], int y[])
{
   int d, dn, pow, m, j1, j2, exp2, j , k, ndv2, t, flags= 1;
   int n_data = 0, dnumb = 512, nf, jk;
   double w, arg, c, s, t1, t2, t0, dt, ana, anb, answer;
   double [] xr = new double[512];
   double [] xi = new double[512];
dn=dnumb;
w=6.283185303/dnumb;
pow=exp2(dnumb); *2の何乗かを計算するメソッドです
for(t = 0; t < 512; t++){
if(t < 500)
xr[t] = x[t];
else
xr[t] = xr[499];
xi[t] = 0;
}
for(int i=1; i<=pow ; i++)
{
m=dn;
dn=dn/2;
arg=0;
for(int j=1; j<=dn; j++)
{
c=Math.cos(arg);
s=-flags*Math.sin(arg);
arg=arg+w;
k=m;
while(k<=dnumb)
{
j1=k-m+j;
j2=j1+dn;
→→→→→→→  t1=xr[j1]-xr[j2];
t2=xi[j1]-xi[j2];
xr[j1]=xr[j1]+xr[j2];
xi[j1]=xi[j1]+xi[j2];
xr[j2]=c*t1+s*t2;
xi[j2]=c*t2-s*t1;
k=k+m;
}
}
w=2*w;
}
j=1;
ndv2=dnumb/2;
for(int i=1; i<=(dnumb-1); i++)
{
if(i<j)
{
t1=xr[j];
t2=xi[j];
xr[j]=xr[i];
xi[j]=xi[i];
xr[i]=t1;
xi[i]=t2;
}
k=ndv2;

while(k<j)
{
j=j-k;
k=k/2;
}
j=j+k;
}
for(t = 0; t < 512; t++){
ana = Math.pow(xr[t], 2);
anb = Math.pow(xi[t], 2);
answer = Math.pow(ana + anb, 0.5);
}
if (flags==1)
{
for(int j=1; j<=dnumb; j++)
{
xr[j]=xr[j]/dnumb;
xi[j]=xi[j]/dnumb;
}
}
}

A 回答 (2件)

エラーメッセージが出てないのにどうしてその行が悪いとわかったのですか?



もう少し情報がないと答えようがないと思います。

実行時にとまるのであれば
配列の添え字が範囲外になっていませんか?
    • good
    • 0
この回答へのお礼

おっしゃる通りで添え字が溢れてました。
おかげさまで無事直せました。ありがとうございました。

お礼日時:2007/12/13 06:42

Javaにしてはへんなプログラムと思ったら、Math.sinて、JavaScript??


いろいろとチェック点ありすぎなので、
変数にどんなデータが入ってるのかとか、自作関数の動作は?
とか、エラーメッセージくらいチェックする方法を勉強してから、JavaScript掲示板でその成果を質問に反映させて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!