<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.extremist.software/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=107.10.70.25</id>
	<title>Noisebridge - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.extremist.software/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=107.10.70.25"/>
	<link rel="alternate" type="text/html" href="https://wiki.extremist.software/wiki/Special:Contributions/107.10.70.25"/>
	<updated>2026-04-07T21:58:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Talk:DreamTeam&amp;diff=55969</id>
		<title>Talk:DreamTeam</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Talk:DreamTeam&amp;diff=55969"/>
		<updated>2016-12-22T16:57:16Z</updated>

		<summary type="html">&lt;p&gt;107.10.70.25: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Brainduino images==&lt;br /&gt;
[[File:IMG_9574.jpg]]&lt;br /&gt;
[[File:IMG_9573.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Discussion 14 December 2016==&lt;br /&gt;
Restricted Boltzmann Machine&lt;br /&gt;
* is RBM not an RNN ?&lt;br /&gt;
* summary recollection - RBM is a type of NN.&lt;br /&gt;
Has layers.  Input, output, hidden.  Can have multiple hidden layers.&lt;br /&gt;
Has nodes and weights.&lt;br /&gt;
&lt;br /&gt;
What is a &amp;quot;Recurrent&amp;quot; Neural Network?&lt;br /&gt;
Why not &amp;quot;Recursive&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
How is Error Backpropogation different concept from &amp;quot;Recurrent&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Network architecture ...&lt;br /&gt;
adjust weights within rather than redefine network topology&lt;br /&gt;
&lt;br /&gt;
RNN may have generative capacity.&lt;br /&gt;
&lt;br /&gt;
Recollections of current comprehension:&lt;br /&gt;
* it is restricted.  ie connections not allowed within layer&lt;br /&gt;
&lt;br /&gt;
RBM involves MCMC (Markov chain Monte Carlo) process&lt;br /&gt;
via Gibbs Sampling&lt;br /&gt;
&lt;br /&gt;
relates to Ising Model&lt;br /&gt;
Hopfield nets&lt;br /&gt;
&lt;br /&gt;
==Discussion 07 October 2015==&lt;br /&gt;
Distributed neural networks&lt;br /&gt;
* hadoop - useful to handle reliability when dealing with thousands of servers&lt;br /&gt;
* YARN yet another resource negotiator&lt;br /&gt;
* apache - also mahout&lt;br /&gt;
* task oriented - wants to solve actual data analysis quickly - not energy efficient&lt;br /&gt;
* compare to BOINC or folding@home etc&lt;br /&gt;
* folding@home 40 petaflops - how might this support simulation of something like 10**11 neurons &lt;br /&gt;
* compare to spiNNaker - specialized network for thousands of ARM cores, designed for spiking neural networks but can support traditional backpropagation&lt;br /&gt;
&lt;br /&gt;
==Hacking Hardware==&lt;br /&gt;
Presentation @ Black Hat 2011, discusses JTAG&lt;br /&gt;
https://media.blackhat.com/bh-dc-11/Grand/BlackHat_DC_2011_Grand-Workshop.pdf&lt;br /&gt;
&lt;br /&gt;
==Restricted Boltzmann Machine==&lt;br /&gt;
* roots in Hopfield network&lt;br /&gt;
* relevance of pruning - restricted connectivity makes training feasible for non-trivial number of neurons&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
https://github.com/search?q=neurosky&amp;amp;type=&amp;amp;ref=simplesearch (found 48 repository results)&lt;br /&gt;
&lt;br /&gt;
https://github.com/nbdt == NB dream team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Audio Spectrum Display&lt;br /&gt;
// Copyright 2013 Tony DiCola (tony@tonydicola.com)&lt;br /&gt;
&lt;br /&gt;
// This code is part of the guide at http://learn.adafruit.com/fft-fun-with-fourier-transforms/&lt;br /&gt;
&lt;br /&gt;
#define ARM_MATH_CM4&lt;br /&gt;
#include &amp;lt;arm_math.h&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ebw code&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt; // PROGMEM &lt;br /&gt;
#include &amp;lt;Cycler.h&amp;gt;&lt;br /&gt;
#include &amp;lt;EightBitWaves.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//#define LED_COUNT 13&lt;br /&gt;
//#define LED_CLASS WS2812&lt;br /&gt;
//#define LED_COLOR_ORDER GRB&lt;br /&gt;
#define LED_MAX_BRIGHTNESS 64  // 1/8&lt;br /&gt;
//#define LED_DT 2  // SERIAL DATA PIN&lt;br /&gt;
//#define LED_CK 6  // SERIAL CLOCK PIN&lt;br /&gt;
//#define SERIAL_BAUDRATE 9600&lt;br /&gt;
#define SERIAL_TIMEOUT 5&lt;br /&gt;
&lt;br /&gt;
//Ticker ticker;&lt;br /&gt;
//Cycler hue_cycler, brightness_cycler;&lt;br /&gt;
Cycler brightness_cycler;&lt;br /&gt;
//struct CRGB pixel, fastled_buffer[LED_COUNT];&lt;br /&gt;
&lt;br /&gt;
uint8_t minWave = 0, maxWave = 255;&lt;br /&gt;
uint32_t ticks_per_second = 1000;&lt;br /&gt;
uint32_t prevMillis = millis();&lt;br /&gt;
// ebw code&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// CONIFIGURATION &lt;br /&gt;
// These values can be changed to alter the behavior of the spectrum display.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
#define DEBUG           false&lt;br /&gt;
#define OUTPUT_LED_DATA false&lt;br /&gt;
#define FULL_SET        false&lt;br /&gt;
&lt;br /&gt;
#define BAUD_RATE      38400&lt;br /&gt;
&lt;br /&gt;
#define NUM_LEDS 12&lt;br /&gt;
#define DATA_PIN 2&lt;br /&gt;
&lt;br /&gt;
#define ARRAY_SZ(x)  (sizeof(x) / sizeof((x)[0]))&lt;br /&gt;
&lt;br /&gt;
uint SAMPLE_RATE_HZ = 9000;             // Sample rate of the audio in hertz.&lt;br /&gt;
float SPECTRUM_MIN_DB = 30.0;          // Audio intensity (in decibels) that maps to low LED brightness.&lt;br /&gt;
float SPECTRUM_MAX_DB = 60.0;          // Audio intensity (in decibels) that maps to high LED brightness.&lt;br /&gt;
&lt;br /&gt;
const int FFT_SIZE = 256;              // Size of the FFT.  Realistically can only be at most 256 &lt;br /&gt;
                                       // without running out of memory for buffers and other state.&lt;br /&gt;
const int AUDIO_INPUT_PIN = 14;        // Input ADC pin for audio data.&lt;br /&gt;
const int ANALOG_READ_RESOLUTION = 10; // Bits of resolution for the ADC.&lt;br /&gt;
const int ANALOG_READ_AVERAGING = 16;  // Number of samples to average with each ADC reading.&lt;br /&gt;
&lt;br /&gt;
const int ONBOARD_LED_PIN = 13;        // Output pin for power LED (pin 13 to use Teensy 3.0&#039;s onboard LED).&lt;br /&gt;
&lt;br /&gt;
const int MAX_CHARS = 65;              // Max size of the input command buffer&lt;br /&gt;
&lt;br /&gt;
uint8_t brightness = 128;&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// INTERNAL STATE&lt;br /&gt;
// These shouldn&#039;t be modified unless you know what you&#039;re doing.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
IntervalTimer samplingTimer;&lt;br /&gt;
float samples[FFT_SIZE*2];&lt;br /&gt;
float magnitudes[FFT_SIZE];&lt;br /&gt;
int sampleCounter = 0;&lt;br /&gt;
char commandBuffer[MAX_CHARS];&lt;br /&gt;
float frequencyWindow[NUM_LEDS+1];&lt;br /&gt;
&lt;br /&gt;
boolean ledState = false;&lt;br /&gt;
&lt;br /&gt;
uint loopCounter;&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// setup&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Set up serial port.&lt;br /&gt;
  Serial.begin(BAUD_RATE);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
  loopCounter = 0;&lt;br /&gt;
  &lt;br /&gt;
  // Set up ADC and audio input.&lt;br /&gt;
  pinMode(AUDIO_INPUT_PIN, INPUT);&lt;br /&gt;
  analogReadResolution(ANALOG_READ_RESOLUTION);&lt;br /&gt;
  analogReadAveraging(ANALOG_READ_AVERAGING);&lt;br /&gt;
  &lt;br /&gt;
  // Turn on the power indicator LED.&lt;br /&gt;
  pinMode(ONBOARD_LED_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(ONBOARD_LED_PIN, LOW);&lt;br /&gt;
  &lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, DATA_PIN&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  &lt;br /&gt;
  // Clear the input command buffer&lt;br /&gt;
  memset(commandBuffer, 0, sizeof(commandBuffer));&lt;br /&gt;
  &lt;br /&gt;
  // Initialize spectrum display&lt;br /&gt;
  spectrumSetup();&lt;br /&gt;
//  Serial.println(&amp;quot;** setup() spectrumSetup **********************&amp;quot;);&lt;br /&gt;
//  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  brightness_cycler.setup((float) 6.0, ticks_per_second);&lt;br /&gt;
&lt;br /&gt;
// Begin sampling audio&lt;br /&gt;
  samplingBegin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// loop&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Calculate FFT if a full sample is available.&lt;br /&gt;
  if (samplingIsDone()) {&lt;br /&gt;
    processFFT();&lt;br /&gt;
  }&lt;br /&gt;
  updateBrightness();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// UTILITY FUNCTIONS&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
void updateBrightness() {&lt;br /&gt;
  uint16_t delta_ticks = (uint16_t)(millis() - prevMillis);&lt;br /&gt;
  prevMillis += delta_ticks;&lt;br /&gt;
  brightness_cycler.update(delta_ticks);&lt;br /&gt;
//  unsigned char brightness = EightBitWaves::sine(brightness_cycler.phase(), minWave, maxWave);&lt;br /&gt;
  brightness = EightBitWaves::sine(brightness_cycler.phase(), minWave, maxWave);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void processFFT() {&lt;br /&gt;
    &lt;br /&gt;
  // Run FFT on sample data.&lt;br /&gt;
  arm_cfft_radix4_instance_f32 fft_inst;&lt;br /&gt;
//    These functions have been depricated&lt;br /&gt;
  arm_cfft_radix4_init_f32(&amp;amp;fft_inst, FFT_SIZE, 0, 1);&lt;br /&gt;
  arm_cfft_radix4_f32(&amp;amp;fft_inst, samples);&lt;br /&gt;
&lt;br /&gt;
//    arm_cfft_f32(&amp;amp;fft_inst, samples, 0, 1);&lt;br /&gt;
&lt;br /&gt;
  // Calculate magnitude of complex numbers output by the FFT.&lt;br /&gt;
  arm_cmplx_mag_f32(samples, magnitudes, FFT_SIZE);&lt;br /&gt;
  &lt;br /&gt;
  updateLEDs();&lt;br /&gt;
  &lt;br /&gt;
  // Restart audio sampling.&lt;br /&gt;
  samplingBegin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void outputFFTData() { &lt;br /&gt;
&lt;br /&gt;
  if (DEBUG &amp;amp;&amp;amp; FULL_SET) {&lt;br /&gt;
    Serial.println(&amp;quot;** FFT Data ****************************&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;** Total size of magnitude array: &amp;quot;);&lt;br /&gt;
    Serial.println(sizeof(magnitudes));&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;** Number of elements in magnitude: &amp;quot;);&lt;br /&gt;
    Serial.println(sizeof(magnitudes)/sizeof(*magnitudes));&lt;br /&gt;
&lt;br /&gt;
//  Serial.print(&amp;quot;** Number of elements in magnitude: &amp;quot;);&lt;br /&gt;
//  Serial.println(sizeOfFloatArray(magnitudes));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
//  for (int i = 0; i &amp;lt; sizeof(magnitudes)/sizeof(*magnitudes); ++i) {    // was FFT_SIZE&lt;br /&gt;
  for (size_t i = 0; i &amp;lt; ARRAY_SZ(magnitudes); ++i) {&lt;br /&gt;
    float intensity = magnitudes[i];&lt;br /&gt;
    intensity = 20.0*log10(intensity);&lt;br /&gt;
&lt;br /&gt;
    // Scale the intensity and clamp between 0 and 1.0.&lt;br /&gt;
    intensity -= SPECTRUM_MIN_DB;&lt;br /&gt;
    intensity = intensity &amp;lt; 0.0 ? 0.0 : intensity;&lt;br /&gt;
    intensity /= (SPECTRUM_MAX_DB-SPECTRUM_MIN_DB);&lt;br /&gt;
    intensity = intensity &amp;gt; 1.0 ? 1.0 : intensity;&lt;br /&gt;
&lt;br /&gt;
    if (FULL_SET) {&lt;br /&gt;
      if (DEBUG) {&lt;br /&gt;
        Serial.print(&amp;quot;FFT[&amp;quot;);&lt;br /&gt;
        Serial.print(i);&lt;br /&gt;
        Serial.print(&amp;quot;] = &amp;quot;);&lt;br /&gt;
        Serial.println((byte)(254 * intensity));&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.write((byte)(254 * intensity));&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (FULL_SET) {&lt;br /&gt;
    if (DEBUG) {&lt;br /&gt;
      Serial.println(&amp;quot;** End FFT Results **********************&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.write(255);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
    if (DEBUG) {&lt;br /&gt;
      Serial.print(&amp;quot;FFT[&amp;quot;);&lt;br /&gt;
      Serial.print(i);&lt;br /&gt;
      Serial.print(&amp;quot;] = &amp;quot;);&lt;br /&gt;
      Serial.println(magnitudes[i]);&lt;br /&gt;
    } else {&lt;br /&gt;
//      Serial.write();       // send out the data&lt;br /&gt;
      Serial.write(255);                     // Send stop Byte&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// updateGrnLED&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
void updateGrnLED() {&lt;br /&gt;
  // The measured time between two consecutive events (rock solid on the scope):&lt;br /&gt;
  // FHT_N     mSec  Baud Rate    &lt;br /&gt;
  //&lt;br /&gt;
//  Serial.print(&amp;quot;updateOnboardLED&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(ONBOARD_LED_PIN, HIGH &amp;amp;&amp;amp; ledState);      // turn the LED on or off (HIGH is the voltage level)&lt;br /&gt;
  ledState = !ledState;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// frequencyToBin&lt;br /&gt;
// Function - Convert a frequency to the appropriate FFT bin it will fall within.&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
int frequencyToBin(float frequency) {&lt;br /&gt;
  float binFrequency = float(SAMPLE_RATE_HZ) / float(FFT_SIZE);&lt;br /&gt;
  return int(frequency / binFrequency);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// updateLEDs&lt;br /&gt;
// Function - Processes the FFT data and outputs to LEDs. Update each LED based &lt;br /&gt;
//   on the intensity of the audio in the associated frequency window.&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
void updateLEDs() {&lt;br /&gt;
  float intensity, otherMean;&lt;br /&gt;
&lt;br /&gt;
  if (OUTPUT_LED_DATA &amp;amp;&amp;amp; DEBUG) &lt;br /&gt;
    Serial.println(&amp;quot;** Start LED FFT Results **********************&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  Serial.print(&amp;quot;ARRAY_SZ(leds) = &amp;quot;);&lt;br /&gt;
//  Serial.print(ARRAY_SZ(leds));&lt;br /&gt;
//  Serial.print(&amp;quot;, sizeof magnitudes = &amp;quot;);&lt;br /&gt;
//  Serial.println(ARRAY_SZ(magnitudes));&lt;br /&gt;
&lt;br /&gt;
  for (size_t i = 0; i &amp;lt; ARRAY_SZ(leds); ++i) {&lt;br /&gt;
//    windowMean(magnitudes, &lt;br /&gt;
//               frequencyToBin(frequencyWindow[i]),&lt;br /&gt;
    windowMean(frequencyToBin(frequencyWindow[i]),&lt;br /&gt;
               frequencyToBin(frequencyWindow[i+1]),&lt;br /&gt;
               &amp;amp;intensity,&lt;br /&gt;
               &amp;amp;otherMean);&lt;br /&gt;
&lt;br /&gt;
//    Serial.print(&amp;quot;**1 intensity[&amp;quot;);&lt;br /&gt;
//    Serial.print(i);&lt;br /&gt;
//    Serial.print(&amp;quot;] = &amp;quot;);&lt;br /&gt;
//    Serial.println(intensity);&lt;br /&gt;
&lt;br /&gt;
    // Convert intensity to decibels.&lt;br /&gt;
    intensity = 20.0*log10(intensity);&lt;br /&gt;
&lt;br /&gt;
    // Scale the intensity and clamp between 0 and 1.0.&lt;br /&gt;
    intensity -= SPECTRUM_MIN_DB;&lt;br /&gt;
    intensity = intensity &amp;lt; 0.0 ? 0.0 : intensity;&lt;br /&gt;
    intensity /= (SPECTRUM_MAX_DB-SPECTRUM_MIN_DB);&lt;br /&gt;
    intensity = intensity &amp;gt; 1.0 ? 1.0 : intensity;&lt;br /&gt;
&lt;br /&gt;
//    Serial.print(&amp;quot;**2 intensity[&amp;quot;);&lt;br /&gt;
//    Serial.print(i);&lt;br /&gt;
//    Serial.print(&amp;quot;] = &amp;quot;);&lt;br /&gt;
//    Serial.println(intensity);&lt;br /&gt;
&lt;br /&gt;
    // Output intensity value to LED&lt;br /&gt;
    float newHue = 255*intensity;&lt;br /&gt;
    if (newHue &amp;lt; 64) {&lt;br /&gt;
      newHue = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      newHue = map(newHue, 64, 255, 0, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    leds[i] = CHSV(newHue, 255, brightness);&lt;br /&gt;
    &lt;br /&gt;
    if (OUTPUT_LED_DATA) {&lt;br /&gt;
      if (DEBUG) {&lt;br /&gt;
        Serial.print(&amp;quot;FFT[&amp;quot;);&lt;br /&gt;
        Serial.print(i);&lt;br /&gt;
        Serial.print(&amp;quot;] = &amp;quot;);&lt;br /&gt;
        Serial.println(255.0 * intensity);&lt;br /&gt;
      } else {&lt;br /&gt;
//        Serial.write((byte)(254 * intensity));&lt;br /&gt;
        Serial.write((byte)(newHue));&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (OUTPUT_LED_DATA) {&lt;br /&gt;
    if (DEBUG) {&lt;br /&gt;
      Serial.println(&amp;quot;** End FFT Results **********************&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.write(255);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
//  pixels.show();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// setHSVColor&lt;br /&gt;
// Function - Converts HSV values to RGB and assigns the result to the specified LED&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
void setHSVColor(int ledIndex, float hue, float saturation, float brightness) {&lt;br /&gt;
    uint32_t myColor = pixelHSVtoRGBColor(hue, saturation, brightness);&lt;br /&gt;
    pixels.setPixelColor(ledIndex, myColor);&lt;br /&gt;
&lt;br /&gt;
//    Serial.print(&amp;quot;LED num = &amp;quot;);&lt;br /&gt;
//    Serial.print(ledIndex);&lt;br /&gt;
//    Serial.print(&amp;quot;, color = &amp;quot;);&lt;br /&gt;
//    Serial.println(myColor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// setHSVColor&lt;br /&gt;
// Function - Convert from HSV values to RGB colors usable by neo pixel functions.&lt;br /&gt;
//   hue:        0.0 - 360.0&lt;br /&gt;
//   saturation: 0.0 - 1.0&lt;br /&gt;
//   value:      0.0 - 1.0&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
uint32_t pixelHSVtoRGBColor(float hue, float saturation, float value) {&lt;br /&gt;
  // Implemented from algorithm at http://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV&lt;br /&gt;
  float chroma = value * saturation;&lt;br /&gt;
  float h1 = float(hue)/60.0;&lt;br /&gt;
  float x = chroma*(1.0-fabs(fmod(h1, 2.0)-1.0));&lt;br /&gt;
  float r = 0;&lt;br /&gt;
  float g = 0;&lt;br /&gt;
  float b = 0;&lt;br /&gt;
  if (h1 &amp;lt; 1.0) {&lt;br /&gt;
    r = chroma;&lt;br /&gt;
    g = x;&lt;br /&gt;
  }&lt;br /&gt;
  else if (h1 &amp;lt; 2.0) {&lt;br /&gt;
    r = x;&lt;br /&gt;
    g = chroma;&lt;br /&gt;
  }&lt;br /&gt;
  else if (h1 &amp;lt; 3.0) {&lt;br /&gt;
    g = chroma;&lt;br /&gt;
    b = x;&lt;br /&gt;
  }&lt;br /&gt;
  else if (h1 &amp;lt; 4.0) {&lt;br /&gt;
    g = x;&lt;br /&gt;
    b = chroma;&lt;br /&gt;
  }&lt;br /&gt;
  else if (h1 &amp;lt; 5.0) {&lt;br /&gt;
    r = x;&lt;br /&gt;
    b = chroma;&lt;br /&gt;
  }&lt;br /&gt;
  else // h1 &amp;lt;= 6.0&lt;br /&gt;
  {&lt;br /&gt;
    r = chroma;&lt;br /&gt;
    b = x;&lt;br /&gt;
  }&lt;br /&gt;
  float m = value - chroma;&lt;br /&gt;
  r += m;&lt;br /&gt;
  g += m;&lt;br /&gt;
  b += m;&lt;br /&gt;
  return pixels.Color(int(255*r), int(255*g), int(255*b));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// SPECTRUM DISPLAY FUNCTIONS&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
void spectrumSetup() {&lt;br /&gt;
  // Set the frequency window values by evenly dividing the possible frequency&lt;br /&gt;
  // spectrum across the number of neo pixels.&lt;br /&gt;
&lt;br /&gt;
//  Serial.println(&amp;quot;** spectrumSetup **********************&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  float windowSize = (SAMPLE_RATE_HZ / 2.0) / float(NUM_LEDS);&lt;br /&gt;
  for (size_t i = 0; i &amp;lt; ARRAY_SZ(leds) + 1; ++i) {&lt;br /&gt;
    frequencyWindow[i] = i*windowSize;&lt;br /&gt;
//    Serial.print(&amp;quot;frequencyWindow[&amp;quot;);&lt;br /&gt;
//    Serial.print(i);&lt;br /&gt;
//    Serial.print(&amp;quot;] = &amp;quot;);&lt;br /&gt;
//    Serial.println(frequencyWindow[i]);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// windowMean&lt;br /&gt;
// Function - Compute the average magnitude of a target frequency window vs. &lt;br /&gt;
//            all other frequencies.&lt;br /&gt;
// Parameters    magnitudes, &lt;br /&gt;
//               frequencyToBin(frequencyWindow[i]),&lt;br /&gt;
//               frequencyToBin(frequencyWindow[i+1]),&lt;br /&gt;
//               &amp;amp;intensity,&lt;br /&gt;
//               &amp;amp;otherMean&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
//void windowMean(float* magnitudes, uint lowBin, uint highBin, float* windowMean, float* otherMean) {&lt;br /&gt;
void windowMean(uint lowBin, uint highBin, float* windowMean, float* otherMean) {&lt;br /&gt;
    *windowMean = 0;&lt;br /&gt;
    *otherMean = 0;&lt;br /&gt;
    // Notice the first magnitude bin is skipped because it represents the&lt;br /&gt;
    // average power of the signal.&lt;br /&gt;
//    Serial.print(&amp;quot;sizeof magnitudes: &amp;quot;);&lt;br /&gt;
//    Serial.print( sizeof(magnitudes) );&lt;br /&gt;
//    Serial.print(&amp;quot;, ARRAY_SZ(magnitudes): &amp;quot;);&lt;br /&gt;
//    Serial.println( ARRAY_SZ(magnitudes) );&lt;br /&gt;
    for (size_t i = 1; i &amp;lt; (ARRAY_SZ(magnitudes))/2; ++i) {&lt;br /&gt;
&lt;br /&gt;
//      Serial.print(&amp;quot;i = &amp;quot;);&lt;br /&gt;
//      Serial.print(i);&lt;br /&gt;
//&lt;br /&gt;
//      Serial.print(&amp;quot;, lowBin = &amp;quot;);&lt;br /&gt;
//      Serial.print(lowBin);&lt;br /&gt;
//&lt;br /&gt;
//      Serial.print(&amp;quot;, highBin = &amp;quot;);&lt;br /&gt;
//      Serial.print(highBin);&lt;br /&gt;
&lt;br /&gt;
      if (i &amp;gt;= lowBin &amp;amp;&amp;amp; i &amp;lt;= highBin) {&lt;br /&gt;
        *windowMean += magnitudes[i];&lt;br /&gt;
//        Serial.print(&amp;quot;, magnitude: &amp;quot;);&lt;br /&gt;
//        Serial.print(magnitudes[i]);&lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
        *otherMean += magnitudes[i];&lt;br /&gt;
      }&lt;br /&gt;
//      Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
    *windowMean /= (highBin - lowBin) + 1;&lt;br /&gt;
&lt;br /&gt;
//    Serial.print(&amp;quot; **** windowMean: &amp;quot;);&lt;br /&gt;
//    Serial.println(*windowMean);&lt;br /&gt;
&lt;br /&gt;
    *otherMean /= (FFT_SIZE / 2 - (highBin - lowBin));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// SAMPLING FUNCTIONS&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// samplingCallback&lt;br /&gt;
// Function - Does an analog to digital conversion of the microphone input.&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
void samplingCallback() {&lt;br /&gt;
&lt;br /&gt;
  // Read from the microphone input pin and store the sample data&lt;br /&gt;
  samples[sampleCounter] = (float32_t)analogRead(AUDIO_INPUT_PIN);&lt;br /&gt;
&lt;br /&gt;
  // Complex FFT functions require a coefficient for the imaginary part of the input.&lt;br /&gt;
  // Since we only have real data, set this coefficient to zero.&lt;br /&gt;
  samples[sampleCounter+1] = 0.0;&lt;br /&gt;
&lt;br /&gt;
  // Update sample buffer position and stop after the buffer is filled&lt;br /&gt;
  sampleCounter += 2;&lt;br /&gt;
  if (sampleCounter &amp;gt;= FFT_SIZE*2) {&lt;br /&gt;
    samplingTimer.end();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// samplingBegin&lt;br /&gt;
// Function - Starts the microphone ADC sampling timer function.&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
void samplingBegin() {&lt;br /&gt;
  // Reset sample buffer position and start callback at necessary rate.&lt;br /&gt;
  sampleCounter = 0;&lt;br /&gt;
  samplingTimer.begin(samplingCallback, 1000000/SAMPLE_RATE_HZ); // 1,000,000 / 9000 = 111 uSec&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// samplingIsDone&lt;br /&gt;
// Function - Indicates if a complete sample set of microphone data has been captured.&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
boolean samplingIsDone() {&lt;br /&gt;
  return sampleCounter &amp;gt;= FFT_SIZE*2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// COMMAND PARSING FUNCTIONS&lt;br /&gt;
// These functions allow parsing simple commands input on the serial port.&lt;br /&gt;
// Commands allow reading and writing variables that control the device.&lt;br /&gt;
//&lt;br /&gt;
// All commands must end with a semicolon character.&lt;br /&gt;
// &lt;br /&gt;
// Example commands are:&lt;br /&gt;
// GET SAMPLE_RATE_HZ;&lt;br /&gt;
// - Get the sample rate of the device.&lt;br /&gt;
// SET SAMPLE_RATE_HZ 400;&lt;br /&gt;
// - Set the sample rate of the device to 400 hertz.&lt;br /&gt;
// &lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
void parserLoop() {&lt;br /&gt;
  // Process any incoming characters from the serial port&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    // Add any characters that aren&#039;t the end of a command (semicolon) to the input buffer.&lt;br /&gt;
    if (c != &#039;;&#039;) {&lt;br /&gt;
      c = toupper(c);&lt;br /&gt;
      strncat(commandBuffer, &amp;amp;c, 1);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // Parse the command because an end of command token was encountered.&lt;br /&gt;
      parseCommand(commandBuffer);&lt;br /&gt;
      // Clear the input buffer&lt;br /&gt;
      memset(commandBuffer, 0, sizeof(commandBuffer));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Macro used in parseCommand function to simplify parsing get and set commands for a variable&lt;br /&gt;
#define GET_AND_SET(variableName) \&lt;br /&gt;
  else if (strcmp(command, &amp;quot;GET &amp;quot; #variableName) == 0) { \&lt;br /&gt;
    Serial.println(variableName); \&lt;br /&gt;
  } \&lt;br /&gt;
  else if (strstr(command, &amp;quot;SET &amp;quot; #variableName &amp;quot; &amp;quot;) != NULL) { \&lt;br /&gt;
    variableName = (typeof(variableName)) atof(command+(sizeof(&amp;quot;SET &amp;quot; #variableName &amp;quot; &amp;quot;)-1)); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
// parseCommand&lt;br /&gt;
// Function - Parses commands received via the serial input.&lt;br /&gt;
//**************************************************************************&lt;br /&gt;
//&lt;br /&gt;
void parseCommand(char* command) {&lt;br /&gt;
  if (strcmp(command, &amp;quot;GET MAGNITUDES&amp;quot;) == 0) {&lt;br /&gt;
    for (size_t i = 0; i &amp;lt; ARRAY_SZ(magnitudes); ++i) {&lt;br /&gt;
      Serial.println(magnitudes[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else if (strcmp(command, &amp;quot;GET SAMPLES&amp;quot;) == 0) {&lt;br /&gt;
    for (size_t i = 0; i &amp;lt; ARRAY_SZ(samples); i+=2) {&lt;br /&gt;
      Serial.println(samples[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else if (strcmp(command, &amp;quot;GET FFT_SIZE&amp;quot;) == 0) {&lt;br /&gt;
    Serial.println(FFT_SIZE);&lt;br /&gt;
  }&lt;br /&gt;
  GET_AND_SET(SAMPLE_RATE_HZ)&lt;br /&gt;
//  GET_AND_SET(LEDS_ENABLED)&lt;br /&gt;
  GET_AND_SET(SPECTRUM_MIN_DB)&lt;br /&gt;
  GET_AND_SET(SPECTRUM_MAX_DB)&lt;br /&gt;
  &lt;br /&gt;
  // Update spectrum display values if sample rate was changed.&lt;br /&gt;
  if (strstr(command, &amp;quot;SET SAMPLE_RATE_HZ &amp;quot;) != NULL) {&lt;br /&gt;
    spectrumSetup();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>107.10.70.25</name></author>
	</entry>
</feed>