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:
parent
ae11d3a2c3
commit
54d788586f
|
@ -357,7 +357,7 @@ vector<Point> Server::getkClosestInSs(const vector<Measurement> &m, const unsign
|
|||
{
|
||||
distances_vector.push_back(tmp_distance);
|
||||
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
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
ifstream input_file;
|
||||
char buffer[BUFFER_LENGTH];
|
||||
string lecture_fichier;
|
||||
makePointListFromFile(reference_point_list, filename) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 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;
|
||||
Point tmp_point;
|
||||
float x, y, z ; // Coordonnées des points
|
||||
unsigned int i, pt_idx;
|
||||
string cpp_buffer, tmp_mes;
|
||||
vector<string> infos;
|
||||
float x, y, z ; // Coordonnées des points.
|
||||
unsigned int pt_idx ; // Position du point lu dans la liste.
|
||||
vector<string> infos ; // Liste des informations lues dans une ligne du fichier.
|
||||
|
||||
input_file.open(filename.c_str()) ;
|
||||
|
||||
|
@ -667,9 +685,11 @@ void Server::makeReferencePointListFromFile(const string &filename)
|
|||
if (!pointExists(tmp_point))
|
||||
{
|
||||
rp.setCoordinates(tmp_point);
|
||||
reference_point_list.push_back(rp);
|
||||
#ifdef DEBUG_2
|
||||
dest_point_list.push_back(rp);
|
||||
#ifdef DEBUG
|
||||
npoints++ ;
|
||||
#endif
|
||||
#ifdef DEBUG_2
|
||||
cout << tmp_point << " : ajouté." << endl ;
|
||||
}
|
||||
else
|
||||
|
@ -681,18 +701,18 @@ void Server::makeReferencePointListFromFile(const string &filename)
|
|||
|
||||
#ifdef FRED_CSV_FORMAT
|
||||
vector<int> measures_vector = extractValues(infos[4]) ;
|
||||
for (i = 0 ; i < measures_vector.size() ; i++)
|
||||
reference_point_list[pt_idx].addMeasurement(infos[3], measures_vector[i]);
|
||||
for (unsigned int i = 0 ; i < measures_vector.size() ; i++)
|
||||
dest_point_list[pt_idx].addMeasurement(infos[3], measures_vector[i]);
|
||||
measures_vector.clear();
|
||||
#else
|
||||
for (i = 4 ; i < infos.size() ; i++)
|
||||
for (unsigned int i = 4 ; i < infos.size() ; i++)
|
||||
{
|
||||
#ifdef DEBUG_2
|
||||
cout << "Lecture de la valeur : " << infos[i] << "... " ;
|
||||
#endif
|
||||
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
|
||||
cout << "Mesure ajoutée : AP = " << infos[i] << " | SS = " << string2int(infos[i+1]) << endl ;
|
||||
#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()
|
||||
{
|
||||
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()
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0 ; i < access_point_list.size() ; i++)
|
||||
for (unsigned int i = 0 ; i < access_point_list.size() ; i++)
|
||||
cout << access_point_list[i] << endl;
|
||||
}
|
||||
|
||||
|
@ -791,14 +817,13 @@ void Server::printAccessPointList()
|
|||
|
||||
void Server::computeFriisFromRefList()
|
||||
{
|
||||
unsigned int i, j;
|
||||
vector<float> friis_idx_list;
|
||||
Point pt_coords, ap_coords;
|
||||
float ap_power, ap_gain, calib_gain = 2, const_term, mes_power, friis_sum;
|
||||
unsigned int ap_freq;
|
||||
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_coords = access_point_list[i].getCoordinates();
|
||||
|
@ -812,18 +837,21 @@ void Server::computeFriisFromRefList()
|
|||
const_term += 20 * log10 (300000000.0 / ap_freq) + ap_power;
|
||||
|
||||
/* 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();
|
||||
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))));
|
||||
}
|
||||
|
||||
/* Now, compute avg value */
|
||||
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];
|
||||
access_point_list[i].setFriisIndex(friis_sum / friis_idx_list.size());
|
||||
|
||||
cout << access_point_list[i].getApAddr() << " -> " << (friis_sum / friis_idx_list.size()) << endl;
|
||||
|
||||
friis_idx_list.clear();
|
||||
}
|
||||
}
|
||||
|
@ -844,6 +872,8 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c
|
|||
vector<Point>
|
||||
&E_current = cl.getRef_viterbi_Ecurrent(),
|
||||
&E_previous = cl.getRef_viterbi_Eprevious() ;
|
||||
vector<ReferencePoint> peregrination_point_list ;
|
||||
makePointListFromFile(peregrination_point_list, DEFAULT_TRACKING_FILE) ;
|
||||
#else
|
||||
float **V = client_list[id_client].get_viterbi_V() ;
|
||||
vector<Point>
|
||||
|
@ -860,27 +890,35 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c
|
|||
}
|
||||
|
||||
#ifdef TEST
|
||||
int pt = 0 ;
|
||||
#ifdef DEBUG
|
||||
cout << reference_point_list.size() << " points à traiter." << endl ;
|
||||
#endif
|
||||
while (pt < reference_point_list.size())
|
||||
unsigned int pt = 0 ;
|
||||
#ifdef DEBUG
|
||||
cout << reference_point_list.size() << " points de référence, " << peregrination_point_list.size() << " points de pérégrination." << endl ;
|
||||
|
||||
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
|
||||
while (true)
|
||||
#endif
|
||||
{
|
||||
vector<Measurement> vm ;
|
||||
Point *ref_coords = NULL ; // Coordonnées de référence (à ignorer).
|
||||
|
||||
#ifdef TEST
|
||||
/* Get point measurements */
|
||||
vm.clear();
|
||||
vm = reference_point_list[pt].getMeasurementList();
|
||||
// *ref_coords = reference_point_list[i].getCoordinates();
|
||||
//vm.clear();
|
||||
vm = peregrination_point_list[pt].getMeasurementList();
|
||||
#endif
|
||||
|
||||
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
|
||||
{
|
||||
|
@ -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 << "V :" << endl ;
|
||||
for (int n=0 ; n < N-1 ; n++)
|
||||
{
|
||||
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 << "\n--------------------------" << endl ;
|
||||
#endif
|
||||
|
||||
if (i < N-1)
|
||||
i++ ;
|
||||
|
|
|
@ -68,11 +68,14 @@ public:
|
|||
Point fbcm(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 makePointListFromFile(vector<ReferencePoint> &dest_point_list, const string &filename) ;
|
||||
void makeApListFromFile(const string &filename);
|
||||
void printReferencePointList();
|
||||
void printPointList(vector<ReferencePoint> &point_list) ;
|
||||
void printAccessPointList();
|
||||
void computeFriisFromRefList();
|
||||
unsigned int getNbReferencePoints()const { return reference_point_list.size(); };
|
||||
|
||||
/* For experimentation purpose only ! */
|
||||
void radar_exp();
|
||||
|
||||
|
|
Loading…
Reference in New Issue