2015-06-20 108 views
-1

我想为FIR滤波器做一个C函数,它有两个输入数组和一个输出数组。 两个输入数组是常数,我想将它们用于滤波器输出的计算,并计算之后将其删除,只是存储的功能,输出数组,这是我的代码,但它不工作如何在c函数中使用malloc?

#include <stdlib.h> 
float * filter(float *PATIENTSIGNAL,float *FILTERCOEF, int lengthofpatient , int lengthoffilter){ 
    static float FIROUT[8000]; 
    int i,j; 
    float temp=0; 
    float* SIGNAL; 
    float* COEF; 
    SIGNAL = malloc(lengthofpatient *sizeof(float)); 
    COEF = malloc(lengthoffilter*sizeof(float)); 
    } 
    for (j = 0; j <= lengthofpatient; j++){ 
     temp = SIGNAL[j] * COEF[0]; 
     for (i = 1; i <= lengthoffilter; i++){ 
      if ((j - i) >= 0){ 
       temp += SIGNAL[j - i] * COEF[i]; 
      } 
      FIROUT[j] = temp; 
     } 
    } 
    free(SIGNAL); 
    free(COEF); 
    free(PATIENTSIGNAL); 
    return FIROUT; 
} 
+1

当您使用临时变量时,SIGNAL和COEF被分配但未初始化。 –

+1

'for(j = 0; j <= lengthofpatient; j ++)'这将循环一次以上。 'i'循环也是一样。 – pmg

+1

不应该在'COEF = malloc(lengthoffilter * sizeof(float));'后面去掉'}';'因为它似乎终止了你的函数声明? – Cyclonecode

回答

1

有有几个问题,在你的代码,

  1. 不必要}线COEF = malloc(lengthoffilter*sizeof(float));后。

  2. for (j = 0; j <= lengthofpatient; j++)。这将循环超过要求。 i循环也是一样。 pmg在评论中提到它。

  3. temp += SIGNAL[j - i] * COEF[i];不会给你想要的结果,因为你没有初始化SIGNALCOEF

  4. 什么是float *PATIENTSIGNAL,float *FILTERCOEF在函数参数中的用途?

野生猜测,我认为你需要这两个线路初始化SIGNAL和/或COEF

memccpy(SIGNAL, PATIENTSIGNAL, lengthofpatient); 
memccpy(COEF, FILTERCOEF, lengthoffilter); 

不要freePATIENTSIGNAL在您的本地功能。让这个由函数调用者完成。