使用不同的行、列大小和 FFTW 执行 2D dft 时出错

问题描述

我正在学习 FFTW,但我的代码在 fftw_plan_dft_2d 上停止了。 这是我的流程。

  1. 我将 2d 复数数组展平为 1d fftw_complex 数组。
  2. 将此数组移交给具有 fftw 功能的“FFT”。
  3. 当我使用 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 (将#修改为@)