2011-12-14 113 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