RFID定位-----模型值与传感器数据的拟合

上一篇是介绍了利用模型构建信号理想值,接下来就是对于模型值和传感器数据的拟合。
利用RFID定位中的数据匹配有两种算法可以采用,分别是KNN和ICP算法,接下来分开介绍这两种算法。
对于KNN 的简要介绍主要是参考这篇博客:
https://www.cnblogs.com/erbaodabao0611/p/7588840.html
KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类对应的关系。输入没有标签的数据后,将新数据中的每个特征与样本集中数据对应的特征进行比较,提取出样本集中特征最相似数据(最近邻)的分类标签。一般来说,只选择样本数据集中前k个最相似的数据,这就是K紧邻算法中k的出处,通常k是不大于20的整数。最后选择k个最相似数据中出现次数最多的分类作为新数据的分类。

KNN算法优缺点
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
KNN算法matlab代码实现
实现步骤:
(1)计算距离
(2)选择距离最小的k个点
(3)排序

function  trace1=subjectRSS_KNN_position(labels,RSS,rss,k)
labels=round(labels(:, 1)/100)*100 + round(labels(:, 2)/100);
[N,M]=size(RSS);
[a,b]=size(rss);
for s=1:a
labels1=labels;
dist=zeros(N,1);
%  计算欧式距离
for i=1:N
    dist(i,:)=norm(RSS(i,:)-rss(s,:));
end
%按距离大小进行排序
[Y,I]=sort(dist,1);
labels1=labels1(I);
Num=max(labels1);
labels2=zeros(1,Num);
% 选择样本数据集中前k个最相似的数据
for i=1:k
    j=labels1(i);
    if j~=0
    labels2(j)=labels2(j)+1;
    end
 end
 % 选择k个最相似数据中出现次数最多的分类作为新数据的分类
[~,idx]=max(labels2);
   label_predict(s)=idx;
end
label_predict=label_predict';
predictions = [floor(label_predict/100), label_predict - floor(label_predict/100) * 100];
trace1=predictions;
end

KNN虽然是简单有效的分类数据算法,在使用时必须有训练样本数据,还要计算距离,如果数据量非常大会非常消耗空间和时间。它的另一个缺陷是无法给出任何数据的基础结构信息,所以我们无法平均实例样本和典型实例样本具体特征。

接下来就是另外一种不同算法(迭代最近点算法)
主要参考“Robust registration of point sets using iteratively reweighted least squares”
通过找到一组旋转和平移来完成点集的匹配,该旋转和平移在一组数据点和一组模型点之间产生最佳拟合。在每次迭代中,确定固定残差的比例参数。然后在尺度参数保持不变的情况下找到刚体变换的更新。

猜你喜欢

转载自blog.csdn.net/qq_24251645/article/details/89221200