2015-06-20 107 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在您的本地功能。讓這個由函數調用者完成。