annotate projects/d-box/PinkNoise.h @ 151:e9c9404e3d1f ClockSync

Pff partially working. No PID. When setting the audio clock on the bbb to 44098 the master and slave clock keep diverging instead of converging ...
author Giulio Moro <giuliomoro@yahoo.it>
date Tue, 22 Sep 2015 04:10:07 +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