Spaces:
Running
Running
// Размеры таблиц обучения | |
class IgnitionLearningTable { | |
private: | |
float cells[LOAD_POINTS][RPM_POINTS]; // Таблица коррекции УОЗ | |
float loadPoints[LOAD_POINTS]; // Точки по нагрузке (кПа) | |
float rpmPoints[RPM_POINTS]; // Точки по оборотам | |
float learningRate; // Скорость обучения | |
float maxCorrection; // Максимальная коррекция | |
float minCorrection; // Минимальная коррекция | |
float knockThreshold; // Порог детонации | |
float knockProtectionOffset; // Защитное смещение при детонации | |
// История детонации для каждой ячейки | |
uint8_t knockHistory[LOAD_POINTS][RPM_POINTS]; | |
uint8_t knockHistorySize; | |
// Вспомогательные методы | |
int findNearestIndex(float value, const float* points, int size); | |
float interpolate2D(float load, float rpm); | |
void updateCell(int loadIdx, int rpmIdx, float correction); | |
void updateKnockHistory(int loadIdx, int rpmIdx, bool knockDetected); | |
public: | |
IgnitionLearningTable(); | |
// Основные методы | |
void begin(); | |
float getCorrection(float load, float rpm); | |
void learn(float load, float rpm, float knockLevel); | |
void reset(); | |
// Методы сохранения/загрузки | |
bool save(); | |
bool load(); | |
// Настройка параметров | |
void setLearningRate(float rate); | |
void setCorrectionLimits(float min, float max); | |
void setKnockParameters(float threshold, float protection); | |
// Доступ к данным для визуализации | |
float getCellValue(int loadIdx, int rpmIdx); | |
float getLoadPoint(int idx); | |
float getRPMPoint(int idx); | |
uint8_t getKnockCount(int loadIdx, int rpmIdx); | |
}; | |