aboutsummaryrefslogtreecommitdiff
path: root/adaptive/examples/08.decision-directed_equalization.pd
diff options
context:
space:
mode:
Diffstat (limited to 'adaptive/examples/08.decision-directed_equalization.pd')
-rwxr-xr-xadaptive/examples/08.decision-directed_equalization.pd167
1 files changed, 167 insertions, 0 deletions
diff --git a/adaptive/examples/08.decision-directed_equalization.pd b/adaptive/examples/08.decision-directed_equalization.pd
new file mode 100755
index 0000000..e81c5aa
--- /dev/null
+++ b/adaptive/examples/08.decision-directed_equalization.pd
@@ -0,0 +1,167 @@
+#N canvas 0 0 815 449 10;
+#N canvas 713 200 313 209 delay~ 0;
+#X obj 42 45 inlet~;
+#X obj 43 139 outlet~;
+#X obj 43 89 z~ 60;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 176 261 pd delay~;
+#N canvas 684 469 305 289 channel~ 0;
+#X obj 39 120 bp~ 500 10;
+#X text 72 96 dummy filter + latency;
+#X obj 39 36 inlet~;
+#X obj 40 234 outlet~;
+#X obj 40 182 z~ 60;
+#X connect 0 0 4 0;
+#X connect 2 0 0 0;
+#X connect 4 0 3 0;
+#X restore 29 262 pd channel~;
+#N canvas 490 469 479 338 PROBLEM_DESCRIPTION 0;
+#X text 57 137 possible symbols: -1 \, 1;
+#X text 55 160 the decision device is implemented by d=sign(y);
+#X text 72 40 DECISION-DIRECTED CHANNEL EQUALIZATION;
+#X text 27 189 The adaptive equalizer tries to invert the channel \,
+so that the overal system has a flat frequency response and there are
+almost no bit errors.;
+#X text 28 280 We simulate the transmission with a simple bandpass
+filter and a delay (= the channel).;
+#X text 28 241 Bit errors are plotted over time for equalized and unequalized
+transmission.;
+#X text 27 83 This patch simulates the equalization of a baseband transmission
+of a binary signal (similar to the adaptation process in e.g. a modem).
+;
+#X restore 28 106 pd PROBLEM_DESCRIPTION;
+#N canvas 493 226 453 208 OBSERVATIONS 0;
+#X text 21 30 OBSERVATIONS;
+#X text 19 77 You can see that if you train the system long enough
+there are almost no bit errors.;
+#X text 20 126 A critical parameter is the delay: If you don't find
+the exact delay of the channel adaptation works very bad for uncorrelated
+training sequences.;
+#X restore 28 130 pd OBSERVATIONS;
+#X text 27 85 ReadMe:;
+#N canvas 752 62 617 174 init 0;
+#X obj 256 43 loadbang;
+#X obj 213 120 s mur;
+#X msg 515 103 \; pd dsp \$1;
+#X obj 515 78 r audio_io;
+#X msg 212 96 0.1;
+#X obj 125 118 s moder;
+#X msg 125 97 0;
+#X connect 0 0 4 0;
+#X connect 0 0 6 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X connect 6 0 5 0;
+#X restore 679 389 pd init;
+#X obj 708 108 tgl 20 0 audio_io empty empty 0 -6 0 8 -262144 -1 -1
+0 1;
+#X floatatom 684 139 6 0 0 0 - mur mu;
+#X text 546 138 learning rate (mu):;
+#N canvas 0 0 450 300 input_signal~ 0;
+#X obj 59 74 noise~;
+#X obj 60 120 expr~ if($v1>=0 \, 1 \, -1);
+#X text 75 104 signum:;
+#X obj 60 182 outlet~;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X restore 29 198 pd input_signal~;
+#N canvas 573 367 334 253 adaptive_equalizer~ 0;
+#X obj 164 64 r mode;
+#X obj 164 104 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X msg 164 123 adaptation \$1;
+#X obj 31 34 inlet~;
+#X obj 108 34 inlet~;
+#X obj 163 151 r mode;
+#X obj 163 191 sel 1;
+#X msg 163 212 init_unity;
+#X obj 30 205 outlet~;
+#N canvas 922 527 390 347 nlms~ 0;
+#X obj 37 35 inlet~;
+#X obj 155 44 inlet~;
+#X text 134 24 desired signal;
+#X obj 36 291 outlet~;
+#X obj 261 135 loadbang;
+#X msg 264 300 clear;
+#X obj 262 250 r mu;
+#X msg 262 272 mu \$1;
+#X text 36 313 outsig1;
+#X text 38 14 insig1;
+#X msg 274 201 init_unity;
+#X obj 261 156 t b b;
+#X msg 59 96 print;
+#X msg 261 178 adaptation 0;
+#X obj 341 38 inlet;
+#X obj 37 156 nlms~ 10 0.01;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 4 0 11 0;
+#X connect 5 0 15 0;
+#X connect 6 0 7 0;
+#X connect 7 0 15 0;
+#X connect 10 0 15 0;
+#X connect 11 0 13 0;
+#X connect 11 1 10 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 0;
+#X connect 14 0 15 0;
+#X connect 15 0 3 0;
+#X restore 30 140 pd nlms~;
+#X obj 164 84 expr if($f1==1 \, 1 \, 0);
+#X obj 163 171 expr if($f1==0 \, 1 \, 0);
+#X connect 0 0 10 0;
+#X connect 1 0 2 0;
+#X connect 2 0 9 2;
+#X connect 3 0 9 0;
+#X connect 4 0 9 1;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 9 2;
+#X connect 9 0 8 0;
+#X connect 10 0 1 0;
+#X connect 11 0 6 0;
+#X restore 28 337 pd adaptive_equalizer~;
+#X obj 297 108 vradio 20 1 0 3 mode moder empty 0 -6 0 8 -262144 -1
+-1 2;
+#X text 292 90 mode:;
+#X text 37 244 H_chan(z);
+#X text 37 319 H_eq(z);
+#X text 26 22 DECISION-DIRECTED CHANNEL EQUALIZATION;
+#X text 323 111 unequalized transmission;
+#N canvas 609 329 450 300 decision_device~ 0;
+#X obj 25 38 inlet~;
+#X obj 26 97 expr~ if($v1>=0 \, 1 \, -1);
+#X text 41 81 signum:;
+#X obj 270 38 inlet~;
+#X obj 59 202 tabsend~ biterrors;
+#X obj 59 173 expr~ if($v1==$v2 \, -1 \, 1);
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 3 0 5 1;
+#X connect 5 0 4 0;
+#X restore 124 387 pd decision_device~;
+#N canvas 0 0 450 300 graph3 0;
+#X array biterrors 64 float 2;
+#X coords 0 1.4 63 -1.4 350 140 1;
+#X restore 380 245 graph;
+#X text 734 257 error;
+#X text 734 357 no error;
+#X text 487 390 ---- 64 samples ----;
+#X text 382 228 biterrors over time:;
+#X text 624 110 Audio IO ->;
+#X text 322 131 training;
+#X text 323 150 equalized transmission;
+#X text 302 112 1;
+#X text 302 131 2;
+#X text 302 151 3;
+#N canvas 0 0 450 110 NEEDED_EXTERNALS 0;
+#X text 16 38 For this patch you will need the zexy external by IOhannes
+Zmoelnig: http://pd.iem.at;
+#X restore 659 16 pd NEEDED_EXTERNALS;
+#X connect 0 0 10 1;
+#X connect 0 0 17 1;
+#X connect 1 0 10 0;
+#X connect 9 0 1 0;
+#X connect 9 0 0 0;
+#X connect 10 0 17 0;