Skip to content

Bilinear (First Order IIR) Filter

Description

Filters its inputs by a first order IIR filter controlled by a set of three coefficients

(make-controller 'bilinear-filter ... )

Lisp Syntax and Default Values

The 'bilinear-filter controller can be created using the following Lisp syntax:

(make-controller 'bilinear-filter dimension  period coef_controller input_controller)

Parameters

The 'bilinear-filter controller takes four arguments:

  • dimension: number of dimensions of the input and output controllers.
  • period: the time between the updates of the controller. If zero is given then it updates every sample.
  • coef_controller: a three-dimensional controller specifying the three bilinear filter coefficients.
  • input_controller: filter input (a controller).

The number of dimensions should be the same as that of the input controller.

The coefficient controller should have 3 dimensions which represent the a0, a1 and b1 coefficients.

Discussion

This filter implements a general first-order (one-pole one-zero) filter which can be used for a variety of purposes, including smoothing out envelopes, and filtering sound-file, signal or other controllers. The following example is shown in one of the graphs (with a 1 Hz cutoff) in the above image:

(setq sp (get-info 'sample-period))
(setq my-env (make-controller 'envelope 1 
         (list '(0 0.0) '(0.1 0) (list (+ 0.1 sp) 1) '(1.5 1) (list (+ 1.5 sp) 0)) ))
(setq cutoff 1)
(setq val (sin (* cutoff 2 pi sp)))
(setq my-coef-ctl (const (list val 0 (- val 1))))
(setq my-filtered-env (make-controller 'bilinear-filter 1 my-coef-ctl my-env))
You should probably consider using it or the biquadratic-filter, instead of the older filtering functions. However, you will need to generate your own sets of coefficients from higher level parameters such as center/cutoff frequency, etc....

Options

There are no special options for this controller.