digital audio mod11 / Mbed 2 deprecated equalizerseperate

Dependencies:   mbed

Committer:
rik
Date:
Tue Mar 28 08:48:23 2017 +0000
Revision:
0:8c128e047ec9
Child:
1:099f1a4c5fc8
default

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rik 0:8c128e047ec9 1
rik 0:8c128e047ec9 2 #include "LookupTables.h"
rik 0:8c128e047ec9 3
rik 0:8c128e047ec9 4 ////////////////// COSINE SINE LOOKUP TABLES
rik 0:8c128e047ec9 5
rik 0:8c128e047ec9 6 // Returns the cosine value using the lut of a given value
rik 0:8c128e047ec9 7 float lut_cos(float value){
rik 0:8c128e047ec9 8 // Cosine is symmetric so convert to absolute
rik 0:8c128e047ec9 9 if (value < 0)
rik 0:8c128e047ec9 10 value = -value;
rik 0:8c128e047ec9 11
rik 0:8c128e047ec9 12 // and subtract the "offset"
rik 0:8c128e047ec9 13 //float actualvalue = (float)(value % (2*M_PI));
rik 0:8c128e047ec9 14
rik 0:8c128e047ec9 15 while (value >= 2 * (float)M_PI){
rik 0:8c128e047ec9 16 value -= 2 * (float)M_PI;
rik 0:8c128e047ec9 17 }
rik 0:8c128e047ec9 18
rik 0:8c128e047ec9 19 // Calculate the value to a discrete value (1024*0.00613592 = 2 pi)
rik 0:8c128e047ec9 20 int discreteValue = (int)(value / 0.00613592);
rik 0:8c128e047ec9 21
rik 0:8c128e047ec9 22 return cosLookupTable_f[discreteValue];
rik 0:8c128e047ec9 23 }
rik 0:8c128e047ec9 24 // Returns the sine value using the lut for a given value
rik 0:8c128e047ec9 25 float lut_sin(float value){
rik 0:8c128e047ec9 26 // Convert to cosine
rik 0:8c128e047ec9 27 value -= 0.5*(float)M_PI;
rik 0:8c128e047ec9 28 // Cosine is symmetric so convert to absolute
rik 0:8c128e047ec9 29 if (value < 0)
rik 0:8c128e047ec9 30 value = -value;
rik 0:8c128e047ec9 31
rik 0:8c128e047ec9 32 // subtract the "offset" of the original 0-2pi
rik 0:8c128e047ec9 33 //float actualvalue = (float)(value % (float)(2 * M_PI));
rik 0:8c128e047ec9 34
rik 0:8c128e047ec9 35 while (value >= (2 * (float)M_PI)){
rik 0:8c128e047ec9 36 value -= (2 * (float)M_PI);
rik 0:8c128e047ec9 37 }
rik 0:8c128e047ec9 38
rik 0:8c128e047ec9 39 // Calculate the value to a discrete value (1024*0.00613592 = 2 pi)
rik 0:8c128e047ec9 40 int discreteValue = (int)(value / 0.00613592);
rik 0:8c128e047ec9 41
rik 0:8c128e047ec9 42 return cosLookupTable_f[discreteValue];
rik 0:8c128e047ec9 43 }
rik 0:8c128e047ec9 44
rik 0:8c128e047ec9 45 // Returns the cosine value using the lut of a given value
rik 0:8c128e047ec9 46 // WARNING, FAST VERSION ONLY WORKS WITH VALUES 0 - 2 PI
rik 0:8c128e047ec9 47 float lut_cos_f(float value){
rik 0:8c128e047ec9 48 // Calculate the value to a discrete value (1024*0.00613592 = 2 pi)
rik 0:8c128e047ec9 49 int discreteValue = (int)(value / 0.00613592);
rik 0:8c128e047ec9 50
rik 0:8c128e047ec9 51 return cosLookupTable_f[discreteValue];
rik 0:8c128e047ec9 52 }
rik 0:8c128e047ec9 53
rik 0:8c128e047ec9 54 ////////////////// END COSINE SINE LOOKUP TABLES
rik 0:8c128e047ec9 55
rik 0:8c128e047ec9 56 ////////////////// HANNING LOOKUP TABLE
rik 0:8c128e047ec9 57
rik 0:8c128e047ec9 58 // Applies the hanning LUT to the supplied array of data
rik 0:8c128e047ec9 59 void applyHanningTable(float* data, int datasize){
rik 0:8c128e047ec9 60 if (datasize == 1024){ // Only works for 10 bit data arrays
rik 0:8c128e047ec9 61 for (int i = 0; i < 1024; i++){
rik 0:8c128e047ec9 62 data[i] *= hanningTable_f[i];
rik 0:8c128e047ec9 63 }
rik 0:8c128e047ec9 64 }
rik 0:8c128e047ec9 65 }
rik 0:8c128e047ec9 66
rik 0:8c128e047ec9 67 ////////////////// END HANNING LOOKUP TABLE