基于Matlab的WiFi室内定位分析系统设计与实现
2018-03-26费扬杜庆治
费扬 杜庆治
摘要:
为了更好地研究WiFi室内定位及其误差,设计了基于Matlab的WiFi室内定位分析系统。首先,研究WiFi室内定位分析系统的相关原理及技术;其次,设计系统总体框架,细化功能;最后,采用Matlab语言设计系统,利用Excel提供数据库,设计出基于Matlab的WiFi室内定位分析系统应用程序。测试结果表明,该系统不仅可以实现室内定位,还可以进行定位误差分析。
关键词:
Matlab;WiFi室内定位;三边测量法;三角质心算法;均方误差
DOIDOI:10.11907/rjdk.172460
中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2018)003011704
英文摘要Abstract:In order to better study the WiFi indoor positioning and its positioning error, design and implementation of WiFi indoor location analysis system based on Matlab. Firstly, the research of the relevant principle and technology of WiFi indoor positioning analysis system; Secondly, the design of the overall framework of the system, detailed function; Finally, using Matlab language to design the system, use Excel to provide database, design of WiFi indoor location analysis system based on Matlab. The test results show that the system can not only realize indoor positioning, but also analyze the positioning error.
英文关键词Key Words:Matlab; WiFi indoor positioning; three side measurement; triangle centroid algorithm; mean squared error
0引言
随着针对LBS(Location Based Service,基于位置的服务)的需求逐渐增多,室内定位开始成为学者们的研究热点,而其它诸多室内定位技术由于受到基础平台和终端硬件等客观因素制约,应用于实际生活十分困难。随着室内环境里WiFi热点越来越多,给WiFi室内定位提供了硬件条件,并极大地减少了成本,因此WiFi室内定位技术成为应用主流。要想实现室内定位及定位误差分析,需设计出基于Matlab的WiFi室内定位分析系统。利用Matlab设计系统操作简单、便捷,比其它编程语言更加容易实现数据分析。
1WiFi室内定位原理及相关技术
1.1WiFi室内定位
WiFi是Wireless Fidelity(无线保真)的简称,是基于IEEE802.11标准的无线局域网络(WLAN)。WiFi室内定位主要是通过无线接入点(包括无线路由器)组成的无线局域网络(WLAN),实现复杂环境中的定位、监测和追踪任务。它以网络节点(无线接入点)的位置信息为基础和前提,采用经验测试和信号传播模型相结合的方式,对已接入的移动设备进行位置定位[12]。
1.2信号传播模型
在室内复杂的环境中,由于障碍物产生的反射、散射、绕射、衍射等因素干扰,发生多径传播的现象,导致接收到的信号强度是不同信号的叠加。室内环境下的传播路径与路径损耗之间的关系服从对数—常态分布模型(Log-normal Model),可利用该模型将损耗转换成距离,一般形式如式(1)所示[24]:
P(d)dBm=P(d0)dBm+10nlogdd0+XdBm(1)
其中,d是信号发射端与接收端的距离,是真实距离,P(d)dBm为经过距离d后的路径损耗;d0是参考距离,一般为1m,P(d0)dBm是在参考距离为d0时的接收信号强度;n是路径损耗因子,该值与建筑物及环境类型有关;XdBm是遮蔽因子,单位是dB,其均值是0。式(1)可简化为[24]:
RSSI=A-10nlog(d)(2)
式中,A為1m时所测得的RSSI值,单位为dBm;n为衰减因子;d为待定位节点与参考节点之间的距离,单位为m。
1.3定位算法
WiFi室内定位算法主要包括三边测量法和三角质心法。三边测量法定位原理图如图1所示,假设未知节点位置坐标为D(x,y),其中x、y值未知。已知节点的位置坐标分别为A(x1,y1)、B(x2,y2)、C(x3,y3),其中x1、y1、x2、y2、x3、y3值已知。未知节点到已知节点的距离分别为d1、d2、d3。
根据图1,利用平面几何知识可以列出3个两点间距离的方程,方程组如式(3)所示:
(x-x1)\+2+(y-y1)\+2=d\+21(x-x2)\+2+(y-y2)\+2=d\+22(x-x3)\+2+(y-y3)\+2=d\+23(3)
用式(3)里的前两个方程分别减去最后一个方程,整理后计算求解线性方程组,计算出线性方程组的解如式(4)所示:
xy=2(x1-x3)2(y1-y3)2(x2-x3)2(y2-y3)\+\{-1\}=
x\+21-x\+23+y\+21-y\+23+d\+23-d\+21x\+22-x\+23+y\+22-y\+23+d\+23-d\+22(4)
三角质心法定位原理图如图2所示(由于三圆相交有两种情况,所以出现两幅图), 待测点位置为3个热点所形成圆的公共区域的中心点。该公共区域可以是3个圆包含所得,也可以是3个圆非包含所得,最理想情况是3个圆相交有且只有一个交点。假设未知节点位置坐标为D(x,y),其中x、y值未知。已知节点的位置坐标分别为A(x1,y1)、B(x2,y2)、C(x3,y3),其中x1、y1、x2、y2、x3、y3值已知,圆的半径分别为d1、d2、d3,其中d1、d2、d3已知。A圆和B圆的交点为G点(x6,y6),A圆和C圆的交点为F点(x5,y5),B圆和C圆的交点为E点(x4,y4)。D点位于EFG组成区域的中心,则D点坐标的计算公式如式(5)所示:
x=x4+x5+x63y=y4+y5+y63(5)
E、F、G点为A、B、C三个圆两两相交的交点,两两联立方程组即可求解坐标点。以G点为例,方程组如式(6)所示:
(x6-x1)\+2+(y6-y1)\+2=d\+21(x6-x2)\+2+(y6-y2)\+2=d\+22(6)
2系统设计
2.1总体功能设计
本系统主要利用Matlab语言编程实现,最后生成EXE(Executable Program,EXE File),使可执行程序更方便使用。开发系统时充分考虑到系统的开发背景和系统目标等信息,使系统设计更加合理。系统总体设计框架如图3所示,流程如图4所示[59]。
2.2详细功能设计
2.2.1系统主要功能
本系统主要包括两部分:一是室内定位,一是定位误差分析。室内定位主要是通过信号传播模型公式(2)计算距离d,利用定位算法实现定位。系统设计充分考虑到环境因素,可以实现3种条件下的距离测算,此外还可实现两种定位方法的定位。误差分析主要包括两部分:一种是均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Square Error,RMSE)等数学计算分析,另一种是图形直观分析[59]。
2.2.2系统模块设计
两个模块功能不同、原理不同,所以设计不同。按照其模块的功能需求进行设计,室内定位模块界面和误差分析如图5、图6所示[59]。
2.3数据库设计
数据库设计对于系统实际应用而言十分重要,本系统设计了一个Excel格式的数据库,与其说是数据库不如说是表。本系统主要存放定位数据,以便于作误差分析,所需的存放数据单元其实并不大,只需一张表即可实现。 Matlab提供的系统函数xlsread函数可以读写Excel数据文件[1011]。
3系统功能实现
由系统设计可知,系统主要功能模块涉及两部分:系统定位及误差分析。
3.1室内定位模块实现
室内定位模块利用静态文本显示文字,这些文字主要用来提示使用者下面进行什么操作,并利用可编辑文本、按钮实现定位计算。定位过程主要是将输入的AP节点RSSI值通过公式(2)计算距离d,再利用定位算法将距离d变成坐标实现精准定位。计算距离d时,充分考虑了3种情况,可以实现3种计算方式,都是使用公式(2)实现。以多云天计算为例,点中“多云天计算”按钮,鼠标右键选择“查看回调”-“Callback”,输入以下代码即可实现其功能[1011]:
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of Matlab
% handles structure with handles and user data (see GUIDATA)
RSSI1=str2num(get(handles.edit1,'string'));
set(handles.edit4,'String',(10.^((-RSSI1-24)/8))) RSSI2=str2num(get(handles.edit2,'string'));
set(handles.edit5,'String',(10.^((-RSSI2-24)/8)))
RSSI3=str2num(get(handles.edit3,'string'));
set(handles.edit6,'String',(10.^((-RSSI3-24)/8)))
將距离d转换成坐标点(x,y)时,提供了三边测量及三角质心两种方法。以三边测量为例,实现其功能的代码如下:
function pushbutton2_Callback(hObject, eventdata, handles)
x1=str2num(get(handles.edit7,'string'));
y1=str2num(get(handles.edit8,'string'));
x2=str2num(get(handles.edit9,'string'));
y2=str2num(get(handles.edit10,'string'));
x3=str2num(get(handles.edit11,'string'));
y3=str2num(get(handles.edit12,'string'));
d1=str2num(get(handles.edit4,'string'));
d2=str2num(get(handles.edit5,'string'));
d3=str2num(get(handles.edit6,'string'));
set(handles.edit13,'String',(((d1^2-d2^2)*(y3-y1)-(d1^2-d3^2)*(y2-y1)+(y2-y1)*(x1^2-x3^2)-(y3-y1)*(x1^2-x2^2)+(y1^2-y3^2)*(y2-y1)-(y1^2-y2^2)*(y3-y1))/(2*((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)))))
set(handles.edit14,'String',(((d1^2-d2^2)*(x3-x1)-(d1^2-d3^2)*(x2-x1)+(x2-x1)*(x1^2-x3^2)-(x3-x1)*(x1^2-x2^2)+(y1^2-y3^2)*(x2-x1)-(y1^2-y2^2)*(x3-x1))/(2*((y2-y1)*(x3-x1)-(y3-y1)*(x2-x1)))))
3.2误差分析模块实现
误差分析模块利用列表框、按钮实现数据的显示和读取,可编辑文本显示读取数据的路径和误差计算结果,通过表、按钮实现图形分析[10]。数据读取功能的代码如下:
[FileName PathName]=uigetfile({'*.txt'},'选择数据文件');
str=[PathName FileName];
set(handles.edit1,'string',str);
data = load(str);
set(handles.listbox1,'string',data(:,1));
set(handles.listbox2,'string',data(:,2));
set(handles.listbox3,'string',data(:,3));
set(handles.listbox4,'string',data(:,4));
误差计算主要是计算均方误差和均方根误差,实现其功能的代码如下:
x=str2num(get(handles.listbox1,'string'));
y=str2num(get(handles.listbox2,'string'));
x1=str2num(get(handles.listbox3,'string'));
y1=str2num(get(handles.listbox4,'string')); sum1 = 0;
sum2 = 0;
for i = 1:length(x);
sum1 = sum1+(x(i)-x1(i))^2 ;
end
for j = 1:length(y);
sum2 = sum2+(y(i)-y1(i))^2 ;
end
averageError = (sum1+sum2)/length(x);
set(handles.edit2,'String',averageError)
averageError1 = sqrt((sum1+sum2)/length(x));
set(handles.edit3,'String',averageError1)
為了直观地看到定位效果,在图像中将定位结果显示出来,其功能实现代码如下:
x=str2num(get(handles.listbox1,'string'));
y=str2num(get(handles.listbox2,'string'));
x1=str2num(get(handles.listbox3,'string'));
y1=str2num(get(handles.listbox4,'string'));
plot(x,y,'*',x1,y1,'r*');
axis([0,7,0,5.5]);
set(gca,'XTickMode','manual','XTick',[0 1 2 3 4 5 6 7]);
set(gca,'YTickMode','manual','YTick',[0 1 2 3 4 5 5.5]);
legend('实测坐标点','计算坐标点');
xlabel('x轴/m');
ylabel('y轴/m');
title('误差分析');
4结语
本文介绍了WiFi室内定位相关原理及技术,设计并实现了基于Matlab的WiFi室内定位分析系统。通过电脑测试表明,系统功能模块运行正常,基本满足功能需求。该系统在WiFi室内定位研究领域具有重要价值,给研究者带来了很大方便,尤其在误差分析方面具有突出优势。
参考文献参考文献:
[1]张建平.基于WiFi的室内定位系统设计和算法研究[J].自动化技术与应用,2016,35(12):5356.
[2]尚少锋,张雪英,王峰.一种基于RSSI校正的加权质心定位算法[J].科学技术与工程,2013,13(10):28322835.
[3]王春东,王秀峰.基于802.1l的室内定位算法研究[J].计算机工程,2007,33(7):9495.
[4]张明华,张申生,曹健.无线局域网中基于信号强度的室内定位[J].计算机科学,2007,34(6):6871.
[5]杨鹏,熊曾刚,张玉国.基于WiFi的室内定位系统设计与实现[J].长江大学学报:自科版,2016,13(7):6771.
[6]白玉东.基于WiFi的室内定位系统设计与实现[J].中国科技博览,2014(24):15.
[7]孔勇平,钟致民,杨广龙,等.基于RSSI的室内定位系统设计与实现[J].移动通信,2014(5):3438.
[8]李纲,姜静,唐迪.基于RFID的室内物品定位系统设计与实现[J].软件导刊,2014(10):9596.
[9]李炜,金亮,陈曦.基于Android平台的室内定位系统设计与实现[J].华中科技大学学报:自然科学版,2013,41(s1):422424.
[10]李月锋.Matlab中的数据文件的处理[J].福建电脑,2005(2):4142.
[11]蒋争明,唐盛平.基于Matlab的无线定位系统的设计与实现[J].科技创新导报,2016,13(28):9091.
责任编辑(责任编辑:黄健)