aboutsummaryrefslogtreecommitdiff
path: root/adaptive/examples/04.misadjustment.pd
blob: 8a963dd9dbebae3cbeada2f4ec9b8e4ec6fc1466 (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
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
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;