FFT2D使用mex

时间:2017-04-09 21:40:34

标签: c++ matlab fft mex fftw

我尝试使用以下代码在2D中计算fft,但是,结果不正确或者Maltab显示错误消息并自动关闭。我找不到错误在哪里。请你帮助我好吗 ? 这是代码:

<span style="color:red">Hea</span>
<span style="color:blue">dli</span>
<span style="color:green">ne</span> 

N.B:我不认为这是重复的,因为在我的情况下,Matlab会自动崩溃并关闭。

修改 考虑到您的评论,以下是代码的新版本:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "C:\exemple\fftw3.h"
#include <mex.h>


void DivideArray(double *Data, int NumEl, double Divisor)
{
  int n;
  for(n = 0; n < NumEl; n++)
    Data[n] /= Divisor;
}


void FFT2DIntervaled(int M ,int N, double *X, double *Y, int Sign)
{
  fftw_plan Plan;
  if(!(Plan = fftw_plan_dft_2d(M, N, (fftw_complex *)X, (fftw_complex *)Y, Sign, FFTW_ESTIMATE)))
    mexErrMsgTxt("FFTW3 failed to create plan");
  fftw_execute(Plan);
  fftw_destroy_plan(Plan);
  if(Sign == 1)
    DivideArray(Y, 2*M*N, M*N);
}

void mexFunction(int nlhs,mxArray *plhs[] ,int nrhs ,const mxArray *prhs[])
{
  plhs[0] = mxCreateDoubleMatrix(mxGetM(X_IN),mxGetN(X_IN), mxCOMPLEX);
  FFT2DIntervaled(mxGetM(prhs[0]),mxGetN(prhs[0]),(double*)mxGetPr(prhs[0]),mxGetPr(plhs[0]),1);
}

它仍然无法正常工作。你能帮我找到错误吗?

0 个答案:

没有答案