FFTをc言語でプログラミング
助けてください↓c言語でFFTをプログラミングしているのですがバグが発見できずに困り果て居ます。
プログラミングは以下の通りです。画像はカラーではなく、グレースケールのMANDRILLに対して行っています。
for(n=0;n<M;n++){
for(i=0;i<N;i++){
for(j=0;j<N;j++){
Imbatx[n][i][j]=0;
}
}
}
//行FFT
//まずはソート
for(i=0;i<N;i++){
int x=1;
for(j=0;j<N;j++){
if(j<N/2){
//左半分
if(j%2!=0) //jが奇数
batx[0][i][j]=imagein[i][j+N/2-1];
if(j%2==0) //jが偶数
batx[0][i][j]=imagein[i][j];
}
if(N/2<=j && j<N){ //右半分
if(j%2!=0) //jが奇数
batx[0][i][j]=imagein[i][x+N/2-1];
if(j%2==0) //jが偶数
batx[0][i][j]=imagein[i][x];
x++;
}
}
}
for(i=0;i<N;i++){
for(n=1;n<M+1;n++){
k=0;
for(j=0;j<N;j++){
mul=(int)pow(2.0,(double)n);
if(j%mul < mul/2){ //偶数列
batx[n][i][j] = batx[n-1][i][j]+cos(2*PI*k/mul)*batx[n-1][i][j+mul/2]-
sin(2*PI*k/mul)*Imbatx[n-1][i][j+mul/2];
Imbatx[n][i][j]=Imbatx[n-1][i][j]+sin(2*PI*k/mul)*batx[n-1][i][j+mul/2]+
cos(2*PI*k/mul)*Imbatx[n-1][i][j+mul/2];
k++;
}
else{ //奇数列
batx[n][i][j] = cos(2*PI*k/mul)*batx[n-1][i][j] + batx[n-1][i][j-mul/2]-
sin(2*PI*k/mul)*Imbatx[n-1][i][j];
Imbatx[n][i][j]=Imbatx[n-1][i][j-mul/2]+sin(2*PI*k/mul)*batx[n-1][i][j]+cos(2*PI*k/mul)*Imbatx[n-1][i][j];
k++;
}
Re_countx[i][j] = batx[M][i][j];
Im_countx[i][j] = Imbatx[M][i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
FFT[i][j]=pow(pow(Re_countx[i][j],2)+pow(Im_countx[i][j],2),0.5);
FFT[i][j]=log10(FFT[i][j]);
if(FFT[i][j]>max) max=FFT[i][j];
imageout[i][j]=(unsigned char)255*FFT[i][j]/max;
}
}
結果的に出力される画像は以下の画像になります。
ごらんのように縞模様が出てしまいます。
分かる方どうかお願いいたします。