fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Mon May 14 14:12:32 2018 +0000
Revision:
0:f736749c33d2
Child:
2:0c241937eabd
set up config parser

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gwappa 0:f736749c33d2 1 #include "random.h"
gwappa 0:f736749c33d2 2 #include "mbed.h"
gwappa 0:f736749c33d2 3 #include <limits.h>
gwappa 0:f736749c33d2 4
gwappa 0:f736749c33d2 5 namespace random
gwappa 0:f736749c33d2 6 {
gwappa 0:f736749c33d2 7 AnalogIn noise(RANDOM_NOISE_PIN);
gwappa 0:f736749c33d2 8
gwappa 0:f736749c33d2 9 void init() {
gwappa 0:f736749c33d2 10 srand(noise.read_u16());
gwappa 0:f736749c33d2 11 }
gwappa 0:f736749c33d2 12
gwappa 0:f736749c33d2 13 uint16_t exponential(const uint16_t& tau_ms, const uint16_t& cutoff, const unsigned int& resolution){
gwappa 0:f736749c33d2 14 double ftau = (double)tau_ms;
gwappa 0:f736749c33d2 15 double fcutoff = (double)cutoff;
gwappa 0:f736749c33d2 16 double cumulativeFraction = ((double)(rand() & resolution))/resolution;
gwappa 0:f736749c33d2 17
gwappa 0:f736749c33d2 18 // calculate the point (in exponential distribution) from the inverse of its cumulative density function
gwappa 0:f736749c33d2 19 double point = -ftau * log(1-cumulativeFraction);
gwappa 0:f736749c33d2 20
gwappa 0:f736749c33d2 21 // return as uint16 value.
gwappa 0:f736749c33d2 22 // if `point` is unreasonably long, then return `cutoff` instead.
gwappa 0:f736749c33d2 23 if (point > fcutoff) {
gwappa 0:f736749c33d2 24 return cutoff;
gwappa 0:f736749c33d2 25 } else {
gwappa 0:f736749c33d2 26 return (uint16_t)(point+0.5);
gwappa 0:f736749c33d2 27 }
gwappa 0:f736749c33d2 28 }
gwappa 0:f736749c33d2 29 }