Hi, I made two generators for Gaussian white noise, one using DSP, the other as message based version. Both use the same algorithm, but the histogram analysis of both shows a defect with the message version: The histogram has a visible "valley" around the central expectation value, so it doesn't look like a real gaussian bell curve anymore.
The message version is based on [random] not [noise~], and I "faked" a true frand by taking and scaling random values from the range 0-100000. Could this be the reason for the valleys or is the reason the custom algorithm [random] uses or is it, that two [random]s are not sufficiently independent? Ciao -- Frank
#N canvas 96 55 817 467 10; #X floatatom 81 182 5 0 0 0 - - -; #N canvas 484 63 422 413 histogram-view 0; #X obj 119 119 int; #X obj 119 181 t f f; #X obj 119 203 tabread \$0-histo; #X obj 119 323 tabwrite \$0-histo; #X obj 119 64 * 10000; #X obj 119 86 + 10000; #X obj 119 245 + 0.05; #X obj 119 24 inlet; #X obj 119 272 clip 0 1; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 1 3 1; #X connect 2 0 6 0; #X connect 4 0 5 0; #X connect 5 0 0 0; #X connect 6 0 8 0; #X connect 7 0 4 0; #X connect 8 0 3 0; #X restore 249 235 pd histogram-view; #N canvas 0 0 450 300 (subpatch) 0; #X array \$0-histo 20000 float 0; #X coords 0 1 19999 0 200 140 1; #X restore 465 177 graph; #X msg 81 118 bang; #X obj 307 117 s \$0-histo; #X obj 249 150 until; #X obj 249 127 max; #X msg 307 94 const 0; #X obj 249 178 gaussian-random 0 0.01; #X msg 249 94 10000; #X msg 212 45 seed1 12 \, seed2 192313; #X obj 81 145 gaussian-random; #X connect 3 0 11 0; #X connect 5 0 8 0; #X connect 6 0 5 0; #X connect 7 0 4 0; #X connect 8 0 1 0; #X connect 9 0 6 0; #X connect 10 0 8 0; #X connect 11 0 0 0;
#N canvas 309 24 864 609 10; #X text 337 37 Simplified Box-Muller method as described on: http://www.dspguru.com/dsp/howtos/how-to-generate-white-gaussian-noise ; #X text 53 143 V1; #X text 211 143 V2; #X text 136 212 S; #X text 84 482 X; #X obj 320 176 inlet; #X text 325 152 variance; #X obj 108 384 sqrt; #X obj 266 178 inlet; #X text 270 153 mean; #X obj 318 210 loadbang; #X obj 318 263 select 0; #X msg 318 291 1; #X obj 318 239 f \$2; #X obj 82 144 t f f f; #X obj 146 144 t f f; #X obj 135 178 *; #X obj 101 178 *; #X obj 101 210 +; #X obj 102 237 log; #X obj 102 264 /; #X obj 102 291 * -2; #X obj 102 318 sqrt; #X obj 83 354 *; #X obj 83 409 * 1; #X obj 83 433 + \$1; #X obj 83 458 outlet; #X obj 82 77 t b b; #X obj 82 48 route bang seed1 seed2; #X msg 134 74 seed \$1; #X msg 205 76 seed \$1; #X obj 82 18 inlet; #N canvas 0 0 645 530 frand 0; #X obj 119 183 outlet; #X obj 119 41 inlet; #X obj 119 105 random 1e+06; #X obj 119 151 / 1e+06; #X obj 119 128 - 500000; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 3 0 0 0; #X connect 4 0 3 0; #X restore 146 111 pd frand; #N canvas 0 0 645 530 frand 0; #X obj 119 183 outlet; #X obj 119 41 inlet; #X obj 119 105 random 1e+06; #X obj 119 151 / 1e+06; #X obj 119 128 - 500000; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 3 0 0 0; #X connect 4 0 3 0; #X restore 82 112 pd frand; #X connect 5 0 7 0; #X connect 7 0 24 1; #X connect 8 0 25 1; #X connect 10 0 13 0; #X connect 11 0 12 0; #X connect 11 1 7 0; #X connect 12 0 7 0; #X connect 13 0 11 0; #X connect 14 0 23 0; #X connect 14 1 17 0; #X connect 14 2 17 1; #X connect 15 0 16 0; #X connect 15 1 16 1; #X connect 16 0 18 1; #X connect 17 0 18 0; #X connect 18 0 19 0; #X connect 18 0 20 1; #X connect 19 0 20 0; #X connect 20 0 21 0; #X connect 21 0 22 0; #X connect 22 0 23 1; #X connect 23 0 24 0; #X connect 24 0 25 0; #X connect 25 0 26 0; #X connect 27 0 33 0; #X connect 27 1 32 0; #X connect 28 0 27 0; #X connect 28 1 29 0; #X connect 28 2 30 0; #X connect 29 0 33 0; #X connect 30 0 32 0; #X connect 31 0 28 0; #X connect 32 0 15 0; #X connect 33 0 14 0;
#N canvas 426 51 797 591 10; #N canvas 0 0 450 300 (subpatch) 0; #X array \$0-gaussian 20000 float 2; #X coords 0 1 20000 -1 200 140 1; #X restore 355 158 graph; #X obj 79 189 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X floatatom 162 70 5 0 500 1 variance - -; #X obj 162 89 / 100; #X obj 217 116 tgl 15 0 empty empty switch 17 7 0 10 -262144 -1 -1 0 1; #X floatatom 108 32 5 0 0 1 mean - -; #X obj 108 51 / 100; #X obj 107 216 tabwrite~ \$0-gaussian; #X text 254 15 Gaussian White Noise; #X obj 230 141 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #N canvas 484 63 814 486 histogram-view 0; #N canvas 0 0 450 300 countto 0; #X obj 99 58 inlet; #X obj 99 177 f 0; #X obj 127 177 + 1; #X msg 142 143 0; #X obj 99 208 outlet; #X obj 99 142 until; #X obj 99 117 t a b; #X obj 99 96 max; #X connect 0 0 7 0; #X connect 1 0 2 0; #X connect 1 0 4 0; #X connect 2 0 1 1; #X connect 3 0 1 1; #X connect 5 0 1 0; #X connect 6 0 5 0; #X connect 6 1 3 0; #X connect 7 0 6 0; #X restore 119 117 pd countto; #X obj 119 162 tabread \$0-gaussian; #X obj 119 249 int; #X obj 119 271 t f f; #X obj 119 293 tabread \$0-histo; #X obj 119 383 tabwrite \$0-histo; #X msg 202 84 const 0; #X obj 202 117 s \$0-histo; #X obj 119 194 * 10000; #X obj 119 216 + 10000; #X msg 119 55 20000; #X obj 119 81 t f b; #X obj 119 335 + 0.05; #X obj 119 24 inlet; #X obj 119 357 clip 0 3; #X connect 0 0 1 0; #X connect 1 0 8 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 3 1 5 1; #X connect 4 0 12 0; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 9 0 2 0; #X connect 10 0 11 0; #X connect 11 0 0 0; #X connect 11 1 6 0; #X connect 12 0 14 0; #X connect 13 0 10 0; #X connect 14 0 5 0; #X restore 79 342 pd histogram-view; #X obj 589 85 loadbang; #X msg 589 108 \; pd dsp 1; #X text 563 215 20000 samples; #N canvas 0 0 450 300 (subpatch) 0; #X array \$0-histo 20000 float 0; #X coords 0 1 19999 0 200 140 1; #X restore 44 399 graph; #X obj 79 274 / 44.1; #X msg 79 253 20000; #X obj 79 316 delay; #X text 85 293 delay until \$0-gaussian is filled.; #X obj 108 141 gaussian~ 0 0.01; #X connect 1 0 7 0; #X connect 1 0 16 0; #X connect 2 0 3 0; #X connect 2 0 1 0; #X connect 3 0 19 1; #X connect 4 0 19 2; #X connect 5 0 6 0; #X connect 5 0 1 0; #X connect 6 0 19 0; #X connect 9 0 7 0; #X connect 9 0 19 2; #X connect 11 0 12 0; #X connect 15 0 17 0; #X connect 16 0 15 0; #X connect 17 0 10 0; #X connect 19 0 7 0;
#N canvas 491 164 699 489 10; #X obj 82 103 noise~; #X obj 101 137 *~; #X obj 169 102 noise~; #X obj 135 137 *~; #X obj 102 169 +~; #X text 52 31 Simplified Box-Muller method as described on: http://www.dspguru.com/dsp/howtos/how-to-generate-white-gaussian-noise ; #X obj 102 196 log~; #X obj 102 223 /~; #X obj 102 250 *~ -2; #X obj 83 313 *~; #X text 53 102 V1; #X text 227 97 V2; #X text 137 171 S; #X obj 82 417 outlet~; #X text 83 441 X; #X obj 320 135 inlet; #X text 325 111 variance; #X obj 107 343 sqrt; #X obj 82 368 *~ 1; #X obj 266 137 inlet; #X text 270 112 mean; #X obj 417 134 inlet; #X obj 417 177 switch~; #X text 417 110 switch; #X obj 477 131 loadbang; #X msg 477 152 1; #X obj 318 169 loadbang; #X obj 318 222 select 0; #X msg 318 250 1; #X obj 318 198 f \$2; #X obj 83 392 +~ \$1; #X obj 102 277 sqrt~; #X connect 0 0 1 0; #X connect 0 0 1 1; #X connect 0 0 9 0; #X connect 1 0 4 0; #X connect 2 0 3 0; #X connect 2 0 3 1; #X connect 3 0 4 1; #X connect 4 0 6 0; #X connect 4 0 7 1; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 31 0; #X connect 9 0 18 0; #X connect 15 0 17 0; #X connect 17 0 18 1; #X connect 18 0 30 0; #X connect 19 0 30 1; #X connect 21 0 22 0; #X connect 24 0 25 0; #X connect 25 0 22 0; #X connect 26 0 29 0; #X connect 27 0 28 0; #X connect 27 1 17 0; #X connect 28 0 17 0; #X connect 29 0 27 0; #X connect 30 0 13 0; #X connect 31 0 9 1;
_______________________________________________ Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list