FFTW对实际数据序列的影响

时间:2014-06-10 11:36:57

标签: c signal-processing fftw

我正在读一个原始的声音文件,我正试图在它上面运行fft,目的是让PSD结束,但我在开始时我得到一个错误,我可以'理解,希望在这里得到一些帮助,代码是:

#include <stdio.h>
#include <fftw3.h>

int main(){
    char* fileName = "sound.raw";
    FILE* inp = NULL;
double* data = NULL;
int index = 0;
fftw_plan  plan;
fftw_complex* out; 
double r,i;
int N = 8192;

//Allocating the memory for the input data 

data = (double*) fftw_malloc(sizeof(double)*N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N);
plan = fftw_plan_dft_r2c_1d(N,data,out,FFTW_FORWARD);
// opening the file for reading 
inp = fopen(fileName,"rb");
if(inp== NULL){
    printf(" couldn't open the file  \n ");
    return -1;
}
while(!feof(inp)){
    printf( " index  %d",index); // just  get where the program crashs 
        if(index < N){
            fread(&data[index],sizeof(short),1,inp); 
            index = index +1;
        }
        else{
            index = 0;
            fftw_execute(plan);
            printf("New Plan \n");
            printf(" Real \t imag \t Magn \t  \n");
            for(index = 0 ; index<N; index++){
                r=out[index][0];
                i =out[index][1];
                printf("%lf \t %lf \t %lf \t \n",r,i,index);
            }
            index = 0 ;
        }
}
return 0 ; 
}

index = 8106并且我确定该文件包含更多数据时程序崩溃。我得到的错误是:

Segmentation fault (core dumped )

我知道错误与指针试图访问不允许的内存有关,我的问题是如何解决这个问题!

更新

我再次检查了程序,错误完全一致:

fftw_execute(plan) ; 

我希望能帮到更多!

提前谢谢!

1 个答案:

答案 0 :(得分:1)

找到它,错误出现在计划功能的参数中:

plan = fftw_plan_dft_r2c_1d(N,data,out,FFTW_FORWARD); //

应该是

plan = fftw_plan_dft_r2c_1d(N,data,out,FFTW_MEASURE);

plan = fftw_plan_dft_r2c_1d(N,data,out,FFTW_ESTIMATE);

因为转换的方向隐含在函数的名称中!

无论如何,谢谢!