2011-12-14 147 views
2

我想在Java中實現Java的Matlab函數「filter」。在Java中的Matlab濾波器

Y = FILTER(B,A,X) 

它說:過濾器是執行標準差分方程的「置直接形式II」:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) 
         - a(2)*y(n-1) - ... - a(na+1)*y(n-na) 

有人可以幫我與我真的不明白上面式。有人可以使用這些參數向我展示上述公式的示例:

例如, filter([1 -1],[1 -hpf_pole],S')

其中hpf_pole = 0.98

S =

-3.26368263029463 0.598694437762099 0.925551549649237 
-3.15561902947223 0.00249461257261130 2.35703360665011 
-2.89398994439634 1.98384531062216 3.67478741307554 
+0

還有就是幫助頁面上的過濾器的示意圖。 – 2011-12-14 12:58:59

回答

0

OK我實現了在Java中的東西,看起來是做的工作:

public void filter(){ 
     double hpfPole = 0.98; 
     double[] b = new double[]{1,-1}; 
     double[] a = new double[]{1, -hpfPole}; 
     double[] x = new double[]{-7.3416, -7.3416, -7.3416}; 
     double[] y = new double[x.length]; 

     for (int n = 0; n < y.length; n++) { 
      if(n-1 < 0){ 
       y[n] = b[0]*x[n]; 
      }else{ 
       y[n]= b[0]*x[n]+b[1]*x[n-1]-a[1]*y[n-1]; 
      } 

     } 


    } 
Input: -7.3416, -7.3416, -7.3416 
Output: -7.3416, -7.194768, -7.05087264