aboutsummaryrefslogtreecommitdiff
path: root/adaptive/examples/04.misadjustment.pd
diff options
context:
space:
mode:
Diffstat (limited to 'adaptive/examples/04.misadjustment.pd')
-rwxr-xr-xadaptive/examples/04.misadjustment.pd475
1 files changed, 475 insertions, 0 deletions
diff --git a/adaptive/examples/04.misadjustment.pd b/adaptive/examples/04.misadjustment.pd
new file mode 100755
index 0000000..8a963dd
--- /dev/null
+++ b/adaptive/examples/04.misadjustment.pd
@@ -0,0 +1,475 @@
+#N canvas 0 276 944 596 10;
+#N canvas 10 567 633 314 unknown_system~ 0;
+#X obj 26 26 inlet~;
+#X obj 26 268 outlet~;
+#X obj 26 113 fexpr~ $f2*$x1 + $f3*$x1[-1] + $f4*$x1[-2];
+#X obj 122 80 r a0;
+#X obj 218 82 r a1;
+#X obj 315 83 r a2;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 2;
+#X connect 5 0 2 3;
+#X restore 172 208 pd unknown_system~;
+#X obj 44 433 tgl 20 0 audio_io empty empty 0 -6 0 8 -262144 -1 -1
+0 1;
+#X text 69 435 <- Audio IO;
+#N canvas 253 248 419 287 adaptive_filter~ 0;
+#X obj 37 35 inlet~;
+#X text 22 15 input signal;
+#X obj 143 35 inlet~;
+#X text 122 15 desired signal;
+#X obj 37 255 outlet~;
+#X msg 249 63 adaptation 1;
+#X obj 249 42 loadbang;
+#X obj 249 141 r clear;
+#X msg 248 162 clear;
+#X obj 37 149 lms2~ 3 0.01;
+#X obj 116 227 unpack f f f;
+#X obj 162 255 outlet;
+#X obj 208 255 outlet;
+#X obj 249 94 r mu;
+#X msg 249 116 mu \$1;
+#X obj 116 255 outlet;
+#N canvas 0 0 450 300 calc_misalignment 0;
+#X obj 19 20 inlet;
+#X obj 19 70 unpack f f f;
+#X obj 175 105 r a0;
+#X obj 227 105 r a1;
+#X obj 280 105 r a2;
+#X obj 19 126 expr (($f1-$f4)+($f2-$f5)+($f3-$f6))/3;
+#X obj 19 156 sig~;
+#X obj 19 184 s~ misalignment;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 5 1;
+#X connect 1 2 5 2;
+#X connect 2 0 5 3;
+#X connect 3 0 5 4;
+#X connect 4 0 5 5;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X restore 269 254 pd calc_misalignment;
+#X obj 75 180 s~ lms_error;
+#X connect 0 0 9 0;
+#X connect 2 0 9 1;
+#X connect 5 0 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 4 0;
+#X connect 9 1 17 0;
+#X connect 9 2 10 0;
+#X connect 9 2 16 0;
+#X connect 10 0 15 0;
+#X connect 10 1 11 0;
+#X connect 10 2 12 0;
+#X connect 13 0 14 0;
+#X connect 14 0 9 0;
+#X restore 43 308 pd adaptive_filter~;
+#X text 51 212 x[n];
+#X text 183 230 d[n];
+#X text 33 327 y[n];
+#X obj 84 550 bng 20 250 50 0 clear empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 113 552 <- clear coefficients \, so adaptation will start again
+;
+#X text 42 470 unknown system:;
+#X text 72 494 d[n] =;
+#X floatatom 85 349 6 0 0 1 c0 - -;
+#X floatatom 149 349 6 0 0 1 c1 - -;
+#X floatatom 211 349 6 0 0 1 c2 - -;
+#X text 40 529 adaptive filter:;
+#X floatatom 408 167 8 0 0 0 mu: mur mu;
+#N canvas 215 124 811 210 init 0;
+#X obj 321 45 loadbang;
+#X msg 138 98 0.33;
+#X msg 179 99 0.33;
+#X msg 223 100 0.33;
+#X obj 138 121 s a0r;
+#X obj 178 122 s a1r;
+#X obj 223 123 s a2r;
+#X obj 330 124 s mur;
+#X msg 329 100 0.01;
+#X msg 625 114 \; pd dsp \$1;
+#X obj 625 89 r audio_io;
+#X obj 395 127 s noiser;
+#X msg 394 104 40;
+#X obj 463 130 s amp_in_r;
+#X msg 463 108 100;
+#X connect 0 0 1 0;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 0 0 8 0;
+#X connect 0 0 12 0;
+#X connect 0 0 14 0;
+#X connect 1 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 6 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 12 0 11 0;
+#X connect 14 0 13 0;
+#X restore 862 557 pd init;
+#X floatatom 125 495 4 0 1 0 - a0r a0;
+#X text 158 495 x[n] +;
+#X text 243 496 x[n-1] +;
+#X floatatom 210 496 4 0 1 0 - a1r a1;
+#X floatatom 311 497 4 0 1 0 - a2r a2;
+#X text 344 496 x[n-2];
+#N canvas 327 0 479 730 PROBLEM_DESCRIPTION 0;
+#X text 29 126 The unknown system is a FIR filter of order 3 and the
+adaptive system is an adaptive transversal filter using the LMS algorithm
+(see lms~ help-patch) with 3 coefficients.;
+#X text 75 224 d[n] = h0*x[n] + h1*x[n-1] + h2*x[n-2];
+#X text 35 188 unknown system:;
+#X text 74 209 FIR Filter \, order = 3;
+#X text 35 259 adaptive system:;
+#X text 77 278 LMS \, 3 coefficients (c0 \, c1 \, c2);
+#X text 77 292 step-size parameter mu;
+#X text 188 40 MISADJUSTMENT;
+#X text 28 84 This patch calculates the misadjustment in a noisy system
+identification problem.;
+#X text 33 325 The input signal and the additional noise are uniformly
+distributed random numbers with zero mean and different variances.
+;
+#X text 29 399 Mean Square Error: MSE[n] = E[abs(e[n])^2];
+#X text 29 416 MSE_min: Minimum Error = variance^2 of the additional
+noise;
+#X text 29 497 limes n to infinity MSE[n] = MSE_excess + MSE_min;
+#X text 26 538 The ratio of the Excess Error and the Minimum Error
+is defined as the Misadjustment:;
+#X text 109 573 MISADJ = MSE_excess / MSE_min;
+#X text 28 619 LMS Adaptive Filter Design Trade Off:;
+#X text 142 644 tao * MISADJ = N/2;
+#X text 108 673 N ... Nr of coefficients;
+#X text 107 687 tao ... convergence time constant;
+#X text 39 448 v[n] = c[n]-h[n] \, so the difference between the adaptive
+and the unknown system;
+#X text 29 433 MSE_excess: Excess Error = E[v[n]^2*x[n]^2] (Misalignment)
+;
+#X restore 34 94 pd PROBLEM_DESCRIPTION;
+#X text 33 73 ReadMe:;
+#N canvas 0 0 320 300 input_signal~ 0;
+#X obj 89 69 noise~;
+#X obj 89 196 *~;
+#X obj 89 255 outlet~;
+#X text 65 43 white signal:;
+#X obj 105 151 r amp_in;
+#X obj 105 174 dbtorms;
+#X obj 219 212 env~;
+#X obj 219 232 dbtorms;
+#X obj 219 254 s in_power;
+#X obj 107 222 s~ in_sig;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 1;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X restore 43 181 pd input_signal~;
+#X obj 172 271 +~;
+#N canvas 0 0 450 300 add_noise~ 0;
+#X obj 142 69 noise~;
+#X obj 142 173 *~;
+#X obj 158 111 r noise;
+#X obj 142 251 outlet~;
+#X obj 158 143 dbtorms;
+#X obj 266 191 s~ add-noise;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 1;
+#X restore 224 255 pd add_noise~;
+#X floatatom 771 163 5 0 0 1 dB noiser noise;
+#X floatatom 583 166 5 0 0 1 dB amp_in_r amp_in;
+#X text 33 30 MISADJUSTMENT - NOISY SYSTEM IDENTIFICATION;
+#X text 408 65 different cases:;
+#N canvas 40 12 322 729 case-study 0;
+#X obj 24 21 inlet;
+#X obj 24 50 sel 0 1 2 3 4 5 6 7;
+#X obj 79 127 s mur;
+#X obj 121 128 s noiser;
+#X obj 182 128 s amp_in_r;
+#X obj 24 126 s start;
+#X msg 24 103 bang;
+#X obj 24 78 t b b;
+#X msg 182 105 100;
+#X msg 79 104 0.01;
+#X obj 78 202 s mur;
+#X obj 120 203 s noiser;
+#X obj 181 203 s amp_in_r;
+#X obj 23 201 s start;
+#X msg 23 178 bang;
+#X obj 23 153 t b b;
+#X obj 77 279 s mur;
+#X obj 119 280 s noiser;
+#X obj 180 280 s amp_in_r;
+#X obj 22 278 s start;
+#X msg 22 255 bang;
+#X obj 22 230 t b b;
+#X obj 77 355 s mur;
+#X obj 119 356 s noiser;
+#X obj 180 356 s amp_in_r;
+#X obj 22 354 s start;
+#X msg 22 331 bang;
+#X obj 22 306 t b b;
+#X obj 78 430 s mur;
+#X obj 120 431 s noiser;
+#X obj 181 431 s amp_in_r;
+#X obj 23 429 s start;
+#X msg 23 406 bang;
+#X obj 23 381 t b b;
+#X obj 78 506 s mur;
+#X obj 120 507 s noiser;
+#X obj 181 507 s amp_in_r;
+#X obj 23 505 s start;
+#X msg 23 482 bang;
+#X obj 23 457 t b b;
+#X msg 78 483 0.01;
+#X obj 78 581 s mur;
+#X obj 120 582 s noiser;
+#X obj 181 582 s amp_in_r;
+#X obj 23 580 s start;
+#X msg 23 557 bang;
+#X obj 23 532 t b b;
+#X obj 78 660 s mur;
+#X obj 120 661 s noiser;
+#X obj 181 661 s amp_in_r;
+#X obj 23 659 s start;
+#X msg 23 636 bang;
+#X obj 23 611 t b b;
+#X msg 120 105 30;
+#X msg 119 180 50;
+#X msg 181 180 70;
+#X msg 78 179 0.001;
+#X msg 77 256 0.001;
+#X msg 180 257 97;
+#X msg 118 257 50;
+#X msg 118 333 80;
+#X msg 180 333 40;
+#X msg 77 332 2;
+#X msg 78 407 0.005;
+#X msg 119 408 4;
+#X msg 181 408 10;
+#X msg 181 484 90;
+#X msg 120 484 60;
+#X msg 181 559 98;
+#X msg 119 559 80;
+#X msg 78 558 0.008;
+#X msg 119 638 40;
+#X msg 181 638 80;
+#X msg 78 637 0.9;
+#X connect 0 0 1 0;
+#X connect 1 0 7 0;
+#X connect 1 1 15 0;
+#X connect 1 2 21 0;
+#X connect 1 3 27 0;
+#X connect 1 4 33 0;
+#X connect 1 5 39 0;
+#X connect 1 6 46 0;
+#X connect 1 7 52 0;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
+#X connect 7 1 9 0;
+#X connect 7 1 53 0;
+#X connect 7 1 8 0;
+#X connect 8 0 4 0;
+#X connect 9 0 2 0;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 15 1 56 0;
+#X connect 15 1 54 0;
+#X connect 15 1 55 0;
+#X connect 20 0 19 0;
+#X connect 21 0 20 0;
+#X connect 21 1 57 0;
+#X connect 21 1 59 0;
+#X connect 21 1 58 0;
+#X connect 26 0 25 0;
+#X connect 27 0 26 0;
+#X connect 27 1 62 0;
+#X connect 27 1 60 0;
+#X connect 27 1 61 0;
+#X connect 32 0 31 0;
+#X connect 33 0 32 0;
+#X connect 33 1 63 0;
+#X connect 33 1 64 0;
+#X connect 33 1 65 0;
+#X connect 38 0 37 0;
+#X connect 39 0 38 0;
+#X connect 39 1 40 0;
+#X connect 39 1 67 0;
+#X connect 39 1 66 0;
+#X connect 40 0 34 0;
+#X connect 45 0 44 0;
+#X connect 46 0 45 0;
+#X connect 46 1 70 0;
+#X connect 46 1 69 0;
+#X connect 46 1 68 0;
+#X connect 51 0 50 0;
+#X connect 52 0 51 0;
+#X connect 52 1 73 0;
+#X connect 52 1 71 0;
+#X connect 52 1 72 0;
+#X connect 53 0 3 0;
+#X connect 54 0 11 0;
+#X connect 55 0 12 0;
+#X connect 56 0 10 0;
+#X connect 57 0 16 0;
+#X connect 58 0 18 0;
+#X connect 59 0 17 0;
+#X connect 60 0 23 0;
+#X connect 61 0 24 0;
+#X connect 62 0 22 0;
+#X connect 63 0 28 0;
+#X connect 64 0 29 0;
+#X connect 65 0 30 0;
+#X connect 66 0 36 0;
+#X connect 67 0 35 0;
+#X connect 68 0 43 0;
+#X connect 69 0 42 0;
+#X connect 70 0 41 0;
+#X connect 71 0 48 0;
+#X connect 72 0 49 0;
+#X connect 73 0 47 0;
+#X restore 410 112 pd case-study;
+#N canvas 0 0 450 300 graph3 0;
+#X array MSE 20000 float 0;
+#X coords 0 100 19999 0 400 140 1;
+#X restore 408 318 graph;
+#N canvas 176 526 1013 385 visualisation 0;
+#X obj 29 34 r start;
+#X obj 29 60 t b b;
+#X obj 59 85 s clear;
+#X obj 29 241 tabwrite~ MSE;
+#X text 283 29 Excess Error:;
+#X obj 705 95 t b f;
+#X text 454 32 Misadjustment:;
+#X obj 457 122 /;
+#X msg 429 337 \; MSE yticks 0 5 5;
+#X text 662 34 MSE:;
+#X obj 285 204 dbtorms;
+#X msg 552 337 \; MSE ylabel 20600 0 25 50 75 100;
+#X obj 300 169 s excess_db;
+#X obj 305 233 s excess;
+#X obj 644 127 +;
+#X obj 809 73 r~ add-noise;
+#X obj 809 117 dbtorms;
+#X obj 809 141 s noise_power;
+#X obj 72 138 r~ add-noise;
+#X obj 429 268 loadbang;
+#X obj 644 75 r excess;
+#X obj 705 75 r noise_power;
+#X obj 659 155 s mse;
+#X obj 658 205 s mse_db;
+#X obj 644 180 rmstodb;
+#X obj 457 73 r excess;
+#X obj 518 94 t b f;
+#X obj 518 74 r noise_power;
+#X obj 457 153 s misadj;
+#X obj 285 145 env~ 64;
+#X obj 809 95 env~ 64;
+#X obj 56 195 env~ 64;
+#X msg 429 302 \; MSE xticks 0 500 5;
+#X msg 563 302 \; MSE xlabel -10 0 5000 10000 15000 20000;
+#X floatatom 356 205 5 0 0 0 - - -;
+#X obj 284 76 r~ misalignment;
+#X obj 56 172 +~;
+#X obj 302 102 r~ in_sig;
+#X obj 285 123 *~;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 1 2 0;
+#X connect 5 0 14 0;
+#X connect 5 1 14 1;
+#X connect 7 0 28 0;
+#X connect 10 0 13 0;
+#X connect 14 0 22 0;
+#X connect 14 0 24 0;
+#X connect 15 0 30 0;
+#X connect 16 0 17 0;
+#X connect 18 0 36 1;
+#X connect 19 0 8 0;
+#X connect 19 0 11 0;
+#X connect 19 0 32 0;
+#X connect 19 0 33 0;
+#X connect 20 0 14 0;
+#X connect 21 0 5 0;
+#X connect 24 0 23 0;
+#X connect 25 0 7 0;
+#X connect 26 0 7 0;
+#X connect 26 1 7 1;
+#X connect 27 0 26 0;
+#X connect 29 0 10 0;
+#X connect 29 0 12 0;
+#X connect 29 0 34 0;
+#X connect 30 0 16 0;
+#X connect 31 0 3 0;
+#X connect 35 0 38 0;
+#X connect 36 0 31 0;
+#X connect 37 0 38 1;
+#X connect 38 0 29 0;
+#X connect 38 0 36 0;
+#X restore 742 557 pd visualisation;
+#X text 387 183 (step-size);
+#X text 504 166 in-signal:;
+#X floatatom 583 183 6 0 0 1 rms in_power -;
+#X floatatom 771 180 6 0 0 1 rms noise_power -;
+#X text 695 163 add-noise:;
+#X obj 410 84 hradio 25 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X text 408 229 Excess Error:;
+#X floatatom 509 229 5 0 0 1 dB excess_db -;
+#X floatatom 586 229 7 0 0 1 rms excess -;
+#X text 567 228 ->;
+#X text 402 253 Misadjustment:;
+#X floatatom 509 253 7 0 0 1 - misadj -;
+#X text 469 279 MSE:;
+#X floatatom 509 278 5 0 0 1 dB mse_db -;
+#X floatatom 586 278 7 0 0 1 rms mse -;
+#X text 567 277 ->;
+#X text 790 292 MSE [dB];
+#X obj 712 250 bng 20 250 50 0 start empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 830 463 [samples];
+#X text 741 252 <- draw MSE;
+#N canvas 876 202 465 319 OBSERVATIONS 0;
+#X text 22 22 OBSERVATIONS;
+#X text 24 61 different cases:;
+#X text 24 137 3) slow learning \, but adaptation works;
+#X text 24 96 1) little bit add-noise \, adaptation works well;
+#X text 24 116 2) too much add-noise;
+#X text 24 192 5) very low in-signal and add-noise \, adaptation does
+not work;
+#X text 24 225 6) adaptation works;
+#X text 24 244 7) very high add-noise level \, but adaptation works
+;
+#X text 24 263 8) adaptation works \, high step-size (so in some cases
+this will be unstable);
+#X text 23 158 4) more add-noise than in-signal and very high step-size
+-> so sometimes this is unstable !;
+#X restore 34 120 pd OBSERVATIONS;
+#X text 418 90 1;
+#X text 442 90 2;
+#X text 467 90 3;
+#X text 492 90 4;
+#X text 517 90 5;
+#X text 542 90 6;
+#X text 567 90 7;
+#X text 592 90 8;
+#X text 537 183 power:;
+#X text 727 179 power:;
+#X connect 0 0 26 0;
+#X connect 3 1 11 0;
+#X connect 3 2 12 0;
+#X connect 3 3 13 0;
+#X connect 25 0 0 0;
+#X connect 25 0 3 0;
+#X connect 26 0 3 1;
+#X connect 27 0 26 1;
+#X connect 40 0 32 0;