C++ 将双精度*转换为双精度(*)时出错
以下代码应使用fftw3库返回正弦信号的fft:C++ 将双精度*转换为双精度(*)时出错,c++,fftw,C++,Fftw,以下代码应使用fftw3库返回正弦信号的fft: # include <stdlib.h> # include <stdio.h> # include <time.h> # include <fftw3.h> # include <iostream> # include <cmath> using namespace std; int main (void) { int i; const int N=256;
# include <stdlib.h>
# include <stdio.h>
# include <time.h>
# include <fftw3.h>
# include <iostream>
# include <cmath>
using namespace std;
int main (void)
{
int i;
const int N=256;
double Fs=1000;//sampling frequency
double T=1/Fs;//sample time
double f=500;//frequency
double *in;
fftw_complex *out;
double t[N-1];//time vector
fftw_plan plan_forward;
in = (double*) fftw_malloc( sizeof( double ) * N );
out = (fftw_complex*) fftw_malloc( sizeof( fftw_complex ) * N );
for (int i=0; i<N; i++)
{
t[i] = i*T;
in[i] = 0.7 *sin(2*M_PI*f*t[i]);// generate sine waveform
}
plan_forward = fftw_plan_dft_1d ( N, in, out, FFTW_FORWARD, FFTW_ESTIMATE );
fftw_execute ( plan_forward );
printf ( "\n" );
printf ( " Output FFT Coefficients:\n" );
printf ( "\n" );
for ( i = 0; i < N; i++ )
{
printf ( " %3d %12f %12f\n", i, out[i][0], out[i][1] );
}
fftw_destroy_plan ( plan_forward );
fftw_free ( in );
fftw_free ( out );
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
内部主(空)
{
int i;
常数int N=256;
双Fs=1000;//采样频率
双T=1/Fs;//采样时间
双f=500;//频率
双*英寸;
fftw_复合体*out;
双t[N-1];//时间向量
fftw_计划向前;
in=(双*)fftw_umalloc(sizeof(双)*N);
out=(fftw_复合体*)fftw_malloc(sizeof(fftw_复合体)*N);
对于(int i=0;iin
变量中的也需要是fftw\u complex*
,而不是double*
。fftw的复杂数据类型恰好是double[2]
,因此错误消息:编译器需要指向double[2]的指针
,但是您正在传递一个指向double
的指针,我所要做的就是将函数fftw\u plan\u dft\u 1d
更改为fftw\u plan\u dft\u r2c\u 1d
行,以及您试图调用的函数的完整签名?无法将“double*”转换为“double()[2]'对于参数'2'到'fftw_plan_fftw_plan_dft_1d(int,double()[2],double()[2],int,unsigned int)'plan_forward=fftw_plan_dft_1d(N,in,out,fftw_forward,fftw_估计值);对于此函数,显示了正确的声明。我更改了它,但现在得到的错误是:错误:在[I]=0.7sin(2*M_PIf*t[I]中,将'double'赋值为'fftw_complex{aka double[2]}'时,类型不兼容;//生成正弦波我正在尝试将FFT应用于真实的1D数据。那么为什么in变量也需要是fftw_复数*?请继续读取。该函数用于真实数据。@Sven,我现在不再劫持您的答案:-)