This is a container library for linear filters. It consists of three different container structures:
TransferFunction | Transfer function polynomial. |
ZeroPoleGain | The Zero-Pole-Gain representation of the system. |
SignalChain | An arbitrary list of the former two. |
They all have the same interface, but there are differences in the performance of certain methods.
Every data member of these structures is public.
my_tf = new (
[ new TransferFunction(
[1,2,3,4,5,6], // numerator of the polynomial
[7,8,9] // denominator of the polynomial
,150 Hz // sampling frequency, optional
),
new ZeroPoleGain(
[1,1,0.5,-0.3], // zeros
[0,-0.5+0.3j,-0.5-0.3j, 0.95j, -0.95j], // poles
1 // gain
,150 Hz // sampling frequency, optional
)
])
Create Structure
my_tf.plotAmplitude(20/* number of points */)
// The Y axis is in logarithmic (dB) scale.
Amplitude Plot
my_tf.plotPhase(20/* number of points */)
Phase Plot
my_tf.plotZerosPoles()
Pole-Zero Plot
my_tf.plotImpulseResponse(20/* number of points */)
Impulse Response
my_tf.plot() // plot in the native form
Plot
plot() has different behaviors in different representations. In the cases of TransferFunction or SignalChain, it plots the amplitude response. In the case of ZeroPoleGain, it plots the pole-zero diagram.
input = [! zeros(100,1), ones(100,1), zeros(100,1), ones(100,1) !]; // test signal
filtered = my_tf.filter(input);
chart().curve(input).curve(filtered)
Filter
// simplified implementation details of the system
my_tf.getImplementationDetails()
// amplitude response as an array
my_tf.amplitude(10 /* number of points */ )
// phase response as an array
my_tf.phase(10 /* number of points */ )
// complex gain as an array
my_tf.complexGain(10 /* number of points */ )
// impulse response as an array
my_tf.impulseResponse(10 /* number of samples */)
// transfer polynomial evaluated at a given point
my_tf.value(0.54)
// convert any structure to zero-pole-gain
my_tf.toZeroPoleGain()
// convert any structure to transfer polynomial
my_tf.toTransferFunction()
// convert the system to an array of second order IIR filters
my_tf.toSecondOrder()
toSecondOrder() returns a SignalChain structure. It is useful when trying to implement IIR filters and facing stability issues due to quantization.