资源简介

一种基于RSSI的改进三边测量法用于提高待定位节点定位精度。改进的三边测量法利用多边形权重函数综合多次估算的待定位节点坐标信息然后通过对权重值的正规化进而确定待定位节点位置坐标。仿真分析表明与原三边测量法相比改进后的算法可明显提高定位精度。同时该算法不需要增加硬件设施来实现特殊的功能保证了原三边测量法的低成本优势。权重多边形、奇异组合与角度权重函数在实际定位过程中经研究分析发现不管任何一种测距方式都会存在测量误差所以在采用三边测量法进行定位时会出现圆心坐标及半径已知的三个圆不能够相较于一点。

资源截图

代码片段和文件信息

function result = knn(trainX testY zuobiaoZ k)


% Classify using the Nearest neighbor algorithm
% Inputs:
%  trainX        - Train sample matrix n*d n points each d dimentions
%   testY          - Test sample matrix  N*d  测试样本矩阵
% k        - Number of nearest neighbors 
% Outputs:
% result        - 定位点坐标

%  判断trainX和testY的样本点维数是否相同   
trainX =[34 35 38 40 45 60 62 67;36 34 40 36 42 67 40 65;62 40 48 36 47 67 34 62;38 36 40 45 52 65 70 65; 67 42 50 35 36 70 37 64]
testY = [38 36 39 41 46 61 64 67;70 38 40 55 50 60 55 40;76 33 56 78 40 52 62 35;76 35 23 61 76 35 57 62;87 62 34 47 36 82 21 63];
zuobiaoZ = [0.0 3.0;1.5 3.0; 3.0 3.0;0.0 1.5;3.01.5];
k =3;
zhunqueZ = [0.3 3.0;1.8 1.8;2.0 1.7;0.8 2.9;3.0 2.2]                              %  待定位点的准确坐标
if size(trainX2) ~= size(testY2)                                      
    error (‘trainX and testZ must have same column dimensions !‘)         %  维数d应该相同 在同一个点搜集到的WiFi热点个数相同
end   

%  判断k近邻是否可取
n = size(trainX1);                                                       %  测试样本点个数   参考点的个数必须大于k的个数
if ( n < k)                                
   error(‘You specified more neighbors than existed points.‘)
end                                                                       %  选择的近邻数不大于样本点数

                               
N                   = size(testY 1);                                     %  testZ的行数,即测试集的样本点数
                                                                          %   初始化result矩阵N*1列向量标出testZ的类别


%  按照所选的度量距离,对testY的N个点逐个进行k近邻分类 

                                                        
    for i = 1:N 
        dist            = sum((trainX - ones(n1)*testY(i:)).^22);      %  dist 表示第i个测试点分别与n个训练样本点之间的欧式距离的平方 按行进行求和 dist是个矩阵
        [m indices]    = sort(dist);                                     %  按列进行升序排列   
        histclass       = zuobiaoZ([indices(1:k)]: );                    %  取前k个最短距离对应的点所属的类别,求出k个临近点的坐标
        gd              = sum(histclass);                                 %  k个临近点的坐标相加 
        result(i:)     =gd/k;                                            %  求得定位点的坐标
        x(i)            =result(i1);
        y(i)            =result(i2);
        x1(i)           =zhunqueZ(i1);
        y1(i)           =zhunqueZ(i2);
        
    end
   plot(xy‘square‘‘MarkerSize‘7);
   hold on;
   plot(x1y1‘*‘‘MarkerSize‘7);
       axis([0 3 0 3]);
set(gca‘xtick‘[0:0.2:3]‘ytick‘[0:0.2:3])
    
    

end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2735  2014-04-17 13:54  knn1.m

----------- ---------  ---------- -----  ----

                 2735                    1


评论

共有 条评论