/* For Copyright and License see LICENSE.txt and COPYING.txt in the root directory */
package com.nerdscentral.audio.pitch.algorithm;
public class SFInLineIIRFilter implements Cloneable
{
final double[] xv;
final double[] yv;
final double gain;
final int npoles;
final SFFilterGenerator.NPoleFilterDef fd;
public SFInLineIIRFilter(SFFilterGenerator.NPoleFilterDef fdIn, double gainIn)
{
fd = fdIn;
xv = new double[fd.getPoles() + 1];
yv = new double[fd.getPoles() + 1];
this.gain = gainIn;
npoles = fd.getPoles();
}
public double filterSample(double datum)
{
for (int i = 0; i < fd.getPoles(); ++i)
{
xv[i] = xv[i + 1];
yv[i] = yv[i + 1];
}
xv[fd.getPoles()] = datum / gain;
double q = 0;
for (int index = 0; index < xv.length; ++index)
{
q += xv[index] * fd.getXCeof(index);
if (index < fd.getPoles())
{
q += yv[index] * fd.getYCeof(index);
}
}
yv[fd.getPoles()] = q;
return q;
}
public SFInLineIIRFilter duplicate()
{
return new SFInLineIIRFilter(fd, gain);
}
}