回复 2楼 jack10141
呵呵,疏忽了。
下面是我的代码。
程序代码:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <complex>
#include <iomanip>
#include <fstream>
#include <conio.h>
#include <math.h>
#include <fftw3.h>
#include <stdio.h>
#define M 128
#define N 128
#define Pi 3.1415926535898
#define complex_d complex<double>
double data[M][2*N];
using namespace std;
void showresult(complex_d G[M][N])
{
FILE* data = NULL;
fopen_s(&data, "imagedata.txt", "w");
if(data == NULL)
{
throw "创建数据文件失败。";
}
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
fprintf_s(data, "%f\t",10*log10(abs(G[i][j])));
}
fprintf_s(data, "\n");
}
fclose(data);
}
void dataread( )
{
using namespace std;
int a[2];
double b[N+1];
double c[1];
streampos weizhi;
streampos WZhi;
ifstream infile("ISAR2D[1].dat",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(int i=0;i<2;i++)
{
infile>>a[i];
}
//cout<<endl;
streampos weizhi1 =infile.tellg(); //weizhi1 是 64 64
infile.seekg(weizhi1);
for(int i=0;i<N+1;i++)
{
infile>>b[i];
}
streampos weizhi2 =infile.tellg(); //weizhi2 第二行结束
infile.seekg(weizhi2);
infile>>c[0];
streampos weizhi3=infile.tellg(); //weizhi3 第三行第二个数开始位置
weizhi=weizhi3-weizhi2; //weizhi 求出第一个数所占的空间
WZhi= weizhi3;
for(int i=0;i<M;i++)
{
infile.seekg(WZhi);
for(int j=0;j<2*N;j++)
{
infile>>data[i][j];
}
streampos weizhi4=infile.tellg();
infile.seekg(weizhi4);
infile>>c[0];
streampos weizhi5=infile.tellg();
WZhi=weizhi5;
}
}
complex_d BPalgorithm(complex_d G[M][N])
{
complex_d *gg;
complex_d PLm[M][N];
fftw_complex *in, *out;
fftw_plan p;
//分配存储空间
gg=new complex_d[M*N];
if(gg==NULL)
{
throw "分配内存失败!";
}
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * M);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * M);
// 设置变换计划
p = fftw_plan_dft_1d(M, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
// 设置测试数据
for(int j=0;j<N;j++)
{
for(int i=0;i<M;i++)
{
in[i][0]=real(G[i][j]);
in[i][1]=imag(G[i][j]);
}
fftw_execute(p);
for(int l=0;l<M;l++)
{
complex_d a(out[l][0],out[l][1]);
PLm[l][j]=a;
}
}
gg=PLm;
return gg;
// 释放内存
delete []gg;
gg = NULL;
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
}
int main()
{
complex_d G[M][N];
complex_d a;
complex_d *g;
complex_d PL[M];
double Win[M][N];
//分配存储空间
g=new complex_d[M*N];
if(g==NULL)
{
throw "分配内存失败!";
}
//读取数据
dataread( );
for (int i=0; i<M; i++)
{
for (int j=0; j<N; j++)
{
complex_d a(data[i][j],data[i][j]);
G[i][j]=a;
}
}
//hamming窗
for (int i=0; i<M; i++)
{
for (int j=0; j<N; j++)
{
Win[i][j]=(0.5-0.5*(cos(2*Pi*j/(8*M-1))))*(0.5-0.5*(cos(2*Pi*i/(8*N-1))));
}
}
//时域加窗
for (int i=0; i<M; i++)
{
for (int j=0; j<N; j++)
{
G[i][j]=G[i][j]*Win[i][j];
}
}
g=BPalgorithm(G);
// 显示测试结果
showresult(G);
}