#N canvas 18 0 998 724 10;
#X declare -lib iem_adaptfilt -lib iemlib -path iemlib -lib zexy -path zexy;
#N canvas 0 0 450 300 (subpatch) 0;
#X array 1_\$0-W 40 float 0;
#X coords 0 1 39 -1 200 140 1;
#X restore 59 527 graph;
#X msg 35 255 update \$1;
#X msg 112 265 beta \$1;
#X obj 448 36 tgl 15 0 empty empty empty 0 -6 0 8 #d8fcfc #000000 #000000 0 1;
#X obj 448 57 dsp;
#X floatatom 448 103 5 0 0 0 - - - 0;
#X floatatom 461 82 5 0 0 0 - - - 0;
#X obj 447 471 bng 15 150 20 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000;
#X obj 63 285 noise~;
#X obj 35 68 vradio 15 1 0 8 empty empty empty 0 -6 0 8 #d8fcfc #000000 #000000 0;
#N canvas 165 115 464 314 (subpatch) 0;
#X obj 76 61 inlet;
#X msg 32 163 0;
#X msg 63 159 1;
#X msg 97 158 2;
#X msg 132 156 4;
#X msg 159 157 8;
#X msg 191 162 16;
#X msg 219 164 32;
#X msg 248 165 64;
#X obj 76 84 sel 0 1 2 3 4 5 6 7;
#X obj 32 217 outlet;
#X connect 0 0 9 0;
#X connect 1 0 10 0;
#X connect 2 0 10 0;
#X connect 3 0 10 0;
#X connect 4 0 10 0;
#X connect 5 0 10 0;
#X connect 6 0 10 0;
#X connect 7 0 10 0;
#X connect 8 0 10 0;
#X connect 9 0 1 0;
#X connect 9 1 2 0;
#X connect 9 2 3 0;
#X connect 9 3 4 0;
#X connect 9 4 5 0;
#X connect 9 5 6 0;
#X connect 9 6 7 0;
#X connect 9 7 8 0;
#X restore 35 215 pd;
#X text 17 49 internal downsampling of update;
#X msg 70 347 gamma \$1;
#X text 85 373 input signal;
#X text 330 372 desired signal;
#N canvas 0 0 450 300 (subpatch) 0;
#X array \$0-IR 40 float 0;
#X coords 0 1 39 -1 200 140 1;
#X restore 235 33 graph;
#X obj 64 470 unsig~;
#X floatatom 64 496 9 0 0 0 - - - 0;
#X obj 150 470 unsig~;
#X floatatom 150 496 9 0 0 0 - - - 0;
#X text 421 372 d(n);
#X obj 787 293 loadbang;
#X text 697 442 (array-sizes have to be >= then FIR_size);
#X text 52 81 update every sample;
#X text 52 66 stop \, no update;
#X text 52 96 update every 2nd sample;
#X text 52 111 update every 4th sample;
#X text 52 126 update every 8th sample;
#X text 52 141 update every 16th sample;
#X text 52 156 update every 32nd sample;
#X text 52 171 update every 64th sample;
#N canvas 0 0 486 336 (subpatch) 0;
#X obj 48 46 inlet;
#X obj 205 47 inlet;
#X obj 92 84 loadbang;
#X obj 48 182 s \$0-IR;
#X msg 205 71 const 0;
#X msg 48 120 0 0 0 0 0 0 0.314287 0.8 0.75 0 0 0 0 -0.7 -0.65 0 0 0 0.157143 0.128572 0 0 -0.128572 -0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
#X connect 0 0 5 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 4 0 3 0;
#X connect 5 0 3 0;
#X restore 788 268 pd;
#X obj 801 250 bng 15 250 50 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000;
#X text 818 247 clear;
#X obj 788 231 bng 15 250 50 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000;
#X text 805 228 load;
#X text 850 237 IR;
#X text 14 405 filtered output signal;
#X text 334 404 error signal;
#X text 464 465 constrain;
#X text 464 475 coefficients;
#X msg 447 430 0;
#X obj 447 450 speedlim 100;
#X obj 105 422 cnv 8 1 1 empty empty * 0 7 0 14 #fcfcfc #000000 0;
#N canvas 0 0 478 328 (subpatch) 0;
#X obj 137 73 tgl 15 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000 0 1;
#X msg 137 115 39;
#X msg 92 190 \$1 39;
#X msg 136 53 1;
#X obj 137 92 metro 200;
#X obj 136 24 inlet;
#X obj 92 169 tabread 1_\$0-W;
#X obj 92 214 tabwrite 1_\$0-W;
#X msg 177 192 \$1 39;
#X msg 260 191 \$1 39;
#X obj 260 170 tabread 3_\$0-W;
#X obj 260 215 tabwrite 3_\$0-W;
#X obj 177 171 tabread 2_\$0-W;
#X obj 177 216 tabwrite 2_\$0-W;
#X connect 0 0 4 0;
#X connect 1 0 6 0;
#X connect 1 0 12 0;
#X connect 1 0 10 0;
#X connect 2 0 7 0;
#X connect 3 0 0 0;
#X connect 4 0 1 0;
#X connect 5 0 3 0;
#X connect 6 0 2 0;
#X connect 8 0 13 0;
#X connect 9 0 11 0;
#X connect 10 0 9 0;
#X connect 12 0 8 0;
#X restore 787 314 pd;
#X text 812 320 update of W;
#X text 811 309 graphical;
#X text 106 327 minimum input value;
#X msg 112 228 0.1;
#X msg 70 309 1e-05;
#X text 165 266 beta [0 .. 2];
#X text 126 346 gamma [0 .. 1];
#X obj 537 57 cnv 15 68 17 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#N canvas 0 0 499 295 FORMULAS 0;
#X obj 167 52 cnv 15 150 40 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X obj 167 205 cnv 15 260 30 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X text 8 135 normalized learn rate:;
#X text 119 73 error:;
#X text 116 55 output:;
#X text 7 210 coefficient iteration:;
#X text 176 213 W(k+1 \, i) = leakage*W(k \, i) + µ(n)* e(n)* x(n);
#X text 173 54 y(n) = Wᴴ * x(n);
#X text 173 72 e(n) = d(n) - Wᴴ * x(n);
#X obj 167 123 cnv 15 270 50 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X text 280 129 beta;
#X text 174 135 µ(n) =;
#X text 223 145 ∑ x[n-i]² + gamma²*blocksize;
#X text 223 130 ____________________________;
#X restore 537 57 pd FORMULAS;
#X obj 112 248 cnv 14 31 14 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X floatatom 112 248 5 0 2 0 - - - 0;
#X text 148 247 learn-rate;
#X obj 70 329 cnv 14 31 14 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X floatatom 70 329 5 0 1 0 - - - 0;
#X floatatom 35 236 5 0 0 0 - - - 0;
#X text 536 39 Normalized Least Mean Square (linear adaptive FIR-filter);
#N canvas 0 0 450 300 (subpatch) 0;
#X array 2_\$0-W 40 float 0;
#X coords 0 1 39 -1 200 140 1;
#X restore 309 527 graph;
#N canvas 0 0 450 300 (subpatch) 0;
#X array 3_\$0-W 40 float 0;
#X coords 0 1 39 -1 200 140 1;
#X restore 559 527 graph;
#X obj 239 471 unsig~;
#X floatatom 239 497 9 0 0 0 - - - 0;
#X obj 329 469 unsig~;
#X floatatom 329 495 9 0 0 0 - - - 0;
#X obj 263 243 cnv 14 31 14 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X floatatom 263 243 5 0 10000 0 - - - 0;
#X msg 263 261 kappa \$1;
#X msg 263 223 1;
#X obj 418 301 FIR~ \$0-IR 32;
#X obj 181 301 z~ 2;
#X obj 299 301 z~ 4;
#X text 36 373 x1(n);
#X text 267 373 x3(n);
#X text 186 372 x2(n);
#X text 34 418 y1(n) = 1_W * x1(n);
#X obj 191 437 cnv 8 1 1 empty empty * 0 7 0 14 #fcfcfc #000000 0;
#X obj 281 411 cnv 8 1 1 empty empty * 0 7 0 14 #fcfcfc #000000 0;
#X text 120 433 y2(n) = 2_W * x2(n);
#X text 210 407 y3(n) = 3_W * x3(n);
#X obj 370 433 cnv 8 1 1 empty empty * 0 7 0 14 #fcfcfc #000000 0;
#X text 336 429 - 1_W * x1(n);
#X text 307 418 e(n) = d(n);
#X obj 370 443 cnv 8 1 1 empty empty * 0 7 0 14 #fcfcfc #000000 0;
#X text 336 439 - 2_W * x2(n);
#X obj 370 453 cnv 8 1 1 empty empty * 0 7 0 14 #fcfcfc #000000 0;
#X text 336 449 - 3_W * x3(n);
#X text 536 28 Multi Channel Constraint;
#X text 482 240 minimum input value;
#X obj 446 242 cnv 14 31 14 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X floatatom 446 242 5 0 10000 0 - - - 0;
#X msg 446 222 1;
#X msg 446 260 leakage \$1;
#X text 526 264 leakage [0 .. 1];
#X text 530 173 (C) 2005 \, m.noisternig & t.musil \, IEM \, Graz \, Austria;
#X text 558 186 [noisternig \, musil]_AT_iem.at;
#X text 535 79 1.arg: <float> number of channels n;
#X text 535 92 2.arg: <float> number of order of FIR-filter;
#X text 535 106 3.arg: <float> learn-rate = beta;
#X text 328 260 kappa;
#X text 299 241 constraint;
#X text 536 131 5.arg: <float> constraint = kappa;
#X text 535 118 4.arg: <float> regularization parameter = gamma;
#X text 536 143 6.arg: <float> leakage;
#X text 536 156 7.arg: <symbol> table-name of W;
#X obj 810 617 declare -lib iem_adaptfilt -lib iemlib -path iemlib -lib zexy -path zexy, f 27;
#X obj 63 390 n_CLNLMS~ 3 32 0.1 1e-05 1 0.95 \$0-W, f 60;
#X connect 1 0 108 0;
#X connect 2 0 108 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 4 1 6 0;
#X connect 8 0 71 0;
#X connect 8 0 72 0;
#X connect 8 0 73 0;
#X connect 8 0 108 0;
#X connect 9 0 10 0;
#X connect 10 0 59 0;
#X connect 12 0 108 0;
#X connect 16 0 17 0;
#X connect 18 0 19 0;
#X connect 21 0 44 0;
#X connect 32 0 31 1;
#X connect 34 0 31 0;
#X connect 41 0 42 0;
#X connect 42 0 7 0;
#X connect 48 0 55 0;
#X connect 49 0 58 0;
#X connect 55 0 2 0;
#X connect 58 0 12 0;
#X connect 59 0 1 0;
#X connect 63 0 64 0;
#X connect 65 0 66 0;
#X connect 68 0 69 0;
#X connect 69 0 108 0;
#X connect 70 0 68 0;
#X connect 71 0 108 3;
#X connect 72 0 108 1;
#X connect 73 0 108 2;
#X connect 92 0 94 0;
#X connect 93 0 92 0;
#X connect 94 0 108 0;
#X connect 108 0 16 0;
#X connect 108 1 18 0;
#X connect 108 2 63 0;
#X connect 108 3 65 0;
#X connect 108 4 41 0;
