blob: b16149e4ff3d0db23c809217ec2788a96e40672a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
#N canvas 148 190 700 570 10;
#X msg 395 341 getmu;
#X msg 395 320 mu \$1;
#X floatatom 403 301 8 0 0 0 - - -;
#X msg 395 376 getN;
#X msg 395 465 help;
#X msg 395 196 clear;
#X msg 395 263 print;
#X floatatom 37 365 8 0 0 0 - - -;
#X msg 395 433 read demo.dat;
#X msg 395 163 getadaptation;
#X obj 395 120 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X msg 395 141 adaptation \$1;
#X msg 395 412 write demo.dat;
#X text 36 122 LMS: least mean square adaptation algorithm;
#X obj 45 279 r message;
#X obj 395 494 s 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 343 pd unsig~;
#X text 89 219 input signal x[n];
#X text 169 248 reference signal d[n];
#X text 169 263 (desired signal);
#X text 108 344 output signal y[n];
#X obj 37 304 lms~ 2 1e-04;
#X text 35 160 init arg1: nr. of coefficients;
#X text 498 141 turn adaptation on/off;
#X text 443 190 clear current coefficients;
#X text 443 203 and set them back to 0;
#X text 444 262 print current coefficients;
#X text 35 173 init arg2: stepsize parameter mu;
#X text 446 324 set/get stepsize parameter;
#X text 447 338 mu (learning rate);
#X text 436 376 get Nr. of coefficients;
#X text 506 429 and mu to file;
#X text 506 415 write/read coefficients;
#X text 223 536 (c) Georg Holzmann <grh@mur.at> \, 2005;
#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 429 pd LMS_EXPLANATION;
#X text 36 407 some more info:;
#N canvas 536 326 510 502 LMS_EXAMPLE 0;
#X obj 31 109 sig~ 2;
#X obj 108 109 sig~ 1;
#X text 36 87 x[n];
#X text 116 90 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 725 220 plot_logic 0;
#X obj 72 168 tabwrite~ x;
#X obj 158 168 tabwrite~ y;
#X obj 244 168 tabwrite~ d;
#X obj 191 105 metro 100;
#X obj 191 54 loadbang;
#X msg 191 80 1;
#X obj 386 57 loadbang;
#X obj 72 142 r~ x_;
#X obj 158 142 r~ y_;
#X obj 244 142 r~ d_;
#X msg 362 153 \; x yticks 0 0.25 2;
#X msg 346 121 \; x xticks 0 32 2;
#X msg 503 150 \; x ylabel 1060 0 0.5 1 1.5 2;
#X msg 479 105 \; x xlabel -0.2 0 256 512 768 1024;
#X connect 3 0 0 0;
#X connect 3 0 1 0;
#X connect 3 0 2 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 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 obj 30 181 lms~ 1 1e-05;
#X text 189 461 -- 1024 samples --;
#X obj 37 131 s~ x_;
#X obj 117 131 s~ d_;
#X obj 31 213 s~ y_;
#X connect 0 0 19 0;
#X connect 0 0 21 0;
#X connect 1 0 19 1;
#X connect 1 0 22 0;
#X connect 5 0 19 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 19 0 23 0;
#X restore 38 451 pd LMS_EXAMPLE;
#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 lms~ 10 24 0 14 -228992 -1
0;
#X text 350 38 adaptive systems;
#X text 360 54 for Pure Data;
#X text 34 488 in the example folder !;
#X text 35 474 For much more examples see patches;
#X obj 38 218 sig~ 2;
#X obj 117 247 sig~ 1;
#X msg 395 232 init_unity;
#X text 475 219 set first coefficient to 1 \,;
#X text 477 232 all others to 0 (= delay;
#X text 476 245 free transmission);
#X connect 0 0 15 0;
#X connect 1 0 15 0;
#X connect 2 0 1 0;
#X connect 3 0 15 0;
#X connect 4 0 15 0;
#X connect 5 0 15 0;
#X connect 6 0 15 0;
#X connect 8 0 15 0;
#X connect 9 0 15 0;
#X connect 10 0 11 0;
#X connect 11 0 15 0;
#X connect 12 0 15 0;
#X connect 14 0 21 0;
#X connect 16 0 7 0;
#X connect 21 0 16 0;
#X connect 43 0 21 0;
#X connect 44 0 21 1;
#X connect 45 0 15 0;
|