#N canvas -10 52 610 611 12;
#X obj 54 90 osc~ 100;
#X msg 62 117 clear;
#X text 12 369 The transfer function is H(Z) = 1/(1 - aZ^-1).;
#X text 115 116 <-- clear internal state to zero;
#N canvas 168 90 498 357 test 0;
#X obj 76 78 osc~;
#X floatatom 76 55 5 0 0 0 - - -;
#X obj 18 287 env~ 16384;
#X floatatom 18 311 5 0 0 0 - - -;
#X obj 104 107 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 76 105 *~;
#X msg 85 132 set 1;
#X floatatom 350 112 4 -1000 1000 0 - - -;
#X obj 215 315 dac~;
#X obj 215 279 *~;
#X text 80 18 Stuff to test it:;
#X obj 241 106 cos~;
#X obj 77 227 cpole~;
#X obj 261 65 phasor~;
#X floatatom 261 44 5 0 0 0 - - -;
#X floatatom 132 55 5 0 0 0 - - -;
#X obj 160 107 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 132 105 *~;
#X obj 132 78 phasor~;
#X floatatom 324 42 5 0 0 0 - - -;
#X obj 324 65 / 1000;
#X obj 274 107 -~ 0.25;
#X obj 274 129 cos~;
#X obj 350 131 / 1000;
#X obj 240 157 *~;
#X obj 274 157 *~;
#X obj 94 287 env~ 16384;
#X floatatom 94 311 5 0 0 0 - - -;
#X obj 247 275 dbtorms;
#X floatatom 248 255 5 0 0 0 - - -;
#X connect 0 0 5 0;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
#X connect 4 0 5 1;
#X connect 5 0 12 0;
#X connect 6 0 12 0;
#X connect 7 0 23 0;
#X connect 9 0 8 0;
#X connect 9 0 8 1;
#X connect 11 0 24 0;
#X connect 12 0 2 0;
#X connect 12 0 9 0;
#X connect 12 1 26 0;
#X connect 13 0 21 0;
#X connect 13 0 11 0;
#X connect 14 0 13 0;
#X connect 15 0 18 0;
#X connect 16 0 17 1;
#X connect 17 0 12 0;
#X connect 18 0 17 0;
#X connect 19 0 20 0;
#X connect 20 0 13 1;
#X connect 21 0 22 0;
#X connect 22 0 25 0;
#X connect 23 0 25 1;
#X connect 23 0 24 1;
#X connect 24 0 12 2;
#X connect 25 0 12 3;
#X connect 26 0 27 0;
#X connect 28 0 9 1;
#X connect 29 0 28 0;
#X restore 459 483 pd test;
#X text 10 387 (Pd also provides a suite of user-friendly filters.
This and other raw filters are provided for situations which the user-friendly
ones can't handle. See Chapter 8 of http://crca.ucsd.edu/~msp/techniques
for an introduction to the necessary theory.);
#X obj 52 7 cpole~;
#X text 114 7 complex one-pole (recursive) filter \, raw;
#X text 132 93 <-- signal to filter (real part);
#X text 130 173 <-- signal to filter (imaginary part);
#X obj 84 172 sig~;
#X obj 115 197 sig~;
#X text 162 199 <-- filter coefficient (real part);
#X obj 145 219 sig~;
#X obj 53 244 cpole~ 0.9 0.4;
#X text 159 246 <-- creation arguments initialize filter;
#X text 187 262 coefficient (real and imaginary part);
#X text 14 278 The action of cpole~ is:;
#X text 11 320 where y[n] is the output \, x[n] the input \, and a[n]
the filter coefficient (all complex numbers). The filter is unstable
if/when |a[n]|>1.;
#X text 12 27 Cpole~ filters a complex audio signal (first two inlets)
via a one-pole filter \, whose coefficients are controlled by creation
arguments or by another complex audio signal (remaining two inlets).
;
#X text 171 143 <-- set internal state (real&imaginary parts);
#X msg 64 143 set 0.6 0.8;
#X text 190 221 <-- filter coefficient (imaginary part);
#X text 73 300 y[n] = x[n] + a[n] * y[n-1];
#X obj 97 566 lop~;
#X text 11 566 see also:;
#X obj 96 497 rzero~;
#X obj 36 519 cpole~;
#X obj 36 497 rpole~;
#X obj 156 497 rzero_rev~;
#X obj 96 519 czero~;
#X obj 156 519 czero_rev~;
#X text 255 497 real;
#X text 254 520 complex;
#X text 33 481 1-pole;
#X text 93 481 1-zero;
#X text 143 481 1-zero \, reversed;
#X text 58 466 summary of raw filters:;
#X text 137 566 etc.: user-friendly filters;
#X text 343 583 updated for Pd version 0.42;
#X connect 0 0 14 0;
#X connect 1 0 14 0;
#X connect 10 0 14 1;
#X connect 11 0 14 2;
#X connect 13 0 14 3;
#X connect 21 0 14 0;
