Commit-sauvegarde de modifs sur server.cc

/!\ Cette révision est présente uniquement pour sauvegarde de
    modifications. Certains des changements apportés seront annulés à la
    prochaine révision.
/!\ Bogue connu de cette révision : la lecture du fichier de
    pérégrination est faite grâce à la fonction makePointListFromFile(),
    donc tous les points vont dans la même entrée de la liste. Nécessité
    de créer une fonction adaptée.

server.cc/hh :
* Modifications pour lire un fichier de pérégrination et effectuer les
  calculs de position.
* getkClosestInSs() : correction du sens de la comparaison pour
  récupérer la distance maximale.
*	makeReferencePointListFromFile(const string &filename) : remplacement
 	par un appel à la nouvelle fonction générique :
 	makePointListFromFile(vector<ReferencePoint> &dest_point_list, const
 	string &filename).
* makePointListFromFile() : suppression de variables inutiles.
  printReferencePointList() : remplacement par un appel à la nouvelle
  fonction générique : printPointList(vector<ReferencePoint>
  &point_list).

git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@30 785a6c6c-259e-4ff1-8b91-dc31627914f0
This commit is contained in:
Matteo Cypriani 2008-05-05 11:59:55 +00:00
parent ae11d3a2c3
commit 54d788586f
2 changed files with 78 additions and 34 deletions

View File

@ -357,7 +357,7 @@ vector<Point> Server::getkClosestInSs(const vector<Measurement> &m, const unsign
{ {
distances_vector.push_back(tmp_distance); distances_vector.push_back(tmp_distance);
points_vector.push_back(reference_point_list[i].getCoordinates()); points_vector.push_back(reference_point_list[i].getCoordinates());
dist_max = (dist_max > tmp_distance) ? tmp_distance : dist_max; dist_max = (dist_max < tmp_distance) ? tmp_distance : dist_max;
} }
else else
{ {
@ -405,6 +405,15 @@ vector<Point> Server::getkClosestInSs(const vector<Measurement> &m, const unsign
} }
} }
#ifdef DEBUG
cout << "getkClosestInSs() : Points sélectionnés :" << endl ;
if (distances_vector.size() != points_vector.size())
cout << "Erreur ! distances_vector.size()=" << distances_vector.size() << " != points_vector.size()=" << points_vector.size() << endl ;
else
for (i = 0 ; i < distances_vector.size() - 1 ; i++)
cout << distances_vector[i] << " : " << points_vector[i] << endl ;
#endif
return points_vector; return points_vector;
} }
@ -606,17 +615,26 @@ Point Server::interlink(const vector<Measurement> &m, const int &client_idx)cons
/* FONCTION POUR RÉTRO-COMPATIBILITÉ.
* Crée la liste des points de référence dans la liste reference_point_list. */
void Server::makeReferencePointListFromFile(const string &filename) void Server::makeReferencePointListFromFile(const string &filename)
{ {
ifstream input_file; makePointListFromFile(reference_point_list, filename) ;
char buffer[BUFFER_LENGTH]; }
string lecture_fichier;
/* Lit le fichier de mesures (CSV) nommé "filename", et place les informations dans la liste "dest_point_list". */
void Server::makePointListFromFile(vector<ReferencePoint> &dest_point_list, const string &filename)
{
ifstream input_file ; // Flux d'entrée du fichier.
char buffer[BUFFER_LENGTH]; // Buffer lu dans le fichier.
string cpp_buffer ; // Buffer au format string.
ReferencePoint rp; ReferencePoint rp;
Point tmp_point; Point tmp_point;
float x, y, z ; // Coordonnées des points float x, y, z ; // Coordonnées des points.
unsigned int i, pt_idx; unsigned int pt_idx ; // Position du point lu dans la liste.
string cpp_buffer, tmp_mes; vector<string> infos ; // Liste des informations lues dans une ligne du fichier.
vector<string> infos;
input_file.open(filename.c_str()) ; input_file.open(filename.c_str()) ;
@ -667,9 +685,11 @@ void Server::makeReferencePointListFromFile(const string &filename)
if (!pointExists(tmp_point)) if (!pointExists(tmp_point))
{ {
rp.setCoordinates(tmp_point); rp.setCoordinates(tmp_point);
reference_point_list.push_back(rp); dest_point_list.push_back(rp);
#ifdef DEBUG_2 #ifdef DEBUG
npoints++ ; npoints++ ;
#endif
#ifdef DEBUG_2
cout << tmp_point << " : ajouté." << endl ; cout << tmp_point << " : ajouté." << endl ;
} }
else else
@ -681,18 +701,18 @@ void Server::makeReferencePointListFromFile(const string &filename)
#ifdef FRED_CSV_FORMAT #ifdef FRED_CSV_FORMAT
vector<int> measures_vector = extractValues(infos[4]) ; vector<int> measures_vector = extractValues(infos[4]) ;
for (i = 0 ; i < measures_vector.size() ; i++) for (unsigned int i = 0 ; i < measures_vector.size() ; i++)
reference_point_list[pt_idx].addMeasurement(infos[3], measures_vector[i]); dest_point_list[pt_idx].addMeasurement(infos[3], measures_vector[i]);
measures_vector.clear(); measures_vector.clear();
#else #else
for (i = 4 ; i < infos.size() ; i++) for (unsigned int i = 4 ; i < infos.size() ; i++)
{ {
#ifdef DEBUG_2 #ifdef DEBUG_2
cout << "Lecture de la valeur : " << infos[i] << "... " ; cout << "Lecture de la valeur : " << infos[i] << "... " ;
#endif #endif
if (i + 1 < infos.size()) if (i + 1 < infos.size())
{ {
reference_point_list[pt_idx].addMeasurement(infos[i], string2int(infos[i+1])) ; dest_point_list[pt_idx].addMeasurement(infos[i], string2int(infos[i+1])) ;
#ifdef DEBUG_2 #ifdef DEBUG_2
cout << "Mesure ajoutée : AP = " << infos[i] << " | SS = " << string2int(infos[i+1]) << endl ; cout << "Mesure ajoutée : AP = " << infos[i] << " | SS = " << string2int(infos[i+1]) << endl ;
#endif #endif
@ -769,21 +789,27 @@ void Server::makeApListFromFile(const string &filename)
/* FONCTION POUR RÉTRO-COMPATIBILITÉ
* Affiche la liste des points de référence (reference_point_list). */
void Server::printReferencePointList() void Server::printReferencePointList()
{ {
unsigned int i; printPointList(reference_point_list) ;
}
for (i = 0 ; i < reference_point_list.size() ; i++)
cout << reference_point_list[i] << endl;
/* Affiche une liste de points (point_list). */
void Server::printPointList(vector<ReferencePoint> &point_list)
{
for (unsigned int i = 0 ; i < point_list.size() ; i++)
cout << point_list[i] << endl ;
} }
void Server::printAccessPointList() void Server::printAccessPointList()
{ {
unsigned int i; for (unsigned int i = 0 ; i < access_point_list.size() ; i++)
for (i = 0 ; i < access_point_list.size() ; i++)
cout << access_point_list[i] << endl; cout << access_point_list[i] << endl;
} }
@ -791,14 +817,13 @@ void Server::printAccessPointList()
void Server::computeFriisFromRefList() void Server::computeFriisFromRefList()
{ {
unsigned int i, j;
vector<float> friis_idx_list; vector<float> friis_idx_list;
Point pt_coords, ap_coords; Point pt_coords, ap_coords;
float ap_power, ap_gain, calib_gain = 2, const_term, mes_power, friis_sum; float ap_power, ap_gain, calib_gain = 2, const_term, mes_power, friis_sum;
unsigned int ap_freq; unsigned int ap_freq;
string ap_mac; string ap_mac;
for (i = 0 ; i < access_point_list.size() ; i++) for (unsigned int i = 0 ; i < access_point_list.size() ; i++)
{ {
ap_power = access_point_list[i].getOutputPower(); ap_power = access_point_list[i].getOutputPower();
ap_coords = access_point_list[i].getCoordinates(); ap_coords = access_point_list[i].getCoordinates();
@ -812,18 +837,21 @@ void Server::computeFriisFromRefList()
const_term += 20 * log10 (300000000.0 / ap_freq) + ap_power; const_term += 20 * log10 (300000000.0 / ap_freq) + ap_power;
/* Compute an index for each ref point. List stored in friis_idx_list */ /* Compute an index for each ref point. List stored in friis_idx_list */
for (j = 0 ; j < reference_point_list.size() ; j++) for (unsigned int j = 0 ; j < reference_point_list.size() ; j++)
{ {
pt_coords = reference_point_list[j].getCoordinates(); pt_coords = reference_point_list[j].getCoordinates();
if (reference_point_list[i].getPowerForAp(ap_mac, &mes_power)) if (reference_point_list[i].getPowerForAp(ap_mac, &mes_power))
friis_idx_list.push_back((const_term - mes_power) / (10 * log10(ap_coords.distance(pt_coords)))); friis_idx_list.push_back((const_term - mes_power) / (10 * log10(ap_coords.distance(pt_coords))));
} }
/* Now, compute avg value */ /* Now, compute avg value */
friis_sum = 0; friis_sum = 0;
for (j = 0 ; j < friis_idx_list.size() ; j++) for (unsigned int j = 0 ; j < friis_idx_list.size() ; j++)
friis_sum += friis_idx_list[j]; friis_sum += friis_idx_list[j];
access_point_list[i].setFriisIndex(friis_sum / friis_idx_list.size()); access_point_list[i].setFriisIndex(friis_sum / friis_idx_list.size());
cout << access_point_list[i].getApAddr() << " -> " << (friis_sum / friis_idx_list.size()) << endl; cout << access_point_list[i].getApAddr() << " -> " << (friis_sum / friis_idx_list.size()) << endl;
friis_idx_list.clear(); friis_idx_list.clear();
} }
} }
@ -844,6 +872,8 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c
vector<Point> vector<Point>
&E_current = cl.getRef_viterbi_Ecurrent(), &E_current = cl.getRef_viterbi_Ecurrent(),
&E_previous = cl.getRef_viterbi_Eprevious() ; &E_previous = cl.getRef_viterbi_Eprevious() ;
vector<ReferencePoint> peregrination_point_list ;
makePointListFromFile(peregrination_point_list, DEFAULT_TRACKING_FILE) ;
#else #else
float **V = client_list[id_client].get_viterbi_V() ; float **V = client_list[id_client].get_viterbi_V() ;
vector<Point> vector<Point>
@ -860,27 +890,35 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c
} }
#ifdef TEST #ifdef TEST
int pt = 0 ; unsigned int pt = 0 ;
#ifdef DEBUG #ifdef DEBUG
cout << reference_point_list.size() << " points à traiter." << endl ; cout << reference_point_list.size() << " points de référence, " << peregrination_point_list.size() << " points de pérégrination." << endl ;
#endif
while (pt < reference_point_list.size()) cout << "***** Liste : *****" << endl ;
for (int c = 0 ; c < peregrination_point_list.size() ; c++)
cout << peregrination_point_list[c] << endl ;
cout << "*******************" << endl ;
#endif
while (pt < peregrination_point_list.size())
#else #else
while (true) while (true)
#endif #endif
{ {
vector<Measurement> vm ; vector<Measurement> vm ;
Point *ref_coords = NULL ; // Coordonnées de référence (à ignorer).
#ifdef TEST #ifdef TEST
/* Get point measurements */ /* Get point measurements */
vm.clear(); //vm.clear();
vm = reference_point_list[pt].getMeasurementList(); vm = peregrination_point_list[pt].getMeasurementList();
// *ref_coords = reference_point_list[i].getCoordinates();
#endif #endif
E_previous = E_current ; E_previous = E_current ;
E_current = getkClosestInSs(vm, K, ref_coords) ; // Création de l'ensemble des K points les plus proches dans l'espace des puissances. E_current = getkClosestInSs(vm, K) ; // Création de l'ensemble des K points les plus proches dans l'espace des puissances.
#ifdef DEBUG
cout << "Point courant : " << peregrination_point_list[pt] ;
#endif
if (i > 1) // Si on n'est plus à la première itération if (i > 1) // Si on n'est plus à la première itération
{ {
@ -923,7 +961,9 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c
} }
} }
#ifdef DEBUG
// cout << "(N=" << N << ") - 1 - (i=" << i << ") = " << N-1-i << endl ; // cout << "(N=" << N << ") - 1 - (i=" << i << ") = " << N-1-i << endl ;
cout << "V :" << endl ;
for (int n=0 ; n < N-1 ; n++) for (int n=0 ; n < N-1 ; n++)
{ {
for (int k=0 ; k < K ; k++) for (int k=0 ; k < K ; k++)
@ -931,6 +971,7 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c
cout << endl ; cout << endl ;
} }
cout << "\n--------------------------" << endl ; cout << "\n--------------------------" << endl ;
#endif
if (i < N-1) if (i < N-1)
i++ ; i++ ;

View File

@ -68,11 +68,14 @@ public:
Point fbcm(const vector<Measurement> &m, const int &client_idx)const; Point fbcm(const vector<Measurement> &m, const int &client_idx)const;
Point interlink(const vector<Measurement> &m, const int &client_idx)const; Point interlink(const vector<Measurement> &m, const int &client_idx)const;
void makeReferencePointListFromFile(const string &filename); void makeReferencePointListFromFile(const string &filename);
void makePointListFromFile(vector<ReferencePoint> &dest_point_list, const string &filename) ;
void makeApListFromFile(const string &filename); void makeApListFromFile(const string &filename);
void printReferencePointList(); void printReferencePointList();
void printPointList(vector<ReferencePoint> &point_list) ;
void printAccessPointList(); void printAccessPointList();
void computeFriisFromRefList(); void computeFriisFromRefList();
unsigned int getNbReferencePoints()const { return reference_point_list.size(); }; unsigned int getNbReferencePoints()const { return reference_point_list.size(); };
/* For experimentation purpose only ! */ /* For experimentation purpose only ! */
void radar_exp(); void radar_exp();