4 * Created on: 2014. 11. 13.
12 // Proximity code start
13 float CalculateExponentialAverage(int numberOfSamples, int* array, int startindex, int flag){
15 float denominator = 0;
19 if (flag < arraysize / RSSI_EA) // first loop buffer full
21 for (int i = 0; i < startindex; i++)
27 average = average / startindex;
30 Serial.print("average1 : ");
31 Serial.println(average);
35 for (int i = 0; i < arraysize; i++)
40 for (int i = startindex; i < startindex + RSSI_EA; i++)
44 average = average / (arraysize - numberOfSamples);
46 Serial.print("average2 : ");
47 Serial.println(average);
49 //exponential moving average
51 //CHANGE THIS FOR DIFFERENT SMOOTHING EFFECT
53 for (i = startindex + numberOfSamples - 1; i >= startindex; i--)
55 numerator += array[i]* pow(beta, startindex + numberOfSamples - i - 1);
56 denominator += pow(beta, startindex + numberOfSamples - i - 1);
61 numerator += average * pow(beta, offset + numberOfSamples);
62 denominator += pow(beta, offset + numberOfSamples);
64 return numerator / denominator;
68 float calculateDistance(float avgRSSI, float txPower)
75 float ratio = avgRSSI*1.0/txPower;
82 float distance = (0.7)*pow(ratio,10) + 0.024;