/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sim.app.socialsystem;
import sim.util.MutableDouble3D;
import sim.util.MutableInt3D;
/**
*
* @author epokh
*/
public class LowPassFilter {
double beta;
private MutableDouble3D buffer0;
private MutableDouble3D buffer1;
public LowPassFilter(double b)
{
buffer0=new MutableDouble3D(0.0, 0.0, 0.0);
buffer1=new MutableDouble3D(0.0, 0.0, 0.0);
beta=b;
}
//update the 3 filters in parallel very useful!
public void updateFilter(MutableInt3D input)
{
//implements the equation
// x(t)=b*x(t-1)+(1-b)*input
// a first order differential equation
buffer0.multiplyIn(beta);
MutableDouble3D dinput=new MutableDouble3D(input);
dinput.multiplyIn(1-beta);
buffer1.add(buffer0, dinput);
//buffer[1]=beta*(buffer[0])+(1-beta)*input;
buffer0.setTo(buffer1);
//buffer[0]=buffer[1];
//return buffer[1];
}
//get the output from every signal
public double getOutput(int index)
{
switch(index)
{
case DecisionMaker.B_AGENT:
return buffer1.x;
case DecisionMaker.B_FOOD:
return buffer1.y;
case DecisionMaker.B_AGENTFOOD:
return buffer1.z;
default:
return buffer1.x;
}
}
}