资源简介
精简的knn定位算法,包含数据集,可直接运行
代码片段和文件信息
load(‘data‘);
%% 数据说明
%fingerprint_sim: 指纹数据库20m*15m 6AP
%RSS_fp: 100组测试数据的RSS
%p_true: 100组测试数据的真实位置
%% KNN算法
n = 6;%使用AP的数目,这里使用全部6个(<=n_AP)
k = 4;%KNN算法中的K,随便调一调大小,关系不大
p_KNN = 0;%存定位结果
for i=1:size(p_true); %按顺序分别给每一个数据定位
[size_x size_y n_AP] = size(fingerprint_sim);
%计算欧氏距离
distance = 0;
for j=1:n
distance = distance + (fingerprint_sim(::j)-RSS_fp(ij)).^2;%这里同时计算所有参考点,结果是一个二维矩阵
end
distance = sqrt(distance);
%将欧氏距离排序,选择k个最小的,得到位置
d = reshape(distance1size_x*size_y);
[whatever index_d]=sort(d);
knn_x = (mod(index_d(1:k)size_x));
knn_y = (floor(index_d(1:k)./size_x)+1);
p_KNN(i1:2) = [mean(knn_x) mean(knn_y)];%k个位置求平均
end
%画一下图:蓝色的线b-o是真实路径,红星是定位算出的位置
plot(p_true(:1)p_true(:2)‘b-o‘);
axis([0 20 0 15])
grid on;hold on;
plot(p_KNN(:1)p_KNN(:2)‘r*‘);
for i=1:size(p_KNN)
hold on;plot([p_KNN(i1)p_true(i1)][p_KNN(i2)p_true(i2)]‘g--‘);
end
error_KNN=sqrt((p_true(:1)-p_KNN(:1)).^2+(p_true(:2)-p_KNN(:2)).^2);
disp(‘KNN平均误差:‘)
disp(mean(error_KNN));
%%
%KNN算法是最简单实用的方法
%参数k可以自己稍微调一调
%另外所谓的WKNN(求k个位置平均的时候使用加权平均),改善效果忽略不计
%除了欧氏距离,我们也可以用其他的距离(曼哈顿距离啊什么的)
%这种算法本身没有一个严格的证明来反映定位精度,所有各种参数随便调,各种细节也能随便改,相要深入研究指纹法的话去看概率方法吧。
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1574 2015-05-30 10:29 positioning_simulation.m
文件 10948 2015-05-30 10:06 data.mat
相关资源
- 简单二阶互联系统的非线性动力学分
- 手写数字识别-模板匹配法
- Stock_Watson_动态因子分析模型
- 果蝇优化算法优化支持向量回归程序
- 自己做的一个简单GUI扑克纸牌识别-
- multi output SVR
- AR过程的线性建模过程与各种功率谱估
- PCNN TOOLBOX
- plstoolbox.zip
- 中国国家基础地理信息系统GIS数据
- 粒子群微电网优化调度
- 矩阵分析-经典教材-中文版-Roger.A.Ho
- 压缩感知TwIST
- 基于最小错误率的贝叶斯手写数字分
- 最全系统辨识源代码,包括多种最小
- 导弹制导实验
- 画跟踪精确度图的程序.zip
- 重力场大地水准面及重力异常阶次误
- prtools5.2.3工具包
- 脉冲耦合神经网络工具箱PCNN-toolbox
- 用各种机器学习方法knn,随机森林,
- SVM算法-回归拟合程序.zip
- Kriging代理模型EGO算法.zip
- Matalb实现停车场完整系统
- 总体经验模态分解
- 在一张图上画多个跟踪框.zip
- 大量的有限元法求解偏微分方程的程
- 电力系统稳态潮流计算程序PQ和NR法
- 夜间车牌识别
- emd分解成多个imf分量,通过判断以后
评论
共有 条评论