#N canvas 378 124 615 479 10;
#X obj 98 256 *~;
#X obj 113 232 line~;
#X obj 22 188 cos~;
#X obj 22 163 +~;
#X obj 113 209 pack 0 50;
#X floatatom 113 161 0 0 300 0 - - -;
#X obj 113 185 / 100;
#X obj 22 138 phasor~;
#X obj 24 349 output~;
#X obj 23 318 hip~;
#N canvas 62 299 558 609 fft 0;
#X obj 19 61 inlet~;
#X obj 208 212 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 16 425 samplerate~;
#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 16 472 5 0 0 0 - - -, f 5;
#X obj 16 448 / 256;
#X obj 16 378 loadbang;
#X obj 72 494 s fundamental;
#X text 14 319 At load time \, calculate a good choice of fundamental
frequency for showing spectra: the 16th bin in a 4096-point spectrum
\, so SR*16/4096 or SR/256.;
#X obj 220 257 metro 500;
#X obj 220 234 inlet;
#X text 273 232 toggle to graph repeatedly;
#X text 262 212 bang to graph once;
#X obj 16 494 t b f;
#X obj 19 295 tabwrite~ E10-signal;
#X obj 208 295 tabwrite~ E10-spectrum;
#X text 72 536 set carrier multiplier and modulation multipliers after
fundamental;
#X msg 16 516 \; cm 8 \; m1 2 \; m2 3;
#X connect 0 0 2 0;
#X connect 0 0 27 0;
#X connect 1 0 27 0;
#X connect 1 0 28 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 28 0;
#X connect 15 0 18 0;
#X connect 16 0 15 0;
#X connect 17 0 26 0;
#X connect 18 0 17 0;
#X connect 19 0 16 0;
#X connect 22 0 27 0;
#X connect 22 0 28 0;
#X connect 23 0 22 0;
#X connect 26 0 30 0;
#X connect 26 1 20 0;
#X restore 69 320 pd fft;
#X obj 129 299 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 129 320 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 150 319 <-- repeatedly;
#X text 151 299 <-- graph once;
#N canvas 0 0 450 300 (subpatch) 0;
#X array E10-spectrum 259 float 0;
#X coords 0 2100 258 -20 259 130 1;
#X restore 320 151 graph;
#X text 350 282 2;
#X text 381 282 4;
#X text 320 282 0;
#X text 379 299 -- partial number --;
#X text 414 133 SPECTRUM;
#X text 583 268 0;
#X text 584 150 0.5;
#X obj 97 137 osc~;
#X obj 271 88 r fundamental;
#X text 413 282 6;
#X text 446 282 8;
#X text 470 283 10;
#X text 502 283 12;
#X text 534 283 14;
#X floatatom 22 67 3 0 15 0 - - -, f 3;
#X obj 22 114 *;
#X obj 22 42 r cm;
#X text 27 82 carrier;
#X obj 97 116 *;
#X floatatom 97 67 3 0 15 0 - - -, f 3;
#X text 103 83 mod 1;
#X obj 97 42 r m1;
#X text 142 163 index1;
#X obj 201 258 *~;
#X obj 216 234 line~;
#X obj 216 211 pack 0 50;
#X floatatom 216 163 0 0 300 0 - - -;
#X obj 216 187 / 100;
#X obj 200 139 osc~;
#X obj 200 118 *;
#X floatatom 200 67 3 0 15 0 - - -, f 3;
#X text 206 85 mod 2;
#X text 250 163 index2;
#X obj 200 42 r m2;
#X text 130 358 Now we introduce a second modulator oscillator. The
carrier is on the 8th harmonic and the two modulators are at 2 and
3 times the fundamental. When either index of modulation is zero \,
changing the other index gives the familiar 2-operator FM result. But
if index2 is nonzero (try around 10 \, for example) then sliding index1
upward from 0 introduces sidebands around each of the sidebands.;
#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header spectrum_of_complex_phase_modulation
20 10 1 18 -261139 -33289 0;
#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
;
#X obj 1 457 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
14 -233017 -33289 0;
#N canvas 44 246 494 284 META 0;
#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
#X text 12 105 AUTHOR Miller Puckette;
#X text 12 85 LIBRARY PDDP;
#X text 12 5 GENRE tutorial;
#X text 12 45 LICENSE SIBSD;
#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
Wilkes revised the patch to conform to the PDDP template for Pd version
0.42.;
#X text 12 25 KEYWORDS signal;
#X text 12 65 DESCRIPTION spectrum of complex phase modulation;
#X restore 392 459 pd META;
#N canvas 13 202 428 190 References 0;
#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -261139 -33289 0;
#X text 7 2 complex phase modulation- Related Help Documents;
#X text 19 37 links:;
#X restore 103 459 pd References;
#X obj 6 459 pddp/pddplink ../5.reference/pddp/help.pd -text help;
#X connect 0 0 3 1;
#X connect 1 0 0 1;
#X connect 2 0 9 0;
#X connect 2 0 10 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;
#X connect 5 0 6 0;
#X connect 6 0 4 0;
#X connect 7 0 3 0;
#X connect 9 0 8 0;
#X connect 9 0 8 1;
#X connect 11 0 10 1;
#X connect 12 0 10 2;
#X connect 23 0 0 0;
#X connect 24 0 31 1;
#X connect 24 0 34 1;
#X connect 24 0 45 1;
#X connect 30 0 31 0;
#X connect 31 0 7 0;
#X connect 32 0 30 0;
#X connect 34 0 23 0;
#X connect 35 0 34 0;
#X connect 37 0 35 0;
#X connect 39 0 3 1;
#X connect 40 0 39 1;
#X connect 41 0 40 0;
#X connect 42 0 43 0;
#X connect 43 0 41 0;
#X connect 44 0 39 0;
#X connect 45 0 44 0;
#X connect 46 0 45 0;
#X connect 49 0 46 0;
