aboutsummaryrefslogtreecommitdiff
path: root/adaptive/doc/help-nlms2~.pd
blob: ea103ba89da65197054da76c038fa41f5fe6a96e (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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
#N canvas 108 136 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 182 252 reference signal d[n];
#X text 182 267 (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 221 646 (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 nlms2~ 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 130 251 sig~ 1;
#X text 93 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 130 342 unpack f f;
#X floatatom 130 382 5 0 0 0 - - -;
#X floatatom 195 365 5 0 0 0 - - -;
#X text 169 382 c0[n];
#X text 237 365 c1[n];
#X text 135 322 coefficients:;
#X text 36 122 nlms2~: same as nlms~ \, but with additional;
#X obj 37 304 nlms2~ 2 0.001;
#N canvas 812 118 510 736 NLMS2_EXAMPLE 0;
#X obj 31 109 sig~ 2;
#X obj 123 108 sig~ 1;
#X text 36 87 x[n];
#X text 131 89 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 132 130 s~ d_;
#X obj 31 213 s~ y_;
#X obj 76 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 nlms2~ 1 0.001;
#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 NLMS2_EXAMPLE;
#N canvas 347 29 502 539 NLMS_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 35 398 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 35 312 mu ... step-size parameter (learning rate);
#X text 34 282 c[n] ... new coefficient vector;
#X text 34 297 c[n-1] ... old coefficient vector;
#X text 34 354 e[n] ... error sample at time n \, LMS tries to minimize
this error;
#X text 35 382 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 36 440 How to choose mu ?;
#X text 36 463 Sufficient (deterministic) stability condition:;
#X text 32 195 The normalized LMS Adaptation Algorithm:;
#X text 70 226 c[n] = c[n-1] + mu/(alpha+abs(x[n])^2) *e[n]*x[n];
#X text 34 327 alpha ... a small positive constant \, only to avoid
division by zero;
#X text 152 490 0 < mu < 2;
#X restore 38 561 pd NLMS_EXPLANATION;
#X msg 387 352 getmu;
#X msg 387 331 mu \$1;
#X floatatom 395 312 8 0 0 0 - - -;
#X msg 387 460 getN;
#X msg 387 549 help;
#X msg 387 209 clear;
#X msg 387 276 print;
#X msg 387 517 read demo.dat;
#X msg 387 173 getadaptation;
#X obj 387 130 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X msg 387 151 adaptation \$1;
#X msg 387 496 write demo.dat;
#X obj 387 578 s message;
#X text 490 151 turn adaptation on/off;
#X text 435 203 clear current coefficients;
#X text 435 216 and set them back to 0;
#X text 436 275 print current coefficients;
#X text 438 335 set/get stepsize parameter;
#X text 439 349 mu (learning rate);
#X text 428 460 get Nr. of coefficients;
#X text 498 513 and mu to file;
#X text 498 499 write/read coefficients;
#X floatatom 395 382 8 0 0 0 - - -;
#X msg 387 401 alpha \$1;
#X msg 387 422 getalpha;
#X text 456 403 set/get alpha (normally;
#X text 457 417 you don't need that);
#X msg 387 246 init_unity;
#X text 467 233 set first coefficient to 1 \,;
#X text 469 246 all others to 0 (= delay;
#X text 468 259 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 56 0;
#X connect 56 0 45 0;
#X connect 57 0 45 0;
#X connect 60 0 45 0;