【发布时间】:2014-08-26 15:14:45
【问题描述】:
我正在尝试使用 FFT 库对数据进行 FFT。这里也附上代码。
问题是当我尝试执行大小为 NX> 2048(例如 4096)的 FFT 时,它给了我错误 0xC00000FD:堆栈溢出。 我看到人们发布了大约 2^12 和 2^15 点 DFT 的 FFT 的结果。我的问题是我应该如何计算 N>2048 的 N 点 FFT。
我使用的信号仅用于测试代码。实际问题中的信号将实时从硬件接收。
我正在使用 Visual Studio 2010。系统规格(Core i7,RAM:16GB)
// Raw Data Generation
#define TABLE_SIZE 1000
#define TWO_PI (3.14159 * 2.0)
#define CYCLES 20
#define NUMBER_OF_SAMPLES (TABLE_SIZE*CYCLES)
// FFT Values
#define NX 2048// NX-point DFT
// Sine Generator Function - Real Samples
void sin_func(double *sample_ptr)
{
double phaseIncrement = TWO_PI/TABLE_SIZE;
double currentPhase = 0.0;
int i;
for (i = 0; i < CYCLES*TABLE_SIZE; i ++){
*sample_ptr = sin(currentPhase);
sample_ptr = sample_ptr + 1;
currentPhase += phaseIncrement;}
}
void main()
{
const int ARRAY_SIZE = NUMBER_OF_SAMPLES*sizeof(double);
const int FFT_OUT_SIZE = sizeof(fftw_complex)*(NX/2+1);
// Initialization
double rawdata_in[NUMBER_OF_SAMPLES];
fftw_complex fft_out[FFT_OUT_SIZE]; // Sizeof(fftw_complex) = 16
fftw_complex temp[FFT_OUT_SIZE];
double datacheck_out[NUMBER_OF_SAMPLES];
// Creating fft plan
fftw_plan plan;
plan = fftw_plan_dft_r2c_1d(NX, rawdata_in , fft_out, FFTW_MEASURE);
// Initializing Input Array
sin_func(&rawdata_in[0]);
fftw_execute(plan);
// Doing Inverse Transform
fftw_plan plan2;
plan2 = fftw_plan_dft_c2r_1d(NX, temp, datacheck_out, NULL);
memcpy(temp, fft_out, sizeof(fftw_complex)*FFT_OUT_SIZE);
fftw_execute(plan2);
fftw_destroy_plan(plan2);
fftw_destroy_plan(plan);
}
【问题讨论】:
-
您是否尝试过增加堆栈大小?
标签: c++ c memory-management out-of-memory fft