annotate projects/d-box/PinkNoise.h @ 68:59edd5780fef

Changed d-box code to run cleanly when built on board. Updated Makefile to add ne10 include path on board. Some extra docs in Utilities.h
author andrewm
date Fri, 17 Jul 2015 16:57:08 +0100
parents 8a575ba3ab52
children
rev   line source
andrewm@0 1 #ifndef _PinkNoise_H
andrewm@0 2 #define _PinkNoise_H
andrewm@0 3
andrewm@0 4 // Technique by Larry "RidgeRat" Trammell 3/2006
andrewm@0 5 // http://home.earthlink.net/~ltrammell/tech/pinkalg.htm
andrewm@0 6 // implementation and optimization by David Lowenfels
andrewm@0 7
andrewm@0 8 #include <cstdlib>
andrewm@0 9 #include <ctime>
andrewm@0 10 #include <stdlib.h>
andrewm@0 11
andrewm@0 12 #define PINK_NOISE_NUM_STAGES 3
andrewm@0 13
andrewm@0 14 class PinkNoise {
andrewm@0 15 public:
andrewm@0 16 PinkNoise() {
andrewm@0 17 srand ( time(NULL) ); // initialize random generator
andrewm@0 18 clear();
andrewm@0 19 }
andrewm@0 20
andrewm@0 21 void clear() {
andrewm@0 22 for( size_t i=0; i< PINK_NOISE_NUM_STAGES; i++ )
andrewm@0 23 state[ i ] = 0.0;
andrewm@0 24 }
andrewm@0 25
andrewm@0 26 float tick() {
andrewm@0 27 static const float RMI2 = 2.0 / float(RAND_MAX); // + 1.0; // change for range [0,1)
andrewm@0 28 static const float offset = A[0] + A[1] + A[2];
andrewm@0 29
andrewm@0 30 // unrolled loop
andrewm@0 31 float temp = float( rand() );
andrewm@0 32 state[0] = P[0] * (state[0] - temp) + temp;
andrewm@0 33 temp = float( rand() );
andrewm@0 34 state[1] = P[1] * (state[1] - temp) + temp;
andrewm@0 35 temp = float( rand() );
andrewm@0 36 state[2] = P[2] * (state[2] - temp) + temp;
andrewm@0 37 return ( A[0]*state[0] + A[1]*state[1] + A[2]*state[2] )*RMI2 - offset;
andrewm@0 38 }
andrewm@0 39
andrewm@0 40 protected:
andrewm@0 41 float state[ PINK_NOISE_NUM_STAGES ];
andrewm@0 42 static const float A[ PINK_NOISE_NUM_STAGES ];
andrewm@0 43 static const float P[ PINK_NOISE_NUM_STAGES ];
andrewm@0 44 };
andrewm@0 45
andrewm@0 46 //const float PinkNoise::A[] = { 0.02109238, 0.07113478, 0.68873558 }; // rescaled by (1+P)/(1-P)
andrewm@0 47 //const float PinkNoise::P[] = { 0.3190, 0.7756, 0.9613 };
andrewm@0 48
andrewm@0 49 #endif