Etude d’un système d’acquisition de température
Le système réalise l’acquisition d’un lot de 10 mesures de température. Entre chaque mesure, il s’écoule un temps de 4 secondes.
A partir des mesures, on souhaite représenter l’évolution de la température en fonction du temps par une fonction affine : Température = A.Temps+B.
Le traitement pour déterminer les coefficients A et B est effectué si le lot de mesures est valide. Un lot est valide si chacun des écarts entre 2 températures sont compris entre 1°C et 10°C
Les valeurs de température sont comprises entre -30 et 200 °C.
Une fonction acquerirTemperature() effectue une acquisition de température toute les 4 secondes, voir librairie.
On définit que la première mesure s’effectue à t = 4secondes (t est le temps).
Principe pour effectuer une régression linaire et calculer les coefficients de la fonction affine
Soit un ensemble de N points de coordonnées x,y. On souhaite trouver la fonction affine y=A*x+B . La droite passe au plus près entre tous les points de telle manière que la somme des carrés des distances des points à la droite soit minimale. (La méthode est dite des moindres carrés).
Le coefficient de corrélation «cfCor» permet d’apprécier dans quelle mesure les points sont alignés.
Si tous les points sont alignés, ils se trouvent sur la droite. La corrélation est dite parfaite et «cfCor»
vaut alors 1.
On démontre que les coefficients de la fonction affine A et B valent :
N . P - (sommeX . sommeY) A = --- N . sommeX2 – (sommeX) ²
sommeY – A . sommeX B = --- N
On démontre que le coefficient de corrélation vaut : Num
(cfCor)² = --- avec Den
sommeX .sommeY Num = A . (P - --- )
N
(sommeY)² Den = sommeY2 . ---
N
Avec :
N : nombre de points de coordonné x,y sommeX : somme des x
sommeY : somme des y
sommeX2 : somme des carrés des x
sommeY2 : somme des carrés des y
P : somme des produits x*y
Exemple de régression linaire :
x y x² y² x*y
2 1,8 4 3,24 3,6
4 2 16 4 8
6 3,2 36 10,24 19,2 8 3,4 64 11,56 27,2 20 10,4 120 29,04 58
N vaut 4
sommeX vaut 20 sommeY vaut 10,4 sommeX2 vaut 120 sommeY2 vaut 29,04
P vaut 58
Après calcul : A vaut 0,3 B vaut 1,1
Les librairies de fonctions C++ disponibles
Fichier traitement.h
// Vérifie que l'écart entre 2 valeurs du tableau tab est compris // entre ECART_MAX et ECART_MIN. Retourne true si valide
// tab[] Tableau des valeurs à vérifier // nbre Nombre de valeurs du tableau
// ECART_MAX Ecart maximum entre tab[n+1] et tab[n]
// ECART_MIN Ecart minimum entre tab[n+1] et tab[n]
bool verifierValidite(const int tab[], int nbre,
const int ECART_MAX, const int ECART_MIN);
// Calcule le coefficient A de la fonction affine y=Ax+B // tabY[] Tableau des valeurs des ordonnées
// nbre Nombre de valeurs du tableau // valX0 Valeur de départ de l'abscisse
// pasX Ecart entre 2 valeurs consécutives de l'abscisse
float calculerCoefA(const int tabY[], int nbre, int valX0, int pasX);
// Calcule le coefficient B de la fonction affine y=Ax+B // tabY[] tableau des valeurs des ordonnées
// nbre Nombre de valeurs du tableau // valX0 Valeur de départ de l'abscisse
// pasX Ecart entre 2 valeurs consécutives de l'abscisse
float calculerCoefB(float valA, const int tabY[], int nbre, int valX0, int pasX);
// Calcule la somme des éléments du tableau int calculerSomme( const int tab[], int nbre);
Fichier aquisition.h
// Effectue une acquisition de température au bout de 4 secondes
// et retour la valeur. Les valeurs sont comprises entre -30 et 200 °C int acquerirTemperature(void);
1,4 1,8 2,2 2,6 3 3,4 3,8
2 4 6 8
Points x,y y=A*x+B
Complétez l’extrait du programme du système d’acquisition
#include ______________________
________________________________
//=== Déclarations des Constantes ===========================================
const int NBRE_MESURES=_________ ; // Nombre d'acquisitions
const int ECART_MAX= ___________ ; // Maxi d'un écart de température const int ECART_MIN=____________ ; // Mini d'un écart de température
//=== Déclarations des variables ============================================
int acquisition[______________]={0}; // Tableau des acquisition de température float coefA=0; // Coefficient A de la fonction affine float coefB=0; // Coefficient B de la fonction affine
//=== Faire l’acquisition du lot de mesures =================================
//=== Calcul des coefficients de la fonction affine =========================
// temperature=A.temps+B Pour que le calcul s'effectue,
// il faut que les valeurs de température du tableau acquisition soient valides
Complétez l’extrait du programme source de la librairie Traiter
// Calcule la somme des éléments du tableau
int calculerSomme(const int tab[], int nbre){
int somme =0; // Valeur de la somme
}
bool verifierValidite(const int tab[],int nbre,
const int ECART_MAX, const int ECART_MIN){
valide // Valeur de tab[] valide
int i // Variable de boucle
ecart // Ecart entre tab[n+1] et tab[n]
precedent // Valeur précédente de tab[]
}
//Pour obtenir sommeY, il est recommandé d’utiliser une fonction de la librairie
float calculerCoefA(const int tabY[], int nbre, int valX0, int pasX){
int numerateur=0; // Numérateur du calcul du coefficient A int denominateur=1; // Dénominateur du calcul du coefficient A
X // Valeur de l’abscisse
sommeX // Somme des valeurs des abscisses sommeY // Somme des valeurs des ordonnées
sommeX2 // Somme du carré des valeurs de l’abscisse sommeXY // Somme des valeurs des produits XY
// Calcule sommeX, sommeX2, sommeXY
// Calcule le numérateur et le dénominateur pour déterminer le coefficient A
return (static_cast<float>(numerateur)/static_cast<float>(denominateur));
}