...
Code Block |
---|
#ifndef SENSORUNLINEARITYCORRECTION_H
#define SENSORUNLINEARITYCORRECTION_H
#include <QObject>
#include <QVector>
// Error correction class for sensors
// Luokka kalibrointikäyrän muodostamiseksi epälineaariselle anturille
class SensorUnlinearityCorrection : public QObject
{
Q_OBJECT
public:
explicit SensorUnlinearityCorrection(QObject *parent = 0);
//funktio SensorErrorCorrection laskee oikean arvon parametrina annetulle anturilta tulevalle arvolle
double SensorErrorCorrection(double in);
//funktio CalcCalibrationConstants laskee suoranpätkien kulmakertoimet (a:t) sekä siirtymät suorien alkupisteissä (b:t)
void CalcCalibrationConstants();
private:
//muuttujat CorrectVal ja ValFromSensor ovat vektoripari, joista ensimmäinen sisältää "oikean" mitta-arvon joka saadaan vertailumittauksella ja
//jälkimmäinen on anturilta tuleva arvo. Näiden perusteella lasketaan suorien pätkien kulmakertoimet ja virheet suorien alkupisteissä eli a ja b
QVector <double> CorrectVal;
QVector <double> ValFromSensor;
QVector <double> a,b;//angle offset
signals:
public slots:
};
#endif // SENSORUNLINEARITYCORRECTION_H
|
Code Block |
---|
#include "sensorunlinearitycorrection.h" SensorUnlinearityCorrection::SensorUnlinearityCorrection(QObject *parent) : QObject(parent) { //esimerkkina arvot kolmessa kohdassa mitta-aluetta CorrectVal.append(0.0); ValFromSensor.append(0.0); CorrectVal.append(50.0); ValFromSensor.append(52.0); CorrectVal.append(100.0); ValFromSensor.append(98.0); } // kertoimien laskenta void SensorUnlinearityCorrection::CalcCalibrationConstants() { int i; int length = CorrectVal.size(); a.empty(); b.empty(); for(i=0;i<length;i++) { b.append(CorrectVal[i]-ValFromSensor[i]); } for(i=0;i<(length-1);i++) { a.append((b[i+1]-b[i])/(CorrectVal[i+1]-CorrectVal[i])); } } //oikean arvon haku double SensorUnlinearityCorrection::SensorErrorCorrection(double in) { int length = CorrectVal.size(); int i; double out; for(i=0;i<(length-1);i++) { if(in>=CorrectVal[i]&&in<=CorrectVal[i+1]) { out=in+(in-CorrectVal[i])*a[i]+b[i]; return out; } } out=in; return out; } |
...