#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;