无法在无限循环中运行GPU_FFT

时间:2017-07-25 07:18:51

标签: c raspberry-pi gpu fft raspbian

我目前正在尝试使用Pi提供的GPU_FFT库进行FFT。我成功地对数据进行了FFT。但是,每当我在while(1)循环中尝试这个时,它会以某种方式进行FFT 1023次并在第1024次停止。我已经读到过面对exact same issue on Raspberry Pi official forum的人,但无法弄清楚如何修复我的。

以下代码是计算FFT的函数

    void computeFFT(float *Input,float *Output){

    struct GPU_FFT_COMPLEX *base;
    struct GPU_FFT *fft;
    int i;

    int ret = gpu_fft_prepare(mb,log2_N,GPU_FFT_FWD,1,&fft);
    base = fft->in;

    for(i=0;i<N;i++)
        base[i].re =  Input[i]; base[i].im =0.0;

    gpu_fft_execute(fft);
    base = fft->out;

    for(i=0;i<N;i++)
        Output[i]= base[i].re;

    gpu_fft_release(fft);
}

这是我的while(1)循环

    while (1){
    if (mb != 0)
        mb = mbox_open();

    adc1Value = a2d(adc1Channel);
    voltage1 = ((2.5/4096) * adc1Value);
    QueueGet(Queue);
    QueuePut(voltage1);

    OutData = computeFFT(Queue,OutData);
    printf("%f\n",OutData[0]); // Printing out signal value on 0Hz
}
mbox_close(mb);
free(OutData);
return 0;

我确实认为问题与我使用mbox_open和关闭函数的位置有关。

我尝试过的事情

  • 使用rand()生成随机数将队列更改为新数组。
  • 按建议更改mbox功能的位置。
  • 禁用a2d功能
  • 将FFT长度更改为512,2048,4096。

然而,没有一个是解决方案。

0 个答案:

没有答案