#N canvas 10 23 1319 711 10;
#N canvas 128 22 291 357 feedback 0;
#X obj 136 207 block~ 1;
#X obj 50 287 outlet~;
#X obj 105 168 *~;
#X obj 50 204 +~;
#X obj 105 111 line~;
#X obj 80 243 delwrite~ \$0-fb 1000;
#X msg 105 84 \$1 10;
#X obj 50 53 inlet~;
#X obj 175 172 line~;
#X msg 175 145 \$1 10;
#X obj 105 52 inlet;
#X obj 105 143 vd~ \$0-fb;
#X obj 175 53 inlet;
#X text 107 30 tempo;
#X text 166 32 feedback;
#X text 48 29 input;
#X connect 2 0 3 1;
#X connect 3 0 1 0;
#X connect 3 0 5 0;
#X connect 4 0 11 0;
#X connect 6 0 4 0;
#X connect 7 0 3 0;
#X connect 8 0 2 1;
#X connect 9 0 8 0;
#X connect 10 0 6 0;
#X connect 11 0 2 0;
#X connect 12 0 9 0;
#X restore 106 525 pd feedback;
#X obj 92 555 output~;
#X obj 69 477 noise~;
#X obj 197 503 hsl 128 15 0 0.99 0 0 empty feedback empty -2 -6 0 8
-204800 -1 -1 10904 1;
#X floatatom 194 527 0 0 0 0 - - -;
#X floatatom 137 490 5 0 0 0 - - -;
#X obj 140 465 hsl 128 15 0.1 500 1 0 empty tempo empty -2 -6 0 8 -183917
-1 -1 0 1;
#X text 257 528 feedback;
#X text 274 463 tempo (ms);
#X floatatom 547 250 5 0 0 0 - - -;
#X floatatom 547 305 5 0 0 0 - - -;
#X obj 547 275 expr 1000 / $f1;
#X text 524 251 Hz;
#X text 526 303 ms;
#N canvas 217 82 291 357 feedback 0;
#X obj 136 207 block~ 1;
#X obj 50 287 outlet~;
#X obj 105 168 *~;
#X obj 50 204 +~;
#X obj 105 111 line~;
#X msg 105 84 \$1 10;
#X obj 50 53 inlet~;
#X obj 185 172 line~;
#X msg 185 145 \$1 10;
#X obj 105 52 inlet;
#X obj 185 53 inlet;
#X text 107 30 tempo;
#X text 176 32 feedback;
#X text 48 29 input;
#X obj 80 243 delwrite~ \$0-fb2 1000;
#X obj 105 143 vd~ \$0-fb2;
#X connect 2 0 3 1;
#X connect 3 0 1 0;
#X connect 3 0 14 0;
#X connect 4 0 15 0;
#X connect 5 0 4 0;
#X connect 6 0 3 0;
#X connect 7 0 2 1;
#X connect 8 0 7 0;
#X connect 9 0 5 0;
#X connect 10 0 8 0;
#X connect 15 0 2 0;
#X restore 516 339 pd feedback;
#X obj 503 370 output~;
#X obj 476 275 noise~;
#X obj 607 317 hsl 128 15 0 0.99 0 0 empty feedback empty -2 -6 0 8
-204800 -1 -1 10904 1;
#X floatatom 604 341 0 0 0 0 - - -;
#X text 642 298 feedback;
#X text 401 16 Perceba que \, para um tempo de delay bem curto e um
valor de feebback alto \, o ruído branco é filtrado de tal modo que
soa de forma harmônica \, onde até percebemos uma altura.;
#X text 403 75 De fato percebemos a altura relacionada à freequência
do período determinado pelo tempo do delay. Por exemplo \, um delay
de 10 ms em feedback determina um período de repetição de 10 ms. Qualquer
coisa que se repete a cada 10 ms possui uma frequência de repetição
\, que é o inverso do período. Ou seja \, 10 ms é 100 Hz.;
#X text 403 170 É fácil converter frequência em período em ms \, basta
inverter e multiplicar por 1000! Pronto \, agora temos o controle de
tempo em função da frequência.;
#X text 399 587 ============================================================
;
#X text 22 632 O Filtro de Pente tem esse nome porque sua resposta
de frequência possui vários picos de amplitude lado a lado \, num formato
de pente mesmo. Esses picos formam uma série harmônica \, que é a série
relacionada ao período do delay.;
#X text 409 617 Tendo como exemplo o ruído branco filtrado apresentado
aqui no patch \, percebemos que a linha de delay em feedback é capaz
de filtrar essa entrada ruidosa do filtro de forma harmônica \, a partir
de uma frequência fundamental que é o período do delay.;
#X text 18 20 Como vimos \, o [comb~] é um tipo genérico de Comb Filter
(filtro de pente). Sendo o [teeth~] ainda mais genérico \, cujo diagrama
e equação de diferença encontram-se abaixo:;
#X text 9 609 ============================================================
;
#X obj 473 437 cnv 15 190 140 empty empty empty 20 12 0 14 -233017
-66577 0;
#X text 592 463 |;
#X text 592 473 |;
#X text 592 484 |;
#X text 573 495 |;
#X text 615 495 |;
#X text 615 515 |;
#X text 573 515 |;
#X text 576 486 _______;
#X text 576 515 _______;
#X text 592 487 v;
#X text 537 486 |;
#X text 537 498 |;
#X text 537 462 |;
#X text 537 474 |;
#X text 537 459 ^;
#X text 603 445 >;
#X text 573 505 | z^-d |;
#X text 592 453 |;
#X text 484 446 x[n] ---(+)--------- y[n];
#X text 497 546 y[n] = x[n] + a * x[n-d];
#X obj 38 76 cnv 15 290 110 empty empty empty 20 12 0 14 -233017 -66577
0;
#X text 92 88 |;
#X text 92 100 |;
#X text 92 112 |;
#X text 73 123 |;
#X text 115 123 |;
#X text 115 143 |;
#X text 73 143 |;
#X text 76 114 _______;
#X text 76 143 _______;
#X text 92 115 v;
#X text 154 115 |;
#X text 154 126 |;
#X text 154 96 |;
#X text 154 105 |;
#X text 154 91 ^;
#X text 238 89 |;
#X text 238 101 |;
#X text 238 113 |;
#X text 219 124 |;
#X text 261 124 |;
#X text 261 144 |;
#X text 219 144 |;
#X text 222 115 _______;
#X text 222 144 _______;
#X text 238 116 v;
#X text 184 117 |;
#X text 184 127 |;
#X text 184 95 |;
#X text 184 105 |;
#X text 184 90 ^;
#X text 261 81 >;
#X text 73 133 |z^-d1 |;
#X text 219 134 |z^-d2 |;
#X text 52 165 y[n] = a * x[n] + b * x[n-d1] + c * y[n-d2];
#X text 121 132 -(*b)-;
#X text 185 133 -(*c)-;
#X text 52 82 x[n] -----(*a)--(+)--(+)----------- y[n];
#X text 539 504 -(*a)-;
#X obj 804 543 cnv 15 498 148 empty empty empty 20 12 0 14 -216631
-66577 0;
#N canvas 0 22 450 300 (subpatch) 0;
#X array \$0-Fase 65536 float 0;
#X coords 0 3.14 65535 -3.14 500 150 1;
#X restore 803 542 graph;
#X obj 801 370 cnv 15 498 148 empty empty empty 20 12 0 14 -262011
-66577 0;
#N canvas 0 22 450 300 (subpatch) 0;
#X array \$0-Amp 65536 float 0;
#X coords 0 14.2297 65535 0 500 150 1;
#X restore 800 369 graph;
#X obj 970 283 tabplay~ \$0-IR;
#X obj 970 260 bng 15 250 50 0 empty empty empty 17 7 0 10 -204786
-1 -1;
#X obj 969 311 dac~;
#X text 991 258 Tocar IR;
#N canvas 0 22 305 292 init 0;
#X msg 97 137 \; pd dsp 1;
#X obj 108 67 samplerate~;
#X obj 108 89 / 1000;
#X obj 108 114 v sr_khz;
#X obj 97 43 loadbang;
#X msg 69 183 \; feedback 0.85 \; Hz 100;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 4 0 0 0;
#X connect 4 0 1 0;
#X connect 4 0 5 0;
#X restore 1086 214 pd init;
#X obj 1073 147 hsl 128 15 0 0.99 0 0 empty feedback empty -2 -6 0
8 -204800 -1 -1 12004 1;
#X floatatom 1070 171 0 0 0 0 - - -;
#X text 1108 128 feedback;
#X obj 1002 150 nbx 5 14 -1e+37 1e+37 0 0 empty Hz empty 0 -8 0 10
-261809 -1 -1 50 256;
#X text 1011 127 Hz;
#N canvas 81 160 548 498 FFT 0;
#X obj 227 108 bang~;
#X msg 290 171 1;
#X obj 57 106 rfft~;
#X msg 242 147 0;
#X obj 227 168 f;
#X obj 255 171 + 1;
#X msg 227 216 0;
#X obj 227 192 sel 1;
#X obj 335 267 switch~;
#X obj 206 76 trigger bang bang bang;
#X msg 335 170 set \$1 1;
#X obj 334 120 v w_size;
#X obj 57 72 tabreceive~ \$0-IR;
#X obj 57 133 cartopol~;
#X obj 57 207 tabwrite~ \$0-Amp;
#X obj 108 182 tabwrite~ \$0-Fase;
#X obj 206 7 inlet;
#X obj 407 162 / 2;
#X msg 407 185 resize \$1;
#X obj 407 238 s \$0-Amp;
#X obj 417 215 s \$0-Fase;
#X obj 165 444 s \$0-Amp;
#X obj 132 255 tabdump \$0-Amp;
#X obj 132 288 minmax;
#X obj 165 345 v w_size;
#X obj 165 371 / 2;
#X obj 165 396 pack;
#X msg 165 419 bounds 0 \$2 \$1 0;
#X obj 165 317 trigger bang float;
#X connect 0 0 4 0;
#X connect 1 0 8 0;
#X connect 2 0 13 0;
#X connect 2 1 13 1;
#X connect 3 0 4 1;
#X connect 4 0 5 0;
#X connect 4 0 7 0;
#X connect 5 0 4 1;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X connect 7 0 22 0;
#X connect 9 0 14 0;
#X connect 9 0 15 0;
#X connect 9 1 1 0;
#X connect 9 2 3 0;
#X connect 9 2 11 0;
#X connect 10 0 8 0;
#X connect 11 0 10 0;
#X connect 11 0 17 0;
#X connect 12 0 2 0;
#X connect 13 0 14 0;
#X connect 13 1 15 0;
#X connect 16 0 9 0;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 18 0 20 0;
#X connect 22 0 23 0;
#X connect 23 1 28 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 21 0;
#X connect 28 0 24 0;
#X connect 28 1 26 1;
#X restore 1080 297 pd FFT;
#X obj 1080 268 bng 15 250 50 0 empty empty empty 17 7 0 10 -204800
-1 -1;
#N canvas 257 57 811 616 Gravar-IR 0;
#X msg 186 167 stop;
#X msg 134 167 start;
#X obj 54 208 expr $f1 * sr_khz;
#X obj 87 445 v w_size;
#X obj 54 289 expr (log($f1)/log(2));
#X floatatom 54 367 0 0 0 0 - - -;
#X obj 125 241 v length;
#X obj 54 244 t f f;
#X obj 72 468 s window-size;
#X obj 54 311 expr int($f1 + 1);
#X msg 93 394 resize \$1;
#X obj 93 418 s \$0-IR;
#X obj 54 337 expr pow(2 \, $f1);
#X obj 76 133 select 1 0;
#X obj 174 199 tabwrite~ \$0-IR;
#X obj 76 104 change;
#X msg 198 273 resize \$1;
#X msg 267 294 resize 88200;
#X obj 267 268 loadbang;
#X obj 198 327 s \$0-IR;
#X obj 54 178 timer;
#X obj 174 14 inlet~;
#X obj 76 58 env~ 2048 1024;
#X obj 174 95 delay~ 1024 1024;
#X obj 76 82 > 0;
#X text 385 155 Gravamos na tabela somente quando a análise de amplitude
RMS é maior que 0dB.;
#X text 385 195 Encontramos a maior potencia de dois acima do tamanho
do IR e redimensionamos a tabela gravada para análise.;
#X obj 270 397 cnv 15 198 98 empty empty empty 20 12 0 14 -233017 -66577
0;
#N canvas 0 22 450 300 (subpatch) 0;
#X array \$0-IR 131072 float 0;
#X coords 0 1 131071 -1 200 100 1;
#X restore 269 396 graph;
#X obj 197 56 dac~;
#X connect 0 0 14 0;
#X connect 1 0 14 0;
#X connect 2 0 7 0;
#X connect 4 0 9 0;
#X connect 5 0 8 0;
#X connect 5 0 3 0;
#X connect 5 0 10 0;
#X connect 7 0 4 0;
#X connect 7 1 6 0;
#X connect 7 1 16 0;
#X connect 9 0 12 0;
#X connect 10 0 11 0;
#X connect 12 0 5 0;
#X connect 13 0 1 0;
#X connect 13 0 20 0;
#X connect 13 1 0 0;
#X connect 13 1 20 1;
#X connect 15 0 13 0;
#X connect 16 0 19 0;
#X connect 17 0 19 0;
#X connect 18 0 17 0;
#X connect 20 0 2 0;
#X connect 21 0 22 0;
#X connect 21 0 23 0;
#X connect 21 0 29 0;
#X connect 21 0 29 1;
#X connect 22 0 24 0;
#X connect 23 0 14 0;
#X connect 24 0 15 0;
#X restore 950 213 pd Gravar-IR;
#X text 1101 265 Analisar;
#X obj 950 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -261234
-1 -1;
#X text 833 123 Gerar e Gravar IR;
#X text 853 26 Abaixo gravamos um IR gerado por um Comb Filter. Você
pode tocar o IR e depois analisar para ver a resposta de frequência
e o formato de pente que temos na tabela de amplitude!;
#X text 616 361 a;
#X text 19 204 Dentro das possibilidades \, temos \, basicamente \,
uma linha de delay em feedforward e outra em feedback com seus devidos
coeficientes \, além de um coeficiente de ganho. Em suma \, qualquer
combinação com uma linha de delay em feedback e outra em feedforward
pode ser \, a grosso modo \, considerada como um Comb Filter.;
#X text 20 293 Formas bem simples \, como somente uma linha de feedback
ou de feedforward também são possíveis \, e que podem ser respectivamente
definidas como um Filtro Pente IIR e um Filtro Pente FIR.;
#X text 21 354 Vejamos um Filtro Pente IIR bem simples \, sem feedforward
e com coeficiente de ganho de entrada igual a 1 - veja o diagrama e
equação de diferença logo abaixo à direita. Esse é \, aliás \, exatamente
igual ao primeiro exemplo apresentado sobre delay! Ele está abaixo
em um subpatch para podermos usar um bloco de áudio de apenas uma amostra.
;
#N canvas 217 82 501 518 Comb-Filter-IIR 0;
#X obj 221 335 block~ 1;
#X obj 135 415 outlet~;
#X obj 190 296 *~;
#X obj 135 332 +~;
#X obj 190 239 line~;
#X msg 190 212 \$1 10;
#X obj 135 91 inlet~;
#X obj 300 300 line~;
#X msg 300 273 \$1 10;
#X obj 190 90 inlet;
#X obj 300 91 inlet;
#X text 192 68 tempo;
#X text 291 70 feedback;
#X text 133 67 input;
#X obj 190 140 expr 1000 / $f1;
#X obj 190 269 vd~ \$0-fb3;
#X obj 165 371 delwrite~ \$0-fb3 1000;
#X connect 2 0 3 1;
#X connect 3 0 1 0;
#X connect 3 0 16 0;
#X connect 4 0 15 0;
#X connect 5 0 4 0;
#X connect 6 0 3 0;
#X connect 7 0 2 1;
#X connect 8 0 7 0;
#X connect 9 0 14 0;
#X connect 10 0 8 0;
#X connect 14 0 5 0;
#X connect 15 0 2 0;
#X restore 950 172 pd Comb-Filter-IIR;
#X obj 950 149 click~;
#X obj 823 226 loadbang;
#X msg 823 253 \; pd dsp 1;
#X connect 0 0 1 0;
#X connect 0 0 1 1;
#X connect 2 0 0 0;
#X connect 3 0 4 0;
#X connect 4 0 0 2;
#X connect 5 0 0 1;
#X connect 6 0 5 0;
#X connect 9 0 11 0;
#X connect 10 0 14 1;
#X connect 11 0 10 0;
#X connect 14 0 15 0;
#X connect 14 0 15 1;
#X connect 16 0 14 0;
#X connect 17 0 18 0;
#X connect 18 0 14 2;
#X connect 92 0 94 0;
#X connect 92 0 94 1;
#X connect 93 0 92 0;
#X connect 97 0 98 0;
#X connect 98 0 113 2;
#X connect 100 0 113 1;
#X connect 103 0 102 0;
#X connect 106 0 114 0;
#X connect 113 0 104 0;
#X connect 114 0 113 0;
#X connect 115 0 116 0;
