samer@0: /* samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.units; samer@0: import samer.core.*; samer@0: import samer.maths.*; samer@0: import samer.tools.*; samer@0: import java.util.*; samer@0: samer@0: public class FIRFilter implements Filter samer@0: { samer@0: int N; // order of filter samer@0: double A[]; // coefficients samer@0: double u[]; // circular buffer of previous values samer@0: int k; // current position in u buffer samer@0: samer@0: public FIRFilter( int n) samer@0: { samer@0: N=n; samer@0: u=new double[n]; samer@0: A=new double[n]; samer@0: reset(); samer@0: } samer@0: samer@0: public FIRFilter( double [] A) samer@0: { samer@0: N=A.length; samer@0: u=new double[N]; samer@0: this.A=A; samer@0: reset(); samer@0: } samer@0: samer@0: public void dispose() {} samer@0: public void reset() { Mathx.zero(u); k=0; } samer@0: samer@0: /** FIR filter using array of filter coefficients */ samer@0: public final double filter( double z) samer@0: { samer@0: if (k==0) k=N-1; else k--; samer@0: double y=0; samer@0: u[k]=z; samer@0: samer@0: int i=0, j; samer@0: for (j=k; j