首页 > 程序开发 > 综合编程 > 其他综合 >

可在单片机上运行的机器学习算法KNN(C语言实现)

2017-09-05

可在单片机上运行的机器学习算法KNN(C语言实现)。2017年全国大学生电子设计大赛I题可见光定位问题,本方法提供一种基于位置指纹的无线定位思路,需要离线构建无线指纹库(信号强度构成的向量与对应位置标签),再用机器学习算法。

可在单片机上运行的机器学习算法KNN(C语言实现)。2017年全国大学生电子设计大赛I题可见光定位问题,本方法提供一种基于位置指纹的无线定位思路,需要离线构建无线指纹库(信号强度构成的向量与对应位置标签),再用机器学习算法,例如KNN进行定位,由于比赛只允许在单片机上运行,因此针对比赛用C改写了一个可直接在单片机裸机上运行的KNN算法。

2.为什么要用C

因为诸于python等高级语言编写的机器学习代码需要有操作系统支持,而一般意义上的单片机无法运行Linux,Windows等可以支持高级语言的操作系统,因此需要使用单片机裸机或者ucOS可以支持的C 语言进行改写。

#include 
#include 
#include 
#define A_L  81

//Map这个二位数组用来保存测量好的[RSS1,RSS2,RSS3,X,Y]
unsigned char Map[A_L][5] = {};
int Dis[A_L][3];//Dis的元素分别为RSS的距离,X,Y的坐标
int k = 3;//初始K=3为找最近的3个样本
unsigned char Input[3]={0};//这里是初始化,要放的是AD做完转换后的RSS数据
//全局变量用于保存x,y的数据,以便使用
unsigned char result_x = 0;
unsigned char result_y = 0;

unsigned char knn_predict(unsigned char *Input)
{
    unsigned char i,j,n,p;//for循环控制变量
    unsigned char temp_dis,temp_x,temp_y;//数据暂存变量,冒泡排序用
    unsigned char result_sum_x = 0;
    unsigned char result_sum_y = 0;
    for(i=0;iDis[n+1][0])
            {
                temp_dis = Dis[n][0];
                Dis[n][0] = Dis[n+1][0];
                Dis[n+1][0] = temp_dis;
                //------------------
                temp_x = Dis[n][1];
                Dis[n][1] = Dis[n+1][1];
                Dis[n+1][1] = temp_x;
                //------------------
                temp_y = Dis[n][2];
                Dis[n][1] = Dis[n+1][2];
                Dis[n+1][2] = temp_y;
            }
        }
    }
    for(p=0;p
        
   
相关文章
最新文章
热点推荐