问题描述
我正在学习 FFTW,但我的代码在 fftw_plan_dft_2d 上停止了。 这是我的流程。
- 我将 2d 复数数组展平为 1d fftw_complex 数组。
- 将此数组移交给具有 fftw 功能的“FFT”。
- 当我使用 width : 10,height : 10 运行时,它运行正常。
但是当我以不同的宽度和高度运行它时出现错误,例如 width : 10,height : 12。 当我运行它时,它只是以 -1073740940 CODE 停止。
所以在调试模式下再次运行,它停在下面的行
forward = fftw_plan_dft_2d(width,height,fftData_in,fftData_out,FFTW_FORWARD,FFTW_ESTIMATE);
我认为我的代码没有问题,而且 c2c 对不同的 nx,ny 大小也没有问题。
你们能帮我了解一下吗?
#include "fftw3.h"
#include <math.h>
#include <complex>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
fftw_complex* FFT(double** data_Y,int t_height,int t_width)
{
int i,j,width;
height = t_height;
width = t_width;
fftw_complex *fftData_in;
fftw_complex *fftData_out;
fftData_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * height*width); // input buffer
fftData_out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * height*width); // output buffer
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
fftData_in[i*height + j][0] = data_Y[i][j];
fftData_in[i*height + j][1] = 0;
fftData_out[i*height + j][0] = 0;
fftData_out[i*height + j][1] = 0;
}
}
fftw_plan forward;
forward = fftw_plan_dft_2d(width,FFTW_ESTIMATE);
fftw_execute(forward);
fftw_destroy_plan(forward);
fftw_free(fftData_in);
return fftData_out;
}
int main()
{
int m_height = 10;
int m_width = 5;
double ** data_Y = new double*[m_height];
for (int i = 0; i < m_height; i++) {
data_Y[i] = new double[m_width];
}
for (int i = 0; i < m_height; i++) {
for (int j = 0; j < m_width; j++) {
data_Y[i][j] = j + 1;
}
}
for (int i = 0; i < m_height; i++) {
for (int j = 0; j < m_width; j++) {
printf("[%f]",data_Y[i][j]);
}
printf("\n");
}
//FFT
fftw_complex *fftData = FFT(data_Y,m_height,m_width);
printf("============================REAL=======================\n");
for (int i = 0; i < m_height; i++) {
for (int j = 0; j < m_width; j++) {
printf("[%.5f]",fftData[i*m_height + j][0]);
}
printf("\n");
}
printf("============================IMAG===========================\n");
for (int i = 0; i < m_height; i++) {
for (int j = 0; j < m_width; j++) {
printf("[%.5f]",fftData[i*m_height + j][1]);
}
printf("\n");
}
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)