# IIRFilter Class

The IIRFilter class is the 1st order IIR low-pass filter. Implements the difference equation: More...

## Public Functions

 IIRFilter() double Calculate(double x) double Getb0() void Init(double b0) void Setb0(double newb0) void SetF3dB(double f3dB, double frequency) void SetValue(double newValue) double Value()

## Reimplemented Public Functions

 virtual void Create(const char *shortName, CDPBaseObject *pParent) virtual std::string GetNodeTypeName() const override

## Detailed Description

The IIRFilter class is the 1st order IIR low-pass filter. Implements the difference equation:

y[n] = b0 * x[n] + (1-b0) * y[n-1];

or in C++ form:

y_n = b0 * x + (1.0 - b0) * y_n1;
or
y_n += b0*(x - y_n)

#### Selecting a suitable cut-off frequency

The b0 parameter for the filter may either be set directly with Setb0(), or the cut-off frequency (-3dB frequency) may be set using the function SetF3dB().

SetF3dB() sets a new b0 using the following formula:

b = 2 * PI * f3dB / fs

This relationship between b and the cut-off frequency is valid only for b << 1.

It is recommended to use SetF3db(), as this will prevent the filter characteristic from changing if the sampling freqency is changed.

Note: The stability requirement for the first order filter is that b>0 and b<=1. This leads to the following requirement on f3db:

f3db < fs / (2 * PI)

or, expressed as digital frequency F = f/Fs:

F3db < 1 / (2 * PI)'


## Member Function Documentation

### IIRFilter::IIRFilter()

Constructor. Initializes members to safe values.

### double IIRFilter::Calculate(doublex)

Calculates filter output from x. Call this function periodically at a fixed sample interval, exacly once each period. Returns output value from filter.

Note: To read output from filter more than once each period, use Value() method to prevent a new output from being calculated again.

### [virtual] void IIRFilter::Create(const char *shortName, CDPBaseObject *pParent)

Reimplemented from CDPBaseObject::Create().

Creates the IIRFilter with shortName and pParent object.

### double IIRFilter::Getb0()

Returns filter constant b0 value.

### [override virtual] std::string IIRFilter::GetNodeTypeName() const

Reimplemented from ICDPNode::GetNodeTypeName().

Returns "IIRFilter".

### void IIRFilter::Init(doubleb0)

Initializes the filter and sets filter b0. This function can also be used to reset the filter memory and output. For a frequency-invariant filter,

### void IIRFilter::Setb0(doublenewb0)

Sets new filter constant b0 from newb0

### void IIRFilter::SetF3dB(doublef3dB, doublefrequency)

Sets new filter constant b0 by specifying cut-off frequency f3db and frequency (both in Hz).

### void IIRFilter::SetValue(doublenewValue)

Sets the output directly from newValue

### double IIRFilter::Value()

Returns current output value.