#N canvas 406 70 698 565 12;
#X declare -stdpath ./;
#X obj 186 394 cos~;
#X floatatom 176 182 4 0 200 0 - - - 0;
#X obj 176 205 / 10;
#X floatatom 120 224 4 0 0 0 - - - 0;
#X text 72 186 fundamental;
#X text 65 201 (= mod freq);
#X text 252 192 index;
#X text 252 212 (percent);
#X floatatom 252 233 4 0 500 0 - - - 0;
#X obj 252 302 line~;
#X obj 204 336 *~;
#X obj 252 256 / 100;
#X obj 252 279 pack 0 50;
#X obj 186 371 +~;
#X text 240 328 modulating;
#X text 240 343 oscillator;
#X obj 186 482 output~;
#X obj 186 441 hip~;
#X obj 259 388 bng 17 250 50 0 empty empty empty 0 -6 0 8 #dfdfdf #000000
#000000;
#X obj 279 415 tgl 17 0 empty empty empty 0 -6 0 8 #dfdfdf #000000
#000000 0 1;
#X text 457 505 updated for Pd version 0.37;
#N canvas 0 0 450 300 (subpatch) 0;
#X array F11-spectrum 259 float 0;
#X coords 0 0.51 258 -0.008 256 130 1;
#X restore 384 181 graph;
#X text 376 312 0;
#X text 438 322 -- frequency --;
#X text 613 317 2700;
#X obj 176 254 *;
#X obj 176 231 t b f;
#X obj 204 307 osc~;
#X obj 141 328 phasor~;
#X text 53 61 Here's what happens if you just slide the carrier frequency
around. The spectrum moves up and down all right \, but is only periodic
at the original period when the center frequency roosts on a harmonic.
, f 67;
#X text 83 321 carrier;
#X text 62 336 oscillator;
#X text 60 24 HOW NOT TO APPLY TWO-COSINE CARRIER TO FM;
#X text 170 130 center freq. (in tenths of fundamental), f 13;
#N canvas 605 126 534 605 fft 0;
#X obj 95 134 inlet~;
#X obj 209 404 inlet;
#X obj 95 266 rfft~;
#X obj 95 299 *~;
#X obj 127 299 *~;
#X obj 127 330 sqrt~;
#X obj 337 244 block~ 4096 1;
#X obj 127 356 biquad~ 0 0 0 0 1;
#X text 159 267 Fourier series;
#X text 173 318 magnitude;
#X text 173 303 calculate;
#X text 52 23 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 88 99 signal to analyze, f 9;
#X text 256 351 delay two samples;
#X text 254 369 for better graphing;
#X obj 202 129 samplerate~;
#X obj 236 463 metro 500;
#X obj 236 440 inlet;
#X text 284 438 toggle to graph repeatedly;
#X text 253 405 bang to graph once;
#X obj 127 380 /~ 4096;
#X obj 202 104 bang~;
#X msg 210 534 \; pd dsp 1;
#X obj 202 152 / 4096;
#X obj 113 184 osc~;
#X obj 113 212 +~ 1;
#X obj 95 237 *~;
#X text 157 197 hanning window;
#X obj 164 142 0.5;
#X obj 236 501 tabwrite~ F11-spectrum;
#X connect 0 0 26 0;
#X connect 1 0 22 0;
#X connect 1 0 29 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 20 0;
#X connect 15 0 23 0;
#X connect 16 0 29 0;
#X connect 17 0 16 0;
#X connect 17 0 22 0;
#X connect 20 0 29 0;
#X connect 21 0 15 0;
#X connect 21 0 28 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 25 0 26 1;
#X connect 26 0 2 0;
#X connect 28 0 24 1;
#X restore 240 441 pd fft;
#X obj 522 22 declare -stdpath ./;
#X text 281 388 <-- graph once;
#X text 300 414 <-- repeatedly;
#X connect 0 0 17 0;
#X connect 0 0 34 0;
#X connect 1 0 2 0;
#X connect 2 0 26 0;
#X connect 3 0 25 0;
#X connect 3 0 27 0;
#X connect 8 0 11 0;
#X connect 9 0 10 1;
#X connect 10 0 13 1;
#X connect 11 0 12 0;
#X connect 12 0 9 0;
#X connect 13 0 0 0;
#X connect 17 0 16 0;
#X connect 17 0 16 1;
#X connect 18 0 34 1;
#X connect 19 0 34 2;
#X connect 25 0 28 0;
#X connect 26 0 25 0;
#X connect 26 1 25 1;
#X connect 27 0 10 0;
#X connect 28 0 13 0;
