aboutsummaryrefslogtreecommitdiff
path: root/adaptive/doc/nlms~-help.pd
blob: d58ef687e3d885ceb1042cf3ca0d1ddf11716071 (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
#N canvas 0 0 700 667 10;
#X msg 395 342 getmu;
#X msg 395 321 mu \$1;
#X floatatom 403 302 8 0 0 0 - - -;
#X msg 395 450 getN;
#X msg 395 539 help;
#X msg 395 199 clear;
#X msg 395 266 print;
#X floatatom 37 406 8 0 0 0 - - -;
#X msg 395 507 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 486 write demo.dat;
#X obj 45 320 r message;
#X obj 395 568 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 384 pd unsig~;
#X text 89 260 input signal x[n];
#X text 177 287 reference signal d[n];
#X text 177 302 (desired signal);
#X text 108 385 output signal y[n];
#X text 35 172 init arg1: nr. of coefficients;
#X text 498 141 turn adaptation on/off;
#X text 443 193 clear current coefficients;
#X text 443 206 and set them back to 0;
#X text 444 265 print current coefficients;
#X text 35 185 init arg2: stepsize parameter mu;
#X text 446 325 set/get stepsize parameter;
#X text 447 339 mu (learning rate);
#X text 436 450 get Nr. of coefficients;
#X text 506 503 and mu to file;
#X text 506 489 write/read coefficients;
#X text 206 622 (c) Georg Holzmann <grh@mur.at> \, 2005;
#X text 36 481 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 nlms~ 10 24 0 14 -228992 -1
0;
#X text 350 38 adaptive systems;
#X text 360 54 for Pure Data;
#X text 34 562 in the example folder !;
#X text 35 548 For much more examples see patches;
#X obj 38 259 sig~ 2;
#X obj 125 286 sig~ 1;
#X text 36 134 Normalized LMS: normalized least mean square;
#X text 146 147 adaptation algorithm;
#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 503 pd NLMS_EXPLANATION;
#N canvas 536 326 510 502 NLMS_EXAMPLE 0;
#X obj 31 109 sig~ 2;
#X obj 116 111 sig~ 1;
#X text 36 87 x[n];
#X text 124 92 d[n];
#X text 31 234 y[n];
#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 msg 341 220 adaptation 1;
#X obj 341 199 loadbang;
#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 133 s~ d_;
#X obj 31 213 s~ y_;
#X obj 40 159 r \$0-nlms;
#X obj 198 207 s \$0-nlms;
#X obj 341 244 s \$0-nlms;
#X obj 30 181 nlms~ 1 0.001;
#X connect 0 0 17 0;
#X connect 0 0 23 0;
#X connect 1 0 18 0;
#X connect 1 0 23 1;
#X connect 9 0 22 0;
#X connect 10 0 9 0;
#X connect 11 0 21 0;
#X connect 12 0 11 0;
#X connect 14 0 21 0;
#X connect 20 0 23 0;
#X connect 23 0 19 0;
#X restore 38 525 pd NLMS_EXAMPLE;
#X floatatom 403 372 8 0 0 0 - - -;
#X msg 395 391 alpha \$1;
#X msg 395 412 getalpha;
#X text 464 393 set/get alpha (normally;
#X text 465 407 you don't need that);
#X obj 38 345 nlms~ 2 0.001;
#X msg 395 236 init_unity;
#X text 475 223 set first coefficient to 1 \,;
#X text 477 236 all others to 0 (= delay;
#X text 476 249 free transmission);
#X connect 0 0 14 0;
#X connect 1 0 14 0;
#X connect 2 0 1 0;
#X connect 3 0 14 0;
#X connect 4 0 14 0;
#X connect 5 0 14 0;
#X connect 6 0 14 0;
#X connect 8 0 14 0;
#X connect 9 0 14 0;
#X connect 10 0 11 0;
#X connect 11 0 14 0;
#X connect 12 0 14 0;
#X connect 13 0 50 0;
#X connect 15 0 7 0;
#X connect 39 0 50 0;
#X connect 40 0 50 1;
#X connect 45 0 46 0;
#X connect 46 0 14 0;
#X connect 47 0 14 0;
#X connect 50 0 15 0;
#X connect 51 0 14 0;