Beaucoup modifs cosmétiques et ajouts dans GuiNuMo
Partout où cela était possible : * Indentation "Emacs" du code, aération. * Utilisation de #define pour les valeurs par défaut. * Utilisation des valeurs par défaut dans les constructeurs. server.cc/hh : * Gestion d'erreur basique pour les ouvertures de fichiers. Ajout du TODO, d'après celui fait par Fred sous format papier. Création des répertoires : * cfg : fichiers de configuration. * csv : fichiers d'entrée. * log : fichiers de sortie. git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@28 785a6c6c-259e-4ff1-8b91-dc31627914f0
This commit is contained in:
parent
f273cba513
commit
f5292a5dd6
|
@ -30,6 +30,7 @@ test: test.o point.o measurement.o accesspoint.o referencepoint.o clientinfo.o s
|
||||||
$(LD) $(LDFLAGS) -o test test.o point.o measurement.o accesspoint.o referencepoint.o clientinfo.o server.o
|
$(LD) $(LDFLAGS) -o test test.o point.o measurement.o accesspoint.o referencepoint.o clientinfo.o server.o
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -fv *~
|
@rm -fv *~ *.o
|
||||||
rm -fv *.o
|
|
||||||
rm -fv test
|
purge : clean
|
||||||
|
@rm -fv test
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
* Measurement :
|
||||||
|
→ RÀS
|
||||||
|
|
||||||
|
* Point :
|
||||||
|
→ RÀS
|
||||||
|
|
||||||
|
* ReferencePoint :
|
||||||
|
→ RÀS pour l'instant.
|
||||||
|
|
||||||
|
* ClientInfo : classe qui doit contenir les données des utilisateurs.
|
||||||
|
- IP,
|
||||||
|
- Socket,
|
||||||
|
→ plus tard, pour une vraie démo.
|
||||||
|
- Historique Viterbi,
|
||||||
|
→ à faire maintenant.
|
||||||
|
|
||||||
|
* Server :
|
||||||
|
→ Mettre à jour les algos de Viterbi (3 au total).
|
||||||
|
|
||||||
|
* Area : déf. des zones & waypoints entre les zones. Une zone = 2 points.
|
||||||
|
→ Ajouter au serveur la gestion des connexités entre les zones + graphe qui s'étend (cf. avec les points de référence pour l'algo).
|
||||||
|
→ Faire la fonction qui calcule les matrices étendues en utilisant :
|
||||||
|
° la matrice de distances entre les points de connexité ;
|
||||||
|
° les distances euclidiennes entre les points après FBCM et les points de connexité.
|
|
@ -1,16 +1,5 @@
|
||||||
#include "accesspoint.hh"
|
#include "accesspoint.hh"
|
||||||
|
|
||||||
AccessPoint::AccessPoint()
|
|
||||||
{
|
|
||||||
coordinates.setX(0);
|
|
||||||
coordinates.setY(0);
|
|
||||||
coordinates.setZ(0);
|
|
||||||
ap_addr = "";
|
|
||||||
friis_index = 0;
|
|
||||||
freq = 2412;
|
|
||||||
antenna_gain = 2; //a good value
|
|
||||||
output_power = 20; //another good value, eq. to 100mW
|
|
||||||
}
|
|
||||||
|
|
||||||
AccessPoint::AccessPoint(string addr, float fidx, Point coords, unsigned int f, float antg, float outp)
|
AccessPoint::AccessPoint(string addr, float fidx, Point coords, unsigned int f, float antg, float outp)
|
||||||
{
|
{
|
||||||
|
@ -20,6 +9,8 @@ AccessPoint::AccessPoint(string addr, float fidx, Point coords, unsigned int f,
|
||||||
freq = f;
|
freq = f;
|
||||||
antenna_gain = antg;
|
antenna_gain = antg;
|
||||||
output_power = outp;
|
output_power = outp;
|
||||||
|
|
||||||
|
//cout << "coords = " << coords << " ; addr = " << addr << " ; fidx = " << fidx << " ; antg = " << antg << " ; outp = " << outp << endl ;
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessPoint::AccessPoint(const AccessPoint &ap)
|
AccessPoint::AccessPoint(const AccessPoint &ap)
|
||||||
|
|
|
@ -8,9 +8,15 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
#define AP_DEFAULT_ADDR ""
|
||||||
|
#define AP_DEFAULT_FRIIS_INDEX 0
|
||||||
|
#define AP_DEFAULT_FREQ 2412
|
||||||
|
#define AP_DEFAULT_ANTENNA_GAIN 2 // A good value
|
||||||
|
#define AP_DEFAULT_OUTPUT_POWER 20 // Another good value, eq. to 100mW
|
||||||
|
|
||||||
class AccessPoint
|
class AccessPoint
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
Point coordinates;
|
Point coordinates;
|
||||||
string ap_addr;
|
string ap_addr;
|
||||||
float friis_index;
|
float friis_index;
|
||||||
|
@ -18,9 +24,8 @@ class AccessPoint
|
||||||
float antenna_gain;
|
float antenna_gain;
|
||||||
float output_power;
|
float output_power;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AccessPoint();
|
AccessPoint(string addr = AP_DEFAULT_ADDR, float fidx = AP_DEFAULT_FRIIS_INDEX, Point coords = Point(), unsigned int f = AP_DEFAULT_FREQ, float antg = AP_DEFAULT_ANTENNA_GAIN, float outp = AP_DEFAULT_OUTPUT_POWER);
|
||||||
AccessPoint(string addr, float fidx, Point coords, unsigned int f, float antg, float outp);
|
|
||||||
AccessPoint(const AccessPoint &ap);
|
AccessPoint(const AccessPoint &ap);
|
||||||
~AccessPoint() {};
|
~AccessPoint() {};
|
||||||
string getApAddr()const { return ap_addr; };
|
string getApAddr()const { return ap_addr; };
|
||||||
|
|
|
@ -1,15 +1,5 @@
|
||||||
#include "area.hh"
|
#include "area.hh"
|
||||||
|
|
||||||
Area::Area()
|
|
||||||
{
|
|
||||||
area_name = "None";
|
|
||||||
x_min = 0;
|
|
||||||
x_max = 0;
|
|
||||||
y_min = 0;
|
|
||||||
y_max = 0;
|
|
||||||
z_min = 0;
|
|
||||||
z_max = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Area::Area(string an, float x1, float x2, float y1, float y2, float z1, float z2)
|
Area::Area(string an, float x1, float x2, float y1, float y2, float z1, float z2)
|
||||||
{
|
{
|
||||||
|
@ -35,7 +25,12 @@ Area::Area(const Area &a)
|
||||||
|
|
||||||
bool Area::containsPoint(Point p)const
|
bool Area::containsPoint(Point p)const
|
||||||
{
|
{
|
||||||
if((p.getX()>=x_min)&&(p.getX()<=x_max)&&(p.getY()>=y_min)&&(p.getY()<=y_max)&&(p.getZ()>=z_min)&&(p.getZ()<=z_max))
|
if((p.getX() >= x_min) \
|
||||||
|
&& (p.getX() <= x_max) \
|
||||||
|
&& (p.getY() >= y_min) \
|
||||||
|
&& (p.getY() <= y_max) \
|
||||||
|
&& (p.getZ() >= z_min) \
|
||||||
|
&& (p.getZ() <= z_max))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,7 @@ protected:
|
||||||
float z_max;
|
float z_max;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Area();
|
Area(string an = "None", float x1 = 0, float x2 = 0, float y1 = 0, float y2 = 0, float z1 = 0, float z2 = 0);
|
||||||
Area(string an, float x1, float x2, float y1, float y2, float z1, float z2);
|
|
||||||
Area(const Area &a);
|
Area(const Area &a);
|
||||||
~Area() {};
|
~Area() {};
|
||||||
bool containsPoint(Point p)const;
|
bool containsPoint(Point p)const;
|
||||||
|
|
|
@ -1,20 +1,13 @@
|
||||||
#include "clientinfo.hh"
|
#include "clientinfo.hh"
|
||||||
|
|
||||||
ClientInfo::ClientInfo()
|
|
||||||
{
|
|
||||||
client_ip = "127.0.0.1";
|
|
||||||
antenna_gain = 2; //good default value
|
|
||||||
client_listen_port = CLIENT_DEFAULT_PORT;
|
|
||||||
for(int i=0;i<5;i++)
|
|
||||||
viterbi_distances[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientInfo::ClientInfo(string ip, int port, float antg)
|
ClientInfo::ClientInfo(string ip, int port, float antg)
|
||||||
{
|
{
|
||||||
client_ip = ip;
|
client_ip = ip;
|
||||||
antenna_gain = antg;
|
antenna_gain = antg;
|
||||||
client_listen_port = port;
|
client_listen_port = port;
|
||||||
for(int i=0;i<5;i++)
|
|
||||||
|
for(int i=0 ; i < 5 ; i++)
|
||||||
viterbi_distances[i] = 0;
|
viterbi_distances[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ using namespace std;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
#define CLIENT_DEFAULT_PORT 7778
|
#define CLIENT_DEFAULT_PORT 7778
|
||||||
|
#define CLIENT_DEFAULT_IP "127.0.0.1"
|
||||||
|
#define CLIENT_DEFAULT_ANTENNA_GAIN 2 // Good default value
|
||||||
|
|
||||||
class ClientInfo
|
class ClientInfo
|
||||||
{
|
{
|
||||||
|
@ -17,13 +19,12 @@ protected:
|
||||||
string client_ip;
|
string client_ip;
|
||||||
float antenna_gain;
|
float antenna_gain;
|
||||||
int client_listen_port;
|
int client_listen_port;
|
||||||
vector<Point> viterbi_vector1; /* Previous vector */
|
vector<Point> viterbi_vector1; // Previous vector
|
||||||
vector<Point> viterbi_vector2; /* Last vector */
|
vector<Point> viterbi_vector2; // Last vector
|
||||||
float viterbi_distances[5];
|
float viterbi_distances[5];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClientInfo();
|
ClientInfo(string ip = CLIENT_DEFAULT_IP, int port = CLIENT_DEFAULT_PORT, float antg = CLIENT_DEFAULT_ANTENNA_GAIN);
|
||||||
ClientInfo(string ip, int port, float antg);
|
|
||||||
~ClientInfo();
|
~ClientInfo();
|
||||||
float getAntennaGain()const { return antenna_gain; };
|
float getAntennaGain()const { return antenna_gain; };
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,10 +18,10 @@ ostream &operator<<(ostream &os, Measurement &m)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
os << m.mac_addr << "->";
|
os << m.mac_addr << "->";
|
||||||
if(m.ss_list.size() == 0)
|
if (m.ss_list.size() == 0)
|
||||||
os << "No values";
|
os << "No values";
|
||||||
else
|
else
|
||||||
for(i=0;i<m.ss_list.size();i++)
|
for (i = 0 ; i < m.ss_list.size() ; i++)
|
||||||
{
|
{
|
||||||
os << m.ss_list[i];
|
os << m.ss_list[i];
|
||||||
if(i < m.ss_list.size() - 1)
|
if(i < m.ss_list.size() - 1)
|
||||||
|
|
|
@ -11,14 +11,13 @@ using std::string;
|
||||||
|
|
||||||
class Measurement
|
class Measurement
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
string mac_addr;
|
string mac_addr;
|
||||||
float average_ss;
|
float average_ss;
|
||||||
vector<int> ss_list;
|
vector<int> ss_list;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Measurement() { mac_addr = "ff:ff:ff:ff:ff:ff"; average_ss = 0; };
|
Measurement(string ma = "ff:ff:ff:ff:ff:ff", float avg = 0, vector<int> ssl = vector<int>()) { mac_addr = ma; average_ss = avg, ss_list = ssl; };
|
||||||
Measurement(string ma, float avg, vector<int> ssl) { mac_addr = ma; average_ss = avg, ss_list = ssl; };
|
|
||||||
Measurement(const Measurement &m) { mac_addr = m.mac_addr; average_ss = m.average_ss; ss_list = m.ss_list; };
|
Measurement(const Measurement &m) { mac_addr = m.mac_addr; average_ss = m.average_ss; ss_list = m.ss_list; };
|
||||||
~Measurement() { ss_list.clear(); };
|
~Measurement() { ss_list.clear(); };
|
||||||
vector<int> getSsList()const { return ss_list; };
|
vector<int> getSsList()const { return ss_list; };
|
||||||
|
|
|
@ -12,14 +12,14 @@ Point Point::operator=(const Point &p)
|
||||||
|
|
||||||
bool Point::operator==(const Point &p)const
|
bool Point::operator==(const Point &p)const
|
||||||
{
|
{
|
||||||
if((x == p.x)&&(y == p.y)&&(z == p.z))
|
if((x == p.x) && (y == p.y) && (z == p.z))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Point::operator!=(const Point &p)const
|
bool Point::operator!=(const Point &p)const
|
||||||
{
|
{
|
||||||
if((x == p.x)&&(y == p.y)&&(z == p.z))
|
if((x == p.x) && (y == p.y) && (z == p.z))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,15 +8,14 @@ using namespace std;
|
||||||
|
|
||||||
class Point
|
class Point
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
float z;
|
float z;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Point() { x = 0; y = 0; z = 0; };
|
Point(float _x = 0, float _y = 0, float _z = 0) { x = _x; y = _y; z = _z; } ;
|
||||||
Point(const Point &p) { x = p.x; y = p.y; z = p.z; } ;
|
Point(const Point &p) { x = p.x; y = p.y; z = p.z; } ;
|
||||||
Point(float my_x, float my_y, float my_z) { x = my_x; y = my_y; z = my_z; };
|
|
||||||
~Point() {};
|
~Point() {};
|
||||||
float getX()const { return x; };
|
float getX()const { return x; };
|
||||||
float getY()const { return y; };
|
float getY()const { return y; };
|
||||||
|
|
|
@ -15,9 +15,8 @@ protected:
|
||||||
vector<Measurement> measurement_list;
|
vector<Measurement> measurement_list;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ReferencePoint() { coordinates.setX(0); coordinates.setY(0); coordinates.setZ(0); };
|
ReferencePoint(float x = 0, float y = 0, float z = 0) { coordinates.setX(x); coordinates.setY(y); coordinates.setZ(z); };
|
||||||
ReferencePoint(const ReferencePoint &rp) { coordinates = rp.coordinates; measurement_list = rp.measurement_list; };
|
ReferencePoint(const ReferencePoint &rp) { coordinates = rp.coordinates; measurement_list = rp.measurement_list; };
|
||||||
ReferencePoint(float x, float y, float z) { coordinates.setX(x); coordinates.setY(y); coordinates.setZ(z); };
|
|
||||||
ReferencePoint(Point c) { coordinates = c; };
|
ReferencePoint(Point c) { coordinates = c; };
|
||||||
~ReferencePoint() { measurement_list.clear(); };
|
~ReferencePoint() { measurement_list.clear(); };
|
||||||
float getSsSquareDistance(vector<Measurement> m)const;
|
float getSsSquareDistance(vector<Measurement> m)const;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "server.hh"
|
#include "server.hh"
|
||||||
|
|
||||||
/* Misc. very usefull functions */
|
/* Misc. very usefull functions */
|
||||||
|
|
||||||
/* Explodes a string into substrings based on separator sep. Returns a string vector. */
|
/* Explodes a string into substrings based on separator sep. Returns a string vector. */
|
||||||
inline vector<string> explode(string input, char sep)
|
inline vector<string> explode(string input, char sep)
|
||||||
{
|
{
|
||||||
|
@ -8,8 +9,8 @@ inline vector<string> explode(string input, char sep)
|
||||||
string tmp;
|
string tmp;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<input.size();i++)
|
for (i = 0 ; i < input.size() ; i++)
|
||||||
if(input[i] == sep)
|
if (input[i] == sep)
|
||||||
{
|
{
|
||||||
vs.push_back(tmp);
|
vs.push_back(tmp);
|
||||||
tmp.clear();
|
tmp.clear();
|
||||||
|
@ -32,7 +33,7 @@ inline int string2int(string nb)
|
||||||
istringstream iss(nb);
|
istringstream iss(nb);
|
||||||
|
|
||||||
int tmp;
|
int tmp;
|
||||||
iss>>tmp;
|
iss >> tmp;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ inline unsigned int string2uint(string nb)
|
||||||
istringstream iss(nb);
|
istringstream iss(nb);
|
||||||
|
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
iss>>tmp;
|
iss >> tmp;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +53,7 @@ inline float string2float(string nb)
|
||||||
istringstream iss(nb);
|
istringstream iss(nb);
|
||||||
|
|
||||||
float tmp;
|
float tmp;
|
||||||
iss>>tmp;
|
iss >> tmp;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,12 +64,12 @@ inline vector<int> extractValues(string buff)
|
||||||
vector<int> ret;
|
vector<int> ret;
|
||||||
string tmp_field;
|
string tmp_field;
|
||||||
|
|
||||||
if(buff[buff.size()-1] != ';')
|
if (buff[buff.size()-1] != ';')
|
||||||
buff.push_back(';');
|
buff.push_back(';');
|
||||||
|
|
||||||
while(ptr < buff.size())
|
while (ptr < buff.size())
|
||||||
{
|
{
|
||||||
if(buff[ptr] != ';')
|
if (buff[ptr] != ';')
|
||||||
tmp_field.push_back(buff[ptr]);
|
tmp_field.push_back(buff[ptr]);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -88,7 +89,7 @@ inline vector<string> extractReferencePointInfoFromBuffer(string buffer_in)
|
||||||
|
|
||||||
/* Extract coordinates */
|
/* Extract coordinates */
|
||||||
/* x */
|
/* x */
|
||||||
while(buffer_in[i] != ';')
|
while (buffer_in[i] != ';')
|
||||||
{
|
{
|
||||||
tmp_field.push_back(buffer_in[i]);
|
tmp_field.push_back(buffer_in[i]);
|
||||||
i++;
|
i++;
|
||||||
|
@ -98,7 +99,7 @@ inline vector<string> extractReferencePointInfoFromBuffer(string buffer_in)
|
||||||
i++; //go after the ';'
|
i++; //go after the ';'
|
||||||
|
|
||||||
/* y */
|
/* y */
|
||||||
while(buffer_in[i] != ';')
|
while (buffer_in[i] != ';')
|
||||||
{
|
{
|
||||||
tmp_field.push_back(buffer_in[i]);
|
tmp_field.push_back(buffer_in[i]);
|
||||||
i++;
|
i++;
|
||||||
|
@ -108,7 +109,7 @@ inline vector<string> extractReferencePointInfoFromBuffer(string buffer_in)
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
/* Extract direction (not used now) */
|
/* Extract direction (not used now) */
|
||||||
while(buffer_in[i] != ';')
|
while (buffer_in[i] != ';')
|
||||||
{
|
{
|
||||||
tmp_field.push_back(buffer_in[i]);
|
tmp_field.push_back(buffer_in[i]);
|
||||||
i++;
|
i++;
|
||||||
|
@ -118,7 +119,7 @@ inline vector<string> extractReferencePointInfoFromBuffer(string buffer_in)
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
/* Extract mac address */
|
/* Extract mac address */
|
||||||
while(buffer_in[i] != ';')
|
while (buffer_in[i] != ';')
|
||||||
{
|
{
|
||||||
tmp_field.push_back(buffer_in[i]);
|
tmp_field.push_back(buffer_in[i]);
|
||||||
i++;
|
i++;
|
||||||
|
@ -128,7 +129,7 @@ inline vector<string> extractReferencePointInfoFromBuffer(string buffer_in)
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
/* Extract scan list */
|
/* Extract scan list */
|
||||||
while(i < buffer_in.size())
|
while (i < buffer_in.size())
|
||||||
{
|
{
|
||||||
tmp_field.push_back(buffer_in[i]);
|
tmp_field.push_back(buffer_in[i]);
|
||||||
i++;
|
i++;
|
||||||
|
@ -141,23 +142,9 @@ inline vector<string> extractReferencePointInfoFromBuffer(string buffer_in)
|
||||||
}
|
}
|
||||||
/* ***************************************************************** */
|
/* ***************************************************************** */
|
||||||
|
|
||||||
Server::Server()
|
|
||||||
{
|
|
||||||
/* Open socket */
|
|
||||||
sockListen = socket(PF_INET, SOCK_DGRAM, 0);
|
|
||||||
sockSend = socket(PF_INET, SOCK_DGRAM, 0);
|
|
||||||
|
|
||||||
/* Set addr */
|
//Server::Server(string ip_addr, int listen_port, int send_port) // FIXME : paramètre send_port inutilisé
|
||||||
server_addr.sin_family = AF_INET;
|
Server::Server(string ip_addr, int listen_port)
|
||||||
server_addr.sin_port = htons(DEFAULT_LISTEN_PORT);
|
|
||||||
server_addr.sin_addr.s_addr = inet_addr(DEFAULT_IP);
|
|
||||||
memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero));
|
|
||||||
|
|
||||||
/* Bind */
|
|
||||||
bind(sockListen, (struct sockaddr *)&server_addr, sizeof(server_addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
Server::Server(string ip_addr, int listen_port, int send_port)
|
|
||||||
{
|
{
|
||||||
/* Open socket */
|
/* Open socket */
|
||||||
sockListen = socket(PF_INET, SOCK_DGRAM, 0);
|
sockListen = socket(PF_INET, SOCK_DGRAM, 0);
|
||||||
|
@ -198,9 +185,10 @@ bool Server::pointExists(float x, float y, float z)const
|
||||||
Point p(x, y, z);
|
Point p(x, y, z);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
if(p == reference_point_list[i].getCoordinates())
|
if (p == reference_point_list[i].getCoordinates())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,20 +198,21 @@ unsigned int Server::pointIndex(float x, float y, float z)const
|
||||||
Point p(x, y, z);
|
Point p(x, y, z);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
if(p == reference_point_list[i].getCoordinates())
|
if (p == reference_point_list[i].getCoordinates())
|
||||||
return i;
|
return i;
|
||||||
/* Should never happen */
|
|
||||||
return 0;
|
return 0; // Should never happen
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Server::pointExists(Point p)const
|
bool Server::pointExists(Point p)const
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
if(p == reference_point_list[i].getCoordinates())
|
if (p == reference_point_list[i].getCoordinates())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,8 +220,8 @@ bool Server::apExists(string ap_addr)const
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<access_point_list.size();i++)
|
for (i = 0 ; i < access_point_list.size() ; i++)
|
||||||
if(access_point_list[i].getApAddr() == ap_addr)
|
if (access_point_list[i].getApAddr() == ap_addr)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -242,12 +231,11 @@ unsigned int Server::apIndex(string ap_addr)const
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<access_point_list.size();i++)
|
for (i = 0 ; i < access_point_list.size() ; i++)
|
||||||
if(access_point_list[i].getApAddr() == ap_addr)
|
if (access_point_list[i].getApAddr() == ap_addr)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
/* Should never happen */
|
return 0; // Should never happen
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do not forget to call pointExists() before this one */
|
/* Do not forget to call pointExists() before this one */
|
||||||
|
@ -255,11 +243,11 @@ unsigned int Server::pointIndex(Point p)const
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
if(p == reference_point_list[i].getCoordinates())
|
if (p == reference_point_list[i].getCoordinates())
|
||||||
return i;
|
return i;
|
||||||
/* Should never happen */
|
|
||||||
return 0;
|
return 0; // Should never happen
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return -1 if point does not exist, which should never happen */
|
/* return -1 if point does not exist, which should never happen */
|
||||||
|
@ -271,8 +259,8 @@ vector<Point> Server::getkClosestInSs(vector<Measurement> m, unsigned int k, boo
|
||||||
Point tmp_pt;
|
Point tmp_pt;
|
||||||
float tmp_distance = 0, dist_max = 10000000, tmp_min;
|
float tmp_distance = 0, dist_max = 10000000, tmp_min;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
if(!ignore_point||(reference_point_list[i].getCoordinates() != point_ignored))
|
if (!ignore_point||(reference_point_list[i].getCoordinates() != point_ignored))
|
||||||
{
|
{
|
||||||
tmp_distance = reference_point_list[i].getSsSquareDistance(m);
|
tmp_distance = reference_point_list[i].getSsSquareDistance(m);
|
||||||
/* if not k points, add it */
|
/* if not k points, add it */
|
||||||
|
@ -288,8 +276,8 @@ vector<Point> Server::getkClosestInSs(vector<Measurement> m, unsigned int k, boo
|
||||||
if(dist_max > tmp_distance)
|
if(dist_max > tmp_distance)
|
||||||
{
|
{
|
||||||
/* remove old max */
|
/* remove old max */
|
||||||
for(j=0;j<distances_vector.size();j++)
|
for (j = 0 ; j < distances_vector.size() ; j++)
|
||||||
if(distances_vector[j] == dist_max)
|
if (distances_vector[j] == dist_max)
|
||||||
{
|
{
|
||||||
dist_max = tmp_distance;
|
dist_max = tmp_distance;
|
||||||
distances_vector.erase(distances_vector.begin() + j);
|
distances_vector.erase(distances_vector.begin() + j);
|
||||||
|
@ -304,17 +292,18 @@ vector<Point> Server::getkClosestInSs(vector<Measurement> m, unsigned int k, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sorts the vector */
|
/* Sorts the vector */
|
||||||
for(i=0;i<distances_vector.size()-1;i++)
|
for (i = 0 ; i < distances_vector.size() - 1 ; i++)
|
||||||
{
|
{
|
||||||
tmp_min = distances_vector[i];
|
tmp_min = distances_vector[i];
|
||||||
min_idx = i;
|
min_idx = i;
|
||||||
for(j=i+1;j<distances_vector.size();j++)
|
for (j = i+1 ; j < distances_vector.size() ; j++)
|
||||||
if(tmp_min > distances_vector[j])
|
if (tmp_min > distances_vector[j])
|
||||||
{
|
{
|
||||||
tmp_min = distances_vector[j];
|
tmp_min = distances_vector[j];
|
||||||
min_idx = j;
|
min_idx = j;
|
||||||
}
|
}
|
||||||
if(min_idx != i)
|
|
||||||
|
if (min_idx != i)
|
||||||
{
|
{
|
||||||
/* Swap points */
|
/* Swap points */
|
||||||
tmp_pt = points_vector[i];
|
tmp_pt = points_vector[i];
|
||||||
|
@ -339,24 +328,24 @@ Point Server::getkWeightedInSs(vector<Measurement> m, unsigned int k, bool ignor
|
||||||
Point ret;
|
Point ret;
|
||||||
float total = 0, x = 0, y = 0, z = 0;
|
float total = 0, x = 0, y = 0, z = 0;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
if(!ignore_point||(reference_point_list[i].getCoordinates() != point_ignored))
|
if (!ignore_point || (reference_point_list[i].getCoordinates() != point_ignored))
|
||||||
{
|
{
|
||||||
tmp_distance = reference_point_list[i].getSsSquareDistance(m);
|
tmp_distance = reference_point_list[i].getSsSquareDistance(m);
|
||||||
/* if not k points, add it */
|
/* if not k points, add it */
|
||||||
if(distances_vector.size() < k)
|
if (distances_vector.size() < k)
|
||||||
{
|
{
|
||||||
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
|
||||||
{
|
{
|
||||||
/* if tmp_dst < dist_max, should add it and remove previous greatest dist. */
|
/* if tmp_dst < dist_max, should add it and remove previous greatest dist. */
|
||||||
if(dist_max > tmp_distance)
|
if (dist_max > tmp_distance)
|
||||||
{
|
{
|
||||||
/* remove old max */
|
/* remove old max */
|
||||||
for(j=0;j<distances_vector.size();j++)
|
for (j = 0 ; j < distances_vector.size() ; j++)
|
||||||
if(distances_vector[j] == dist_max)
|
if(distances_vector[j] == dist_max)
|
||||||
{
|
{
|
||||||
dist_max = tmp_distance;
|
dist_max = tmp_distance;
|
||||||
|
@ -370,10 +359,10 @@ Point Server::getkWeightedInSs(vector<Measurement> m, unsigned int k, bool ignor
|
||||||
/* Else nothing needs to be done */
|
/* Else nothing needs to be done */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(i=0;i<distances_vector.size();i++)
|
for (i = 0 ; i < distances_vector.size() ; i++)
|
||||||
total += distances_vector[i];
|
total += distances_vector[i];
|
||||||
|
|
||||||
for(i=0;i<distances_vector.size();i++)
|
for (i = 0 ; i < distances_vector.size() ; i++)
|
||||||
{
|
{
|
||||||
x += points_vector[i].getX() * distances_vector[i] / total;
|
x += points_vector[i].getX() * distances_vector[i] / total;
|
||||||
y += points_vector[i].getY() * distances_vector[i] / total;
|
y += points_vector[i].getY() * distances_vector[i] / total;
|
||||||
|
@ -393,7 +382,7 @@ Point Server::kPointsAverage(vector<Point> vp)const
|
||||||
float x=0, y=0, z=0;
|
float x=0, y=0, z=0;
|
||||||
Point p;
|
Point p;
|
||||||
|
|
||||||
for(i=0;i<vp.size();i++)
|
for (i = 0 ; i < vp.size() ; i++)
|
||||||
{
|
{
|
||||||
x += vp[i].getX();
|
x += vp[i].getX();
|
||||||
y += vp[i].getY();
|
y += vp[i].getY();
|
||||||
|
@ -418,17 +407,17 @@ Point Server::fbcm(vector<Measurement> m, int client_idx)const
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
//cout << "FBCM: ";
|
//cout << "FBCM: ";
|
||||||
for(i=0;i<m.size();i++)
|
for (i = 0 ; i < m.size() ; i++)
|
||||||
if(apExists(m[i].getMacAddr()))
|
if (apExists(m[i].getMacAddr()))
|
||||||
{
|
{
|
||||||
ap_idx = apIndex(m[i].getMacAddr());
|
ap_idx = apIndex(m[i].getMacAddr());
|
||||||
//cout << "AP idx: " << ap_idx << " ";
|
//cout << "AP idx: " << ap_idx << " ";
|
||||||
centres.push_back(access_point_list[ap_idx].getCoordinates());
|
centres.push_back(access_point_list[ap_idx].getCoordinates());
|
||||||
addr.push_back(m[i].getMacAddr());
|
addr.push_back(m[i].getMacAddr());
|
||||||
constant_term = access_point_list[ap_idx].getOutputPower() + access_point_list[ap_idx].getAntennaGain() + 2;
|
constant_term = access_point_list[ap_idx].getOutputPower() + access_point_list[ap_idx].getAntennaGain() + 2;
|
||||||
constant_term += 20 * log10((300000000.0/(float) access_point_list[ap_idx].getFrequency())/(4*M_PI));
|
constant_term += 20 * log10((300000000.0 / (float) access_point_list[ap_idx].getFrequency()) / (4*M_PI));
|
||||||
//end of expr. should be: client_list[client_idx].getAntennaGain() instead of 2.
|
//end of expr. should be: client_list[client_idx].getAntennaGain() instead of 2.
|
||||||
//cout << "20log(" << (300000000.0/(float) access_point_list[ap_idx].getFrequency())/(4*M_PI) << ") = ";
|
//cout << "20log(" << (300000000.0 / (float) access_point_list[ap_idx].getFrequency()) / (4*M_PI) << ") = ";
|
||||||
//cout << constant_term << " ";
|
//cout << constant_term << " ";
|
||||||
dist_vect.push_back(pow(10, (constant_term - m[i].getAverage()) / (10 * access_point_list[ap_idx].getFriisIndex())));
|
dist_vect.push_back(pow(10, (constant_term - m[i].getAverage()) / (10 * access_point_list[ap_idx].getFriisIndex())));
|
||||||
//cout << endl;
|
//cout << endl;
|
||||||
|
@ -436,14 +425,14 @@ Point Server::fbcm(vector<Measurement> m, int client_idx)const
|
||||||
|
|
||||||
/* Then: min-max */
|
/* Then: min-max */
|
||||||
minmax_res = 1000000;
|
minmax_res = 1000000;
|
||||||
for(x=MINMAX_X_START;x<MINMAX_X_STOP;x+=MINMAX_STEP)
|
for (x = MINMAX_X_START ; x < MINMAX_X_STOP ; x += MINMAX_STEP)
|
||||||
for(y=MINMAX_Y_START;y<MINMAX_Y_STOP;y+=MINMAX_STEP)
|
for (y = MINMAX_Y_START ; y < MINMAX_Y_STOP ; y += MINMAX_STEP)
|
||||||
{
|
{
|
||||||
minmax_max = 0;
|
minmax_max = 0;
|
||||||
for(i=0;i<centres.size();i++)
|
for (i = 0 ; i < centres.size() ; i++)
|
||||||
if((centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i])) > minmax_max)
|
if ((centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i])) > minmax_max)
|
||||||
minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i]);
|
minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i] * dist_vect[i]);
|
||||||
if(minmax_max < minmax_res)
|
if (minmax_max < minmax_res)
|
||||||
{
|
{
|
||||||
ret.setX(x);
|
ret.setX(x);
|
||||||
ret.setY(y);
|
ret.setY(y);
|
||||||
|
@ -471,28 +460,28 @@ Point Server::interlink(vector<Measurement> m, int client_idx)const
|
||||||
float x = MINMAX_X_START, y = MINMAX_Y_START;
|
float x = MINMAX_X_START, y = MINMAX_Y_START;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for(i=0;i<m.size();i++)
|
for (i = 0 ; i < m.size() ; i++)
|
||||||
if(apExists(m[i].getMacAddr()))
|
if (apExists(m[i].getMacAddr()))
|
||||||
{
|
{
|
||||||
ap_idx = apIndex(m[i].getMacAddr());
|
ap_idx = apIndex(m[i].getMacAddr());
|
||||||
centres.push_back(access_point_list[ap_idx].getCoordinates());
|
centres.push_back(access_point_list[ap_idx].getCoordinates());
|
||||||
addr.push_back(m[i].getMacAddr());
|
addr.push_back(m[i].getMacAddr());
|
||||||
constant_term = access_point_list[ap_idx].getOutputPower() + access_point_list[ap_idx].getAntennaGain();
|
constant_term = access_point_list[ap_idx].getOutputPower() + access_point_list[ap_idx].getAntennaGain();
|
||||||
constant_term += 20 * log10((300000000.0/(float) access_point_list[ap_idx].getFrequency())/(4*M_PI)) + 2;
|
constant_term += 20 * log10((300000000.0 / (float) access_point_list[ap_idx].getFrequency()) / (4*M_PI)) + 2;
|
||||||
//end of expr. should be: client_list[client_idx].getAntennaGain() instead of 2.
|
//end of expr. should be: client_list[client_idx].getAntennaGain() instead of 2.
|
||||||
dist_vect.push_back(pow(10, (constant_term - m[i].getAverage()) / 35));
|
dist_vect.push_back(pow(10, (constant_term - m[i].getAverage()) / 35));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Then: min-max */
|
/* Then: min-max */
|
||||||
minmax_res = 1000000;
|
minmax_res = 1000000;
|
||||||
for(x=MINMAX_X_START;x<MINMAX_X_STOP;x+=MINMAX_STEP)
|
for (x = MINMAX_X_START ; x < MINMAX_X_STOP ; x += MINMAX_STEP)
|
||||||
for(y=MINMAX_Y_START;y<MINMAX_Y_STOP;y+=MINMAX_STEP)
|
for (y = MINMAX_Y_START ; y < MINMAX_Y_STOP ; y += MINMAX_STEP)
|
||||||
{
|
{
|
||||||
minmax_max = 0;
|
minmax_max = 0;
|
||||||
for(i=0;i<centres.size();i++)
|
for (i = 0 ; i < centres.size() ; i++)
|
||||||
if((centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i])) > minmax_max)
|
if ((centres[i].squareDistance(x, y, 3) - (dist_vect[i] * dist_vect[i])) > minmax_max)
|
||||||
minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i]);
|
minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i] * dist_vect[i]) ;
|
||||||
if(minmax_max < minmax_res)
|
if (minmax_max < minmax_res)
|
||||||
{
|
{
|
||||||
ret.setX(x);
|
ret.setX(x);
|
||||||
ret.setY(y);
|
ret.setY(y);
|
||||||
|
@ -522,11 +511,17 @@ void Server::makeReferencePointListFromFile(string filename)
|
||||||
vector<int> measures_vector;
|
vector<int> measures_vector;
|
||||||
vector<string> infos;
|
vector<string> infos;
|
||||||
|
|
||||||
input_file.open(filename.c_str());
|
input_file.open(filename.c_str()) ;
|
||||||
while(!input_file.eof())
|
if (input_file.fail())
|
||||||
|
{
|
||||||
|
cerr << "Error opening input file « " << filename << " » !" << endl ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!input_file.eof())
|
||||||
{
|
{
|
||||||
input_file.getline(buffer, BUFFER_LENGTH);
|
input_file.getline(buffer, BUFFER_LENGTH);
|
||||||
if ((input_file.rdstate() & ifstream::eofbit ) == 0 )
|
if ((input_file.rdstate() & ifstream::eofbit) == 0)
|
||||||
{
|
{
|
||||||
/* Extract fields */
|
/* Extract fields */
|
||||||
cpp_buffer = buffer;
|
cpp_buffer = buffer;
|
||||||
|
@ -538,14 +533,14 @@ void Server::makeReferencePointListFromFile(string filename)
|
||||||
tmp_point.setY(y);
|
tmp_point.setY(y);
|
||||||
tmp_point.setZ(DEFAULT_Z);
|
tmp_point.setZ(DEFAULT_Z);
|
||||||
/* Use C++ string format */
|
/* Use C++ string format */
|
||||||
if(!pointExists(tmp_point))
|
if (!pointExists(tmp_point))
|
||||||
{
|
{
|
||||||
rp.setCoordinates(tmp_point);
|
rp.setCoordinates(tmp_point);
|
||||||
reference_point_list.push_back(rp);
|
reference_point_list.push_back(rp);
|
||||||
}
|
}
|
||||||
pt_idx = pointIndex(tmp_point);
|
pt_idx = pointIndex(tmp_point);
|
||||||
measures_vector = extractValues(infos[4]);
|
measures_vector = extractValues(infos[4]);
|
||||||
for(i=0;i<measures_vector.size();i++)
|
for (i = 0 ; i < measures_vector.size() ; i++)
|
||||||
reference_point_list[pt_idx].addMeasurement(infos[3], measures_vector[i]);
|
reference_point_list[pt_idx].addMeasurement(infos[3], measures_vector[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -562,14 +557,20 @@ void Server::makeApListFromFile(string filename)
|
||||||
AccessPoint tmp_ap;
|
AccessPoint tmp_ap;
|
||||||
|
|
||||||
input_file.open(filename.c_str());
|
input_file.open(filename.c_str());
|
||||||
while(!input_file.eof())
|
if (input_file.fail())
|
||||||
|
{
|
||||||
|
cerr << "Error opening input file « " << filename << " » !" << endl ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!input_file.eof())
|
||||||
{
|
{
|
||||||
input_file.getline(buffer, BUFFER_LENGTH);
|
input_file.getline(buffer, BUFFER_LENGTH);
|
||||||
if ((input_file.rdstate() & ifstream::eofbit ) == 0 )
|
if ((input_file.rdstate() & ifstream::eofbit) == 0)
|
||||||
{
|
{
|
||||||
ap_infos = explode(buffer, ';');
|
ap_infos = explode(buffer, ';');
|
||||||
cout << buffer << endl;
|
cout << buffer << endl;
|
||||||
for(unsigned int i=0;i<ap_infos.size();i++)
|
for (unsigned int i=0 ; i < ap_infos.size() ; i++)
|
||||||
cout << ap_infos[i] << endl;
|
cout << ap_infos[i] << endl;
|
||||||
tmp_ap.setApAddr(ap_infos[0]);
|
tmp_ap.setApAddr(ap_infos[0]);
|
||||||
tmp_ap.setCoordinates(string2float(ap_infos[1]), string2float(ap_infos[2]), string2float(ap_infos[3]));
|
tmp_ap.setCoordinates(string2float(ap_infos[1]), string2float(ap_infos[2]), string2float(ap_infos[3]));
|
||||||
|
@ -588,7 +589,7 @@ void Server::printReferencePointList()
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
cout << reference_point_list[i] << endl;
|
cout << reference_point_list[i] << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,7 +597,7 @@ void Server::printAccessPointList()
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -609,7 +610,7 @@ void Server::computeFriisFromRefList()
|
||||||
unsigned int ap_freq;
|
unsigned int ap_freq;
|
||||||
string ap_mac;
|
string ap_mac;
|
||||||
|
|
||||||
for(i=0;i<access_point_list.size();i++)
|
for (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();
|
||||||
|
@ -623,17 +624,15 @@ 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 (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 (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;
|
||||||
|
@ -641,12 +640,14 @@ void Server::computeFriisFromRefList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function computes new cumulative distances for each running viterbi instance,
|
* Function computes new cumulative distances for each running viterbi instance,
|
||||||
* Returns the solution (type: Point) of the last ended viterbi.
|
* Returns the solution (type: Point) of the last ended viterbi.
|
||||||
* Distances are grouped by line corresponding to an instance.
|
* Distances are grouped by line corresponding to an instance.
|
||||||
* vk MUST be the same as last.size() and current.size() !
|
* vk MUST be the same as last.size() and current.size() !
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
Point Server::viterbiLike(float ** dists, unsigned short vk, unsigned short vn, vector<Point> last, vector<Point> current)
|
Point Server::viterbiLike(float ** dists, unsigned short vk, unsigned short vn, vector<Point> last, vector<Point> current)
|
||||||
{
|
{
|
||||||
unsigned int i, j, k;
|
unsigned int i, j, k;
|
||||||
|
@ -654,32 +655,34 @@ Point Server::viterbiLike(float ** dists, unsigned short vk, unsigned short vn,
|
||||||
vector<float> last_dists;
|
vector<float> last_dists;
|
||||||
Point position;
|
Point position;
|
||||||
|
|
||||||
/* Compute the ending viterbi: line 0 */
|
// Compute the ending viterbi: line 0
|
||||||
for(i=0;i<current.size();i++)
|
for (i = 0 ; i < current.size() ; i++)
|
||||||
{
|
{
|
||||||
min = dists[0][0] + last[0].distance(current[i]);
|
min = dists[0][0] + last[0].distance(current[i]);
|
||||||
for(j=1;j<last.size();j++)
|
for (j = 1 ; j < last.size() ; j++)
|
||||||
if((dists[0][j] + last[j].distance(current[i])) < min)
|
if ((dists[0][j] + last[j].distance(current[i])) < min)
|
||||||
min = dists[0][j] + last[j].distance(current[i]);
|
min = dists[0][j] + last[j].distance(current[i]);
|
||||||
last_dists.push_back(min);
|
last_dists.push_back(min);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find shortest dist */
|
// Find shortest dist
|
||||||
min = last_dists[0];
|
min = last_dists[0];
|
||||||
j = 0;
|
j = 0;
|
||||||
for(i=1;i<last_dists.size();i++)
|
for (i = 1 ; i < last_dists.size() ; i++)
|
||||||
if(last_dists[i] < min)
|
if (last_dists[i] < min)
|
||||||
{
|
{
|
||||||
min = last_dists[i];
|
min = last_dists[i];
|
||||||
j = i;
|
j = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Shortest distance determines the true point */
|
// Shortest distance determines the true point
|
||||||
position = current[j];
|
position = current[j];
|
||||||
|
|
||||||
/* Now, compute the remaining of the distance matrix */
|
// Now, compute the remaining of the distance matrix
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* For experimentation purpose only */
|
/* For experimentation purpose only */
|
||||||
void Server::radar_exp()
|
void Server::radar_exp()
|
||||||
|
@ -690,17 +693,23 @@ void Server::radar_exp()
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
vector<Measurement> vm;
|
vector<Measurement> vm;
|
||||||
|
|
||||||
makeReferencePointListFromFile("complete-scan.csv");
|
makeReferencePointListFromFile(DEFAULT_REF_POINT_FILE);
|
||||||
makeApListFromFile("accesspoints.cfg");
|
makeApListFromFile(DEFAULT_AP_FILE);
|
||||||
computeFriisFromRefList();
|
computeFriisFromRefList();
|
||||||
|
|
||||||
/* Open a log file */
|
/* Open a log file */
|
||||||
logfile.open("radar_exp.csv");
|
logfile.open(DEFAULT_LOGFILE);
|
||||||
|
if (logfile.fail())
|
||||||
|
{
|
||||||
|
cerr << "Error opening output file « " << logfile << " » !" << endl ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
/* Column names */
|
/* Column names */
|
||||||
logfile << "Coordinates\t2-kss\t(Error)\t3-kss\t(Error)\t4-kss\t(Error)\t5-kss\t(Error)\tnss\t(Error)\tInterlink\t(Error)\tFBCM\t(Error)" << endl;
|
logfile << "Coordinates\t2-kss\t(Error)\t3-kss\t(Error)\t4-kss\t(Error)\t5-kss\t(Error)\tnss\t(Error)\tInterlink\t(Error)\tFBCM\t(Error)" << endl;
|
||||||
|
|
||||||
for(i=0;i<reference_point_list.size();i++)
|
cout << reference_point_list.size() << " reference points." << endl ;
|
||||||
|
for (i = 0 ; i < reference_point_list.size() ; i++)
|
||||||
{
|
{
|
||||||
/* Get point measurements */
|
/* Get point measurements */
|
||||||
vm.clear();
|
vm.clear();
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
#define DEFAULT_LOGFILE "log/radar_exp.csv"
|
||||||
|
#define DEFAULT_REF_POINT_FILE "csv/complete-scan.csv"
|
||||||
|
#define DEFAULT_AP_FILE "cfg/accesspoints.cfg"
|
||||||
#define DEFAULT_IP "127.0.0.1"
|
#define DEFAULT_IP "127.0.0.1"
|
||||||
#define DEFAULT_LISTEN_PORT 7777
|
#define DEFAULT_LISTEN_PORT 7777
|
||||||
#define LIGHT_SPEED 300000000
|
#define LIGHT_SPEED 300000000
|
||||||
|
@ -45,8 +48,8 @@ protected:
|
||||||
int sockSend;
|
int sockSend;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Server();
|
//Server(string ip_addr = DEFAULT_IP, int listen_port = DEFAULT_LISTEN_PORT, int send_port);
|
||||||
Server(string ip_addr, int listen_port, int send_port);
|
Server(string ip_addr = DEFAULT_IP, int listen_port = DEFAULT_LISTEN_PORT);
|
||||||
~Server();
|
~Server();
|
||||||
void send_to_client(int cl);
|
void send_to_client(int cl);
|
||||||
int receive_data();
|
int receive_data();
|
||||||
|
@ -69,6 +72,8 @@ public:
|
||||||
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();
|
||||||
|
/* For compilation purpose :-) */
|
||||||
|
// Point viterbiLike(float**, short unsigned int, short unsigned int, std::vector<Point, std::allocator<Point> >, std::vector<Point, std::allocator<Point> >) ;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue