blob: 4c5f3cc81ed2e741a8837228d90e839072e0932a (
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
|
#N canvas 378 114 542 534 12;
#N canvas 371 260 740 538 16x 0;
#X obj 21 269 *~ 0.125;
#X obj 21 292 rzero~ -1;
#X obj 21 315 rzero~ -1;
#X obj 21 338 rzero~ -1;
#X obj 21 66 phasor~;
#X obj 204 29 block~ 1024 1 16;
#X obj 21 31 inlet;
#X obj 21 372 outlet~;
#X obj 20 166 rpole~ 0.87467;
#X obj 20 143 *~ 0.12532;
#X obj 20 189 *~ 0.01668;
#X obj 279 358 buttercoef3;
#X floatatom 279 282 7 0 0 0 - - -;
#X obj 279 332 / 16;
#X floatatom 279 488 7 0 0 0 - - -;
#X obj 279 307 / 22050;
#X floatatom 293 468 7 0 0 0 - - -;
#X floatatom 308 448 7 0 0 0 - - -;
#X floatatom 323 428 7 0 0 0 - - -;
#X floatatom 338 408 7 0 0 0 - - -;
#X floatatom 353 388 7 0 0 0 - - -;
#X text 335 489 normalizer for rpole~;
#X text 352 468 normalizer for cpole~;
#X text 366 449 coef for rpole~;
#X text 382 430 coef for cpole~ real part;
#X text 413 390 coef for cpole~ imag part;
#X text 409 408 (same \, other cpole~);
#X obj 20 212 cpole~ 0.9293 0.10812;
#X obj 20 238 cpole~ 0.9293 -0.10812;
#X msg 279 257 15000;
#X text 329 256 desired cutoff frequency;
#X text 339 308 divide by nyquist frequency of this subpatch \, which
is 22050*16 because of the 16-times oversampling.;
#X text 273 225 Here is how to calculate the filter coefficients:;
#X text 143 123 These objects make a 3-pole \, 3-zero Butterworth low-pass
filter with cutoff at 15kHz (assuming 16x44100 sample rate). The filter
was designed using the "buttercoef3" abstraction introduced in patch
H13.butterworth.pd in this series.;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 7 0;
#X connect 4 0 9 0;
#X connect 6 0 4 0;
#X connect 8 0 10 0;
#X connect 9 0 8 0;
#X connect 10 0 27 0;
#X connect 11 0 14 0;
#X connect 11 1 16 0;
#X connect 11 2 17 0;
#X connect 11 3 18 0;
#X connect 11 4 19 0;
#X connect 11 5 20 0;
#X connect 12 0 15 0;
#X connect 13 0 11 0;
#X connect 15 0 13 0;
#X connect 27 0 28 0;
#X connect 27 1 28 1;
#X connect 28 0 0 0;
#X connect 29 0 12 0;
#X restore 29 123 pd 16x;
#X floatatom 29 86 7 0 0 0 - - -;
#X obj 115 124 phasor~;
#X obj 28 169 output~;
#X obj 114 169 output~;
#X obj 29 58 mtof;
#X floatatom 29 34 3 -24 135 0 - - -;
#X text 158 15 UPSAMPLING TO CONTROL FOLDOVER;
#X text 62 32 <-- pitch;
#X text 132 225 not;
#X text 28 240 sampled;
#X text 32 224 16x up-;
#X text 26 268 The "pd 16x" subpatch at left contains a phasor~ object
\, but is locally upsampled by a factor of sixteen. Without upsampling
\, partials as low as 24 Khz. fold back over into the audible range.
With upsampling \, the first audibly folding over partial is at almost
700 Hz \, 29 times higher. The relevant partials will be 29 times \,
or almost 30 dB \, quieter when upsampled.;
#X text 27 378 A third-order Butterworth filter is used inside the
"pd 16x" subpatch - without that \, the internal signal would fold
over as it gets downsampled at the outlet~ object.;
#X text 312 507 Updated for Pd version 0.42;
#X text 26 430 You can trade off cutoff frequency with foldover. Here
\, the filter is set for a cutoff of 15 kHz. Lowering it to 7500 Hz
would further reduce foldover by 18 dB at the expense of losing energy
in the range 7500-15000 Hz.;
#X connect 0 0 3 0;
#X connect 0 0 3 1;
#X connect 1 0 0 0;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 2 0 4 1;
#X connect 5 0 1 0;
#X connect 6 0 5 0;
|