#N canvas 28 0 821 766 10; #N canvas 880 339 427 348 adaptive_filter~ 0; #X obj 37 35 inlet~; #X text 22 15 input signal; #X obj 138 35 inlet~; #X text 122 15 desired signal; #X obj 36 291 outlet~; #X msg 265 110 adaptation 1; #X obj 265 89 loadbang; #X msg 264 209 clear; #X obj 265 141 r mu; #X msg 265 163 mu \$1; #X obj 88 291 outlet~; #X obj 269 38 block~ 128; #X obj 37 155 nlms2~ 100 0.01; #X connect 0 0 12 0; #X connect 2 0 12 1; #X connect 5 0 12 0; #X connect 6 0 5 0; #X connect 7 0 12 0; #X connect 8 0 9 0; #X connect 9 0 12 0; #X connect 12 0 4 0; #X connect 12 1 10 0; #X restore 133 428 pd adaptive_filter~; #X text 257 404 d[n]; #X text 140 447 y[n]; #N canvas 0 0 450 300 speech_sample~ 0; #X obj 15 26 inlet; #X obj 44 262 outlet~; #X obj 45 202 readsf~; #X msg 45 144 open /win/Georg/pd/holzilib/samples/Mandarin.wav; #X obj 130 80 openpanel; #X obj 130 57 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X msg 130 105 set open \$1; #X obj 89 224 t b b; #X msg 73 170 1; #X obj 15 83 t f b; #X obj 183 41 inlet; #X connect 0 0 9 0; #X connect 2 0 1 0; #X connect 2 1 7 0; #X connect 3 0 2 0; #X connect 4 0 6 0; #X connect 5 0 4 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X connect 7 1 3 0; #X connect 8 0 2 0; #X connect 9 0 2 0; #X connect 9 1 3 0; #X connect 10 0 4 0; #X restore 135 203 pd speech_sample~; #N canvas 427 384 325 189 delay~ 0; #X obj 15 20 inlet~; #X obj 15 136 outlet~; #X obj 15 47 delwrite~ \$0-line 100; #X obj 15 104 delread~ \$0-line 10; #X text 30 77 10 ms delay; #X connect 0 0 2 0; #X connect 3 0 1 0; #X restore 134 376 pd delay~; #X obj 135 173 tgl 25 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X obj 471 255 spectrum~; #X obj 471 238 r~ adaptive_signal; #X obj 722 238 r scopes_on; #X obj 722 26 r scopes_on; #X text 428 137 (1); #X text 428 338 (2); #X obj 632 26 r tlp; #X obj 632 238 r tlp; #X obj 471 43 spectrum~; #X obj 471 26 r~ input_signal; #X obj 249 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X text 222 167 open sample; #X text 138 178 IO; #X text 25 25 PERIODIC INTERFERENCE CANCELATION WITHOUT AN EXTERNAL REFERENCE SOURCE; #N canvas 609 171 479 356 PROBLEM_DESCRIPTION 0; #X text 119 29 PERIODIC INTERFERENCE CANCELATION; #X text 24 74 In this example the adaptive filter is used as an adaptive linear predictor to remove a periodic interference broadband signal. ; #X text 62 204 LMS \, 100 coefficients (c0 \, c1 \, ...c100) ->sharper filter and less distortion \, step-sze parameter mu; #X text 24 122 A speech signal is used as the broadband signal and a sine is used as the interference signal. The speechsignal serves as input signal and is delayed about 10 ms.; #X text 21 186 adaptive filter:; #X text 29 271 The interference cancelation is sucessfull \, if the inteference signal is removed such that only the speechsignal is audible (prediction error).; #X restore 27 92 pd PROBLEM_DESCRIPTION; #N canvas 852 16 434 175 OBSERVATIONS 0; #X text 17 24 OBSERVATIONS; #X text 15 68 With an order of 100 the interference cancelation works quite well.; #X text 15 106 For lower frequencies (< 300) the cancelation is not as satisfying as for higher frequencies.; #X restore 27 116 pd OBSERVATIONS; #X text 26 71 ReadMe:; #X obj 296 695 tgl 20 0 audio_io empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X text 321 697 <- Audio IO; #X obj 37 699 tgl 20 0 scopes_on empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X text 67 699 <- Visualization IO; #X floatatom 37 732 5 0 100 0 - init_tlp tlp; #X text 81 730 <- temporal lowpass for spectrum view (0...100); #N canvas 752 62 617 210 init 0; #X msg 43 99 2; #X obj 256 43 loadbang; #X obj 43 122 s init_tlp; #X obj 257 122 s mur; #X msg 256 98 0.01; #X msg 515 103 \; pd dsp \$1; #X obj 515 78 r audio_io; #X msg 138 96 90; #X obj 139 122 s vol; #X obj 188 122 s sel_in; #X msg 187 96 0; #X msg 336 89 \; f1 1000 \; f2 8070 \; f3 12050 \; a1 90 \; a2 35 \; a3 68 \;; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 1 0 4 0; #X connect 1 0 7 0; #X connect 1 0 10 0; #X connect 1 0 11 0; #X connect 4 0 3 0; #X connect 6 0 5 0; #X connect 7 0 8 0; #X connect 10 0 9 0; #X restore 750 662 pd init; #X floatatom 371 641 6 0 0 0 - mur mu; #X obj 471 467 spectrum~; #X obj 722 450 r scopes_on; #X obj 632 450 r tlp; #X text 428 550 (3); #X text 269 448 e[n]; #X obj 471 450 r~ filter_signal; #N canvas 647 406 282 264 osci~ 0; #X obj 43 79 osc~ 440; #X obj 44 168 *~; #X obj 147 112 dbtorms; #X obj 43 38 inlet; #X obj 147 38 inlet; #X obj 146 152 line~; #X msg 146 132 \$1 50; #X obj 44 200 outlet~; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 6 0; #X connect 3 0 0 0; #X connect 4 0 2 0; #X connect 5 0 1 1; #X connect 6 0 5 0; #X restore 151 289 pd osci~; #X floatatom 151 261 5 0 20000 1 Hz f1 -; #X floatatom 164 275 4 0 120 1 dB a1 -; #N canvas 647 406 282 264 osci~ 0; #X obj 43 79 osc~ 440; #X obj 44 168 *~; #X obj 147 112 dbtorms; #X obj 43 38 inlet; #X obj 147 38 inlet; #X obj 146 152 line~; #X msg 146 132 \$1 50; #X obj 44 200 outlet~; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 6 0; #X connect 3 0 0 0; #X connect 4 0 2 0; #X connect 5 0 1 1; #X connect 6 0 5 0; #X restore 218 289 pd osci~; #X floatatom 218 261 5 0 20000 1 Hz f2 -; #X floatatom 231 275 4 0 120 1 dB a2 -; #N canvas 647 406 282 264 osci~ 0; #X obj 43 79 osc~ 440; #X obj 44 168 *~; #X obj 147 112 dbtorms; #X obj 43 38 inlet; #X obj 147 38 inlet; #X obj 146 152 line~; #X msg 146 132 \$1 50; #X obj 44 200 outlet~; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 6 0; #X connect 3 0 0 0; #X connect 4 0 2 0; #X connect 5 0 1 1; #X connect 6 0 5 0; #X restore 285 289 pd osci~; #X floatatom 285 261 5 0 20000 1 Hz f3 -; #X floatatom 298 275 4 0 120 1 dB a3 -; #X text 150 238 interference signals:; #N canvas 880 450 292 275 input~ 0; #X obj 17 24 inlet~; #X obj 138 24 inlet~; #X obj 18 89 +~; #X obj 19 121 *~ 0.1; #X obj 19 225 outlet~; #X obj 47 169 s~ input_signal; #X connect 0 0 2 0; #X connect 1 0 2 1; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 3 0 5 0; #X restore 134 321 pd input~; #N canvas 880 302 450 408 audio_out~ 0; #X obj 67 41 inlet; #X text 63 24 volume; #X obj 272 37 inlet; #X obj 67 61 dbtorms; #X msg 67 81 \$1 50; #X text 249 21 select insignal; #X obj 272 97 sel 0 1 2; #X msg 68 150 1 50; #X msg 105 150 0 50; #X obj 68 177 line~; #X obj 51 219 *~; #X msg 199 149 1 50; #X msg 236 149 0 50; #X obj 199 176 line~; #X obj 182 219 *~; #X msg 310 150 1 50; #X msg 347 150 0 50; #X obj 310 177 line~; #X obj 293 219 *~; #X obj 293 198 r~ filter_signal; #X obj 52 289 *~; #X obj 67 262 line~; #X obj 52 364 dac~ 1 2; #X obj 158 364 outlet; #X obj 182 198 r~ input_signal; #X obj 51 198 r~ adaptive_signal; #X connect 0 0 3 0; #X connect 0 0 23 0; #X connect 2 0 6 0; #X connect 3 0 4 0; #X connect 4 0 21 0; #X connect 6 0 7 0; #X connect 6 0 12 0; #X connect 6 0 16 0; #X connect 6 1 11 0; #X connect 6 1 8 0; #X connect 6 1 16 0; #X connect 6 2 15 0; #X connect 6 2 12 0; #X connect 6 2 8 0; #X connect 7 0 9 0; #X connect 8 0 9 0; #X connect 9 0 10 1; #X connect 10 0 20 0; #X connect 11 0 13 0; #X connect 12 0 13 0; #X connect 13 0 14 1; #X connect 14 0 20 0; #X connect 15 0 17 0; #X connect 16 0 17 0; #X connect 17 0 18 1; #X connect 18 0 20 0; #X connect 19 0 18 0; #X connect 20 0 22 0; #X connect 20 0 22 1; #X connect 21 0 20 1; #X connect 24 0 14 0; #X connect 25 0 10 0; #X restore 35 586 pd audio_out~; #X floatatom 35 605 5 0 0 1 dB - -; #X obj 35 450 vsl 20 128 0 127 0 0 empty vol empty 0 -8 0 8 -262144 -1 -1 9000 1; #X obj 130 543 vradio 20 1 0 3 empty sel_in empty 0 -6 0 8 -262144 -1 -1 0; #X text 233 640 learning rate (mu):; #X obj 260 465 s~ adaptive_signal; #X obj 134 465 s~ filter_signal; #X text 152 545 filtered output (e[n]); #X text 104 340 x[n]; #X text 152 565 input signal (x[n] \, d[n]); #X text 153 584 periodic signal (y[n]); #X text 34 432 vol; #X text 120 525 select; #X text 496 689 VISUALIZATIONS:; #X text 529 711 (1) input signal (= voice + sine); #X text 529 741 (3) y[n] (~ only sine); #X text 529 726 (2) error signal (~ only voice); #X text 47 259 modify freq ->; #X connect 0 0 54 0; #X connect 0 1 53 0; #X connect 3 0 47 0; #X connect 4 0 0 0; #X connect 5 0 3 0; #X connect 7 0 6 0; #X connect 8 0 6 2; #X connect 9 0 14 2; #X connect 12 0 14 1; #X connect 13 0 6 1; #X connect 15 0 14 0; #X connect 16 0 3 1; #X connect 32 0 31 2; #X connect 33 0 31 1; #X connect 36 0 31 0; #X connect 37 0 47 1; #X connect 38 0 37 0; #X connect 39 0 37 1; #X connect 40 0 47 1; #X connect 41 0 40 0; #X connect 42 0 40 1; #X connect 43 0 47 1; #X connect 44 0 43 0; #X connect 45 0 43 1; #X connect 47 0 0 1; #X connect 47 0 4 0; #X connect 48 0 49 0; #X connect 50 0 48 0; #X connect 51 0 48 1;