diff options
Diffstat (limited to 'adaptive/doc/lms2~-help.pd')
-rwxr-xr-x | adaptive/doc/lms2~-help.pd | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/adaptive/doc/lms2~-help.pd b/adaptive/doc/lms2~-help.pd new file mode 100755 index 0000000..6910a02 --- /dev/null +++ b/adaptive/doc/lms2~-help.pd @@ -0,0 +1,232 @@ +#N canvas 213 0 700 678 10; +#X floatatom 37 482 8 0 0 0 - - -; +#X obj 45 279 r message; +#N canvas 0 0 260 260 unsig~ 0; +#X obj 22 42 inlet~; +#X text 62 42 ~signal_in~; +#X obj 22 168 outlet; +#X text 69 169 float-out; +#X obj 22 142 snapshot~; +#X obj 39 119 metro 300; +#X obj 40 70 loadbang; +#X msg 40 95 1; +#X connect 0 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X restore 37 460 pd unsig~; +#X text 89 219 input signal x[n]; +#X text 176 259 reference signal d[n]; +#X text 176 274 (desired signal); +#X text 108 461 output signal y[n]; +#X text 35 166 init arg1: nr. of coefficients; +#X text 35 179 init arg2: stepsize parameter mu; +#X text 198 641 (c) Georg Holzmann <grh@mur.at> \, 2005; +#X text 39 520 some more info:; +#X obj 219 24 cnv 15 258 58 empty empty empty 10 22 0 14 -1 -66577 +0; +#X obj 223 28 cnv 15 250 50 empty empty lms2~ 10 24 0 14 -228992 -1 +0; +#X text 350 38 adaptive systems; +#X text 360 54 for Pure Data; +#X text 35 599 in the example folder !; +#X text 35 586 For much more examples see patches; +#X obj 38 218 sig~ 2; +#X obj 124 258 sig~ 1; +#X text 85 134 outputs for e[n] and c[n]; +#X floatatom 82 434 8 0 0 0 - - -; +#N canvas 0 0 260 260 unsig~ 0; +#X obj 22 42 inlet~; +#X text 62 42 ~signal_in~; +#X obj 22 168 outlet; +#X text 69 169 float-out; +#X obj 22 142 snapshot~; +#X obj 39 119 metro 300; +#X obj 40 70 loadbang; +#X msg 40 95 1; +#X connect 0 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X restore 82 412 pd unsig~; +#X text 153 413 error signal e[n]; +#X obj 123 343 unpack f f; +#X floatatom 123 383 5 0 0 0 - - -; +#X floatatom 188 366 5 0 0 0 - - -; +#X text 162 383 c0[n]; +#X text 230 366 c1[n]; +#X text 128 323 coefficients:; +#X text 36 122 lms2~: same as lms~ \, but with additional; +#X obj 37 304 lms2~ 2 1e-04; +#N canvas 347 29 502 634 LMS_EXPLANATION 0; +#X text 35 135 x[n] ... input signal of the system; +#X text 35 120 c[n] ... coefficient vector of the system; +#X text 35 104 y[n] ... output signal of the system; +#X text 43 369 d[n] ... desired signal \, reference signal; +#X text 50 74 -> y[n] = c0[n]*x[n] + c1[n]*x[n-1] + c2[n]*x[n-2] + +...; +#X text 32 195 The LMS Adaptation Algorithm:; +#X text 70 226 c[n] = c[n-1] + mu*e[n]*x[n]; +#X text 43 309 mu ... step-size parameter (learning rate); +#X text 42 279 c[n] ... new coefficient vector; +#X text 42 294 c[n-1] ... old coefficient vector; +#X text 42 325 e[n] ... error sample at time n \, LMS tries to minimize +this error; +#X text 43 353 x[n] ... tap-input vector at time n; +#X text 71 241 with e[n] = d[n] - y[n]; +#X text 33 33 An adaptive system is simply a FIR filter with the coefficients +c[n] \, which can be learned.; +#X text 104 485 0 < mu < 2/(abs(x[n])^2); +#X text 38 517 -> abs(x[n])^2 is the tap-input energy; +#X text 60 532 at time n (lenght of x[n] is PDs; +#X text 35 579 Note: this only ensures "stability on average"; +#X text 60 547 blocksize - so use block~ to change it!); +#X text 34 432 How to choose mu ?; +#X text 34 455 Sufficient (deterministic) stability condition:; +#X restore 38 561 pd LMS_EXPLANATION; +#N canvas 812 118 510 736 LMS2_EXAMPLE 0; +#X obj 31 109 sig~ 2; +#X obj 116 110 sig~ 1; +#X text 36 87 x[n]; +#X text 124 91 d[n]; +#X text 31 234 y[n]; +#X obj 40 159 r \$0-lms; +#X text 115 28 x[n] = 2 \, d[n] = 1 \, N = 1 (= nr. of coefficients) +; +#X text 26 29 EXAMPLE:; +#N canvas 0 0 450 300 graph3 0; +#X array x 1024 float 0; +#X array y 1024 float 0; +#X array d 1024 float 0; +#X coords 0 2 1023 0 400 140 1; +#X restore 51 302 graph; +#N canvas 422 247 876 321 plot_logic 0; +#X obj 37 162 tabwrite~ x; +#X obj 123 162 tabwrite~ y; +#X obj 209 162 tabwrite~ d; +#X obj 179 77 metro 100; +#X obj 179 26 loadbang; +#X msg 179 52 1; +#X obj 514 58 loadbang; +#X obj 37 136 r~ x_; +#X obj 123 136 r~ y_; +#X obj 209 136 r~ d_; +#X msg 505 153 \; x yticks 0 0.25 2; +#X msg 489 121 \; x xticks 0 32 2; +#X msg 646 150 \; x ylabel 1060 0 0.5 1 1.5 2; +#X msg 622 105 \; x xlabel -0.2 0 256 512 768 1024; +#X obj 296 102 r~ e_; +#X obj 297 161 tabwrite~ e; +#X obj 297 131 *~; +#X msg 498 224 \; e xticks 0 32 2; +#X msg 514 256 \; e yticks 0 0.25 2; +#X msg 631 208 \; e xlabel -0.2 0 256 512 768 1024; +#X msg 655 253 \; e ylabel 1060 0 0.5 1 1.5 2; +#X obj 541 198 loadbang; +#X connect 3 0 0 0; +#X connect 3 0 1 0; +#X connect 3 0 2 0; +#X connect 3 0 15 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X connect 6 0 11 0; +#X connect 6 0 10 0; +#X connect 6 0 13 0; +#X connect 6 0 12 0; +#X connect 7 0 0 0; +#X connect 8 0 1 0; +#X connect 9 0 2 0; +#X connect 14 0 16 0; +#X connect 14 0 16 1; +#X connect 16 0 15 0; +#X connect 21 0 17 0; +#X connect 21 0 18 0; +#X connect 21 0 19 0; +#X connect 21 0 20 0; +#X restore 198 246 pd plot_logic; +#X obj 341 244 s \$0-lms; +#X msg 341 220 adaptation 1; +#X obj 341 199 loadbang; +#X obj 198 207 s \$0-lms; +#X msg 198 171 mu \$1; +#X floatatom 210 150 8 0 0 0 - - -; +#X text 275 147 <- try different mu; +#X msg 199 109 clear; +#X text 242 110 <- clear to start new adaptation; +#X text 189 461 -- 1024 samples --; +#X obj 37 131 s~ x_; +#X obj 125 132 s~ d_; +#X obj 31 213 s~ y_; +#X obj 74 213 s~ e_; +#N canvas 0 0 450 300 graph3 0; +#X array e 1024 float 0; +#X coords 0 2 1023 0 400 140 1; +#X restore 48 534 graph; +#X text 195 693 -- 1024 samples --; +#X text 47 510 squared error e^2[n] (learning curve):; +#X obj 30 181 lms2~ 1 1e-05; +#X connect 0 0 20 0; +#X connect 0 0 27 0; +#X connect 1 0 21 0; +#X connect 1 0 27 1; +#X connect 5 0 27 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 17 0 13 0; +#X connect 27 0 22 0; +#X connect 27 1 23 0; +#X restore 38 540 pd LMS2_EXAMPLE; +#X msg 384 373 getmu; +#X msg 384 352 mu \$1; +#X floatatom 392 333 8 0 0 0 - - -; +#X msg 384 408 getN; +#X msg 384 497 help; +#X msg 384 228 clear; +#X msg 384 295 print; +#X msg 384 465 read demo.dat; +#X msg 384 195 getadaptation; +#X obj 384 152 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X msg 384 173 adaptation \$1; +#X msg 384 444 write demo.dat; +#X obj 384 526 s message; +#X text 487 173 turn adaptation on/off; +#X text 432 222 clear current coefficients; +#X text 432 235 and set them back to 0; +#X text 433 294 print current coefficients; +#X text 435 356 set/get stepsize parameter; +#X text 436 370 mu (learning rate); +#X text 425 408 get Nr. of coefficients; +#X text 495 461 and mu to file; +#X text 495 447 write/read coefficients; +#X msg 384 264 init_unity; +#X text 464 251 set first coefficient to 1 \,; +#X text 466 264 all others to 0 (= delay; +#X text 465 277 free transmission); +#X connect 1 0 30 0; +#X connect 2 0 0 0; +#X connect 17 0 30 0; +#X connect 18 0 30 1; +#X connect 21 0 20 0; +#X connect 23 0 24 0; +#X connect 23 1 25 0; +#X connect 30 0 2 0; +#X connect 30 1 21 0; +#X connect 30 2 23 0; +#X connect 33 0 45 0; +#X connect 34 0 45 0; +#X connect 35 0 34 0; +#X connect 36 0 45 0; +#X connect 37 0 45 0; +#X connect 38 0 45 0; +#X connect 39 0 45 0; +#X connect 40 0 45 0; +#X connect 41 0 45 0; +#X connect 42 0 43 0; +#X connect 43 0 45 0; +#X connect 44 0 45 0; +#X connect 55 0 45 0; |