more dead
This commit is contained in:
parent
8929fe57c2
commit
ea1f913c68
|
@ -1,60 +0,0 @@
|
|||
/*
|
||||
* avg_values.c
|
||||
*
|
||||
* @date Jul 23, 2013
|
||||
* @author Andrey Belomutskiy, (c) 2012-2020
|
||||
*/
|
||||
|
||||
#include "avg_values.h"
|
||||
#include <math.h>
|
||||
|
||||
void avgFill(AvgTable *table, int count, float value) {
|
||||
for (int i = 0; i < AVG_TAB_SIZE; i++) {
|
||||
for (int j = 0; j < AVG_TAB_SIZE; j++) {
|
||||
table->counts[i][j] = count;
|
||||
table->values[i][j] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void avgReset(AvgTable *table) {
|
||||
avgFill(table, 0, 0);
|
||||
}
|
||||
|
||||
void avgAddValue(AvgTable *table, int rpm, float key, float value) {
|
||||
if (rpm >= MAX_RPM || key >= MAX_KEY) {
|
||||
return;
|
||||
}
|
||||
int i = (int)(AVG_TAB_SIZE * rpm / MAX_RPM);
|
||||
int j = (int)(AVG_TAB_SIZE * key / MAX_KEY);
|
||||
|
||||
table->values[i][j] += value;
|
||||
table->counts[i][j]++;
|
||||
}
|
||||
|
||||
float avgGetValueByIndexes(AvgTable *table, int i, int j) {
|
||||
int count = table->counts[i][j];
|
||||
if (count == 0) {
|
||||
return NAN;
|
||||
}
|
||||
return table->values[i][j] / count;
|
||||
}
|
||||
|
||||
float avgGetValue(AvgTable *table, int rpm, float key) {
|
||||
if (rpm >= MAX_RPM || key >= MAX_KEY) {
|
||||
return NAN;
|
||||
}
|
||||
int i = (int)(AVG_TAB_SIZE * rpm / MAX_RPM);
|
||||
int j = (int)(AVG_TAB_SIZE * key / MAX_KEY);
|
||||
return avgGetValueByIndexes(table, i, j);
|
||||
}
|
||||
|
||||
int avgGetValuesCount(AvgTable *table, int rpm, float key) {
|
||||
if (rpm >= MAX_RPM || key >= MAX_KEY) {
|
||||
return 0;
|
||||
}
|
||||
int i = (int)(AVG_TAB_SIZE * rpm / MAX_RPM);
|
||||
int j = (int)(AVG_TAB_SIZE * key / MAX_KEY);
|
||||
|
||||
return table->counts[i][j];
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
/*
|
||||
* avg_values.h
|
||||
*
|
||||
* @date Jul 23, 2013
|
||||
* @author Andrey Belomutskiy, (c) 2012-2020
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define AVG_TAB_SIZE 48
|
||||
|
||||
#define MAX_RPM 8000
|
||||
#define MAX_KEY 5
|
||||
|
||||
typedef struct {
|
||||
float values[AVG_TAB_SIZE][AVG_TAB_SIZE];
|
||||
int counts[AVG_TAB_SIZE][AVG_TAB_SIZE];
|
||||
} AvgTable;
|
||||
|
||||
|
||||
void avgReset(AvgTable *table);
|
||||
void avgFill(AvgTable *table, int count, float value);
|
||||
|
||||
void avgAddValue(AvgTable *table, int rpm, float key, float value);
|
||||
float avgGetValueByIndexes(AvgTable *table, int i, int j);
|
||||
float avgGetValue(AvgTable *table, int rpm, float key);
|
||||
int avgGetValuesCount(AvgTable *table, int rpm, float key);
|
|
@ -1,63 +0,0 @@
|
|||
/*
|
||||
* @file signal_filtering.c
|
||||
*
|
||||
* @date Aug 5, 2013
|
||||
* @author Andrey Belomutskiy, (c) 2012-2020
|
||||
*/
|
||||
|
||||
#ifndef SIGNAL_FILTERING_C_
|
||||
#define SIGNAL_FILTERING_C_
|
||||
|
||||
#include "signal_filtering.h"
|
||||
|
||||
void sfInit(SignalFiltering *fs, float K, float initialValue) {
|
||||
fs->pointer = 0;
|
||||
fs->K = K;
|
||||
fs->Vout = initialValue;
|
||||
fs->Vacc = initialValue * K;
|
||||
}
|
||||
|
||||
static void addCopyAndSort(SignalFiltering *fs, float value) {
|
||||
fs->values[fs->pointer] = value;
|
||||
fs->pointer = ++fs->pointer == FILTER_SIZE ? 0 : fs->pointer;
|
||||
|
||||
copyArray(fs->sorted, fs->values);
|
||||
|
||||
for (int i = 0; i < FILTER_SIZE; i++)
|
||||
for (int j = i + 1; j < FILTER_SIZE; j++)
|
||||
if (fs->sorted[i] < fs->sorted[j]) {
|
||||
float temp = fs->sorted[i];
|
||||
fs->sorted[i] = fs->sorted[j];
|
||||
fs->sorted[j] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
void sfAddValue(SignalFiltering *fs, float value) {
|
||||
addCopyAndSort(fs, value);
|
||||
float Vin = fs->sorted[FILTER_SIZE / 2];
|
||||
|
||||
fs->Vacc += Vin - fs->Vout;
|
||||
fs->Vout = fs->Vacc / fs->K;
|
||||
}
|
||||
|
||||
void sfAddValue2(SignalFiltering *fs, float value) {
|
||||
addCopyAndSort(fs, value);
|
||||
|
||||
int fromIndex = FILTER_SIZE / 4;
|
||||
int toIndex = FILTER_SIZE / 4 + FILTER_SIZE / 2;
|
||||
|
||||
/**
|
||||
* this implementation takes the average of the middle hald of the sorted values
|
||||
*/
|
||||
float result = 0;
|
||||
for (int i = fromIndex; i < toIndex; i++)
|
||||
result += fs->sorted[i];
|
||||
|
||||
fs->Vout = result / (FILTER_SIZE / 2);
|
||||
}
|
||||
|
||||
float sfGetValue(SignalFiltering *fs) {
|
||||
return fs->Vout;
|
||||
}
|
||||
|
||||
#endif /* SIGNAL_FILTERING_C_ */
|
|
@ -1,22 +0,0 @@
|
|||
/*
|
||||
* @file signal_filtering.h
|
||||
*
|
||||
* @date Aug 5, 2013
|
||||
* @author Andrey Belomutskiy, (c) 2012-2020
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define FILTER_SIZE 5
|
||||
|
||||
typedef struct {
|
||||
float values[FILTER_SIZE];
|
||||
float sorted[FILTER_SIZE];
|
||||
int pointer;
|
||||
float K, Vacc, Vout;
|
||||
} SignalFiltering;
|
||||
|
||||
void sfInit(SignalFiltering *fs, float K, float initialValue);
|
||||
void sfAddValue(SignalFiltering *fs, float value);
|
||||
void sfAddValue2(SignalFiltering *fs, float value);
|
||||
float sfGetValue(SignalFiltering *fs);
|
|
@ -13,7 +13,6 @@ UTILSRC_CPP = \
|
|||
$(UTIL_DIR)/containers/local_version_holder.cpp \
|
||||
$(UTIL_DIR)/containers/table_helper.cpp \
|
||||
$(UTIL_DIR)/math/pid.cpp \
|
||||
$(UTIL_DIR)/math/avg_values.cpp \
|
||||
$(UTIL_DIR)/math/interpolation.cpp \
|
||||
$(PROJECT_DIR)/util/datalogging.cpp \
|
||||
$(PROJECT_DIR)/util/loggingcentral.cpp \
|
||||
|
|
Loading…
Reference in New Issue