2014-06-20 344 views
0

此刻我正試圖實現FIR低通濾波器。 FIR係數在MATLAB中計算。現在我需要在C++中實現FIR算法。C++中的FIR濾波器

予定義的類用作過濾器和作爲FIR的一個函數:

double * Filter::FIR (double x[]) 
{ 

    unsigned int jj; 
    unsigned int pp; 
    double sum; 


    pp = 0; 

    // input values 
    memcpy(&_x_sign, &x, sizeof(x)); 


    for (pp = 0; pp < order+1; pp++) 

    { 
     sum = 0 ; 
     for (jj = 0; jj < order+1; jj++) 
     { 
      sum += _b[jj] * _x_sign[pp - jj]; 
     } 

     _y_sign[pp] = sum; 

    } 

    return (_y_sign); 
} 

的_x_sign作爲數組確實在循環時不工作(PP - JJ)是負數。 如何修改我的FIR濾波器?

回答

2

我看到你正在嘗試做一個卷積,如果你想通過索引數組外部來避免段錯誤,你需要改變表達式。 例如可以使用代替的

_x_sign[pp -jj] 
pp>jj? _x_sign[pp - jj] : 0 

在這種情況下,你避免存儲器外部索引通過使用三元運算符(如果JJ比PP的_x_sign更大[PP - JJ]將不會被評估)

你也可以改變你的極限與

for (jj = 0; jj < order+1&& jj< pp+1; jj++) 
    { 
     sum += _b[jj] * _x_sign[pp - jj]; 
    } 

第二種解決方案是更好,因爲你避免犯一個更大的循環時,也沒用。

+0

非常感謝:) – user3506463