• 大小: 11KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-19
  • 语言: Matlab
  • 标签: matlab  定位  

资源简介

包含质心定位 四边测距定位 加权四边测距定位算法,matlab编写,并比较这几种方法的定位误差

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

#define RSSI0 -58.13
#define Y     2.07
#define X     0.0
#define NMIN  4
#define NMAX  6

// 定义iBeacon节点
typedef struct
{
    int    num;     // 节点编号
    double x y;    // iBeacon节点坐标
    double rssi;    // 用户接收的信号强度值
    double d;       // 到用户距离
} Beacon;

// 定义用户节点
typedef struct
{
    double d;       // 平均距离
    double x y;    // 用户坐标
} User;


// 计算二元一次方程解
bool calcM2x3(const double m[][3] double *x double *y)
{
    double d  = m[0][0]*m[1][1] - m[0][1]*m[1][0];
    if(fabs(d) < 0.001)
        return false;
    double dx = m[0][2]*m[1][1] - m[0][1]*m[1][2];
    double dy = m[0][0]*m[1][2] - m[0][2]*m[1][0];
    *x = dx / d;
    *y = dy / d;
    return (*x < 0.0 || *y < 0.0) ? false : true;
}

// 计算用户节点位置
bool calcPosition(Beacon *node User *u int i1 int i2 int i3)
{
    double m[3][3] = {
        {
            2* (node[i2].x - node[i1].x)
            2* (node[i2].y - node[i1].y)
            pow(node[i1].d 2.0) - pow(node[i2].d 2.0) -
            pow(node[i1].x 2.0) + pow(node[i2].x 2.0) -
            pow(node[i1].y 2.0) + pow(node[i2].y 2.0)
        }
        {
            2* (node[i3].x - node[i2].x)
            2* (node[i3].y - node[i2].y)
            pow(node[i2].d 2.0) - pow(node[i3].d 2.0) -
            pow(node[i2].x 2.0) + pow(node[i3].x 2.0) -
            pow(node[i2].y 2.0) + pow(node[i3].y 2.0)
        }
        {
            2* (node[i3].x - node[i1].x)
            2* (node[i3].y - node[i1].y)
            pow(node[i1].d 2.0) - pow(node[i3].d 2.0) -
            pow(node[i1].x 2.0) + pow(node[i3].x 2.0) -
            pow(node[i1].y 2.0) + pow(node[i3].y 2.0)
        }
    };
    double m1[2][3] = {
        m[0][0] m[0][1] m[0][2]
        m[1][0] m[1][1] m[1][2]
    };
    double m2[2][3] = {
        m[0][0] m[0][1] m[0][2]
        m[2][0] m[2][1] m[2][2]
    };
    double m3[2][3] = {
        m[1][0] m[1][1] m[1][2]
        m[2][0] m[2][1] m[2][2]
    };
    double w[NMIN] = {
        1.0/node[i1].d
        1.0/node[i2].d
        1.0/node[i3].d
        1.0/node[i1].d + 1.0/node[i2].d + 1.0/node[i3].d
    };
    u->d = (node[i1].d*w[0] + node[i2].d*w[1] + node[i3].d*w[2]) / w[NMIN];
    if     (calcM2x3(m1 &u->x &u->y) == true)
        return true;
    else if(calcM2x3(m2 &u->x &u->y) == true)
        return true;
    else if(calcM2x3(m3 &u->x &u->y) == true)
        return true;
    return false;
}

// 快速排序规则
int inc(const void *a const void *b)
{
    double diff = (*(Beacon *)a).d - (*(Beacon *)b).d;
    if     (diff < 0 && fabs(diff) > 0.001)
        return -1;
    else if(diff > 0 && fabs(diff) > 0.001)
        return 1;
    else
        return 0;
}

int main(void)
{
    Beacon node[NMAX] = {
        { 1 0.0 0.0 -64 2.28 }
        { 2 2.1 0.0 -62 0.90 }
        { 3 4.2 0.0 -71 2.28 }
        { 4 0.0 1.8 -65 2.28 }
        { 5 2.1 1.8 -71 0.90 }
        { 6 4.2 1.8 -6

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\
     文件         147  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\.editorconfig
     文件        5118  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\main.c
     目录           0  2020-03-18 22:46  rssiPosition-master\rssiPosition-master\MATLAB\
     文件        1721  2020-03-18 22:46  rssiPosition-master\rssiPosition-master\MATLAB\Barycenter.m
     文件         766  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Quadrilateral.m
     文件        3693  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Simulation.asv
     文件        3063  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Simulation.m
     文件        2524  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Simulation2.asv
     文件        2758  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Simulation2.m
     文件         475  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\TestValue.m
     文件         765  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Trilateral.m
     文件         207  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\Untitled.m
     文件        1016  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\MATLAB\WeightedQuadrilateral.m
     文件          84  2020-03-18 22:51  rssiPosition-master\rssiPosition-master\MATLAB\新建文本文档.txt
     文件         345  2019-04-12 17:08  rssiPosition-master\rssiPosition-master\README.md

评论

共有 条评论