wifi定位实验报告.docx

上传人:小飞机 文档编号:4926129 上传时间:2023-05-23 格式:DOCX 页数:13 大小:129.23KB
返回 下载 相关 举报
wifi定位实验报告.docx_第1页
第1页 / 共13页
wifi定位实验报告.docx_第2页
第2页 / 共13页
wifi定位实验报告.docx_第3页
第3页 / 共13页
wifi定位实验报告.docx_第4页
第4页 / 共13页
wifi定位实验报告.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《wifi定位实验报告.docx》由会员分享,可在线阅读,更多相关《wifi定位实验报告.docx(13页珍藏版)》请在三一办公上搜索。

1、定位实验题目:基于WIFI位置指纹的室内定位实验成员:2012年12月一、实验题目实验题目基于Wifi位置指纹的室内定位实验实验要求学习android平台使用、android编程、android环境下wifi设备查看操作。实验内容利用最少数目的wifi热点设备,能够实时地对手机进行定位。二、实验目的目前全球定位系统(GPS,Global Positioning System)是获取室外环境位置信息通过实施 项目的最常用方式。但由于卫星信号容易受到各种障碍物遮挡,GPS/APGS等卫星定位技 术并不适用于室内或高楼林立的场合,目前无线室内定位技术迅速发展,已成为GPS的有 力补充。了解智能手机如

2、何利用Wifi热点设备信号强度进行室内定位。三、实验原理l. Android系统架构简介Android系统架构见图,它建立于Linux内核之上,包含了各种设备驱动 和管理模块,囊括了非常齐全的类库和框架,包括轻量级数据库SQLite、浏览 器Webkit等。整个系统建立在Dalvik虚拟机上,应用程序使用Java语言编 写。Android系统提供了丰富的框架(活动管理、位置管理等)来管理系统的软、硬件资源,整合了常用的应用程序(联 系人、电话本等),并开放了很全面的API供用户使用,整个平台具有良好的开 放性和扩展性。Android杂貌条拘2. 采用基于射频指纹的定位方法移动终端需要获得周围A

3、P的RSSI指纹特征,Android系统提供的接口可以 很方便地实现这一功能。3. 定位算法由于室内环境复杂,WiFi无线信号具有较强的时变无线信号传播衰减模型 难以很好的表征距离与信号强度间的映射关系,采用基于射频指纹匹配定位方 法,它具有较好的定位鲁棒性。指纹匹配方式定位算法建立在实验数据基础上, 它主要包括离线训练和在线定位两个阶段,其中离线训练阶段的任务是建立射频 信号强度向量和客户端位置间的一一对应关系,形成一个指纹库(radio map), 定位阶段则使用实时采集的信号强度向量去匹配训练阶段构建的指纹库,从而获 得目标的位置估计。4. 本次实验所采用的基本原理和基本思想如下:当手机

4、程序初次运行时,会创建一个数据库,数据库中包含两个表,一 个记录用户所采集的地点信息,另一个表记录每个之前所记录的地点信 息所对应的wifi信息,为一对多的关系。手持手机设备采集指纹信息,即地点信息,指纹信息会存入之前创建的数据库中,即把输入的地点名称录入表1中,并对此地点的wifi进行 扫描,将满足一定要求的wifi信息,每个wifi SSID+地点名称 作为一 个记录存进表2中。采集的指纹信息越多,定位就会越准确。定位时,先扫描得到所在地点的wifi信息列表,然后与数据库中每一个 地点所拥有的wifi信息进行匹配,若待定位地点的wifi信息绝大部分 都在数据库中某一地点的wifi信息列表中

5、(允许存在一定的误差),则 可以认为当前地点就是数据库中的那一个地点,于是输出那一个地点的 名称,完成定位。四、实验流程1. 首先在手机上面打开应用程序:如图1图12. 然后添加指纹信息,运行效果图如下图2和图3:图3重复此过程,直到数据库中有一定的数量的指纹信息3. 进入到查询界面,如图4:电E & Q壬笆很:网W44. 查询当前所在的位置,结果如图5所示:图5五、个人工作及总结本次实验我主要负责程序中关于指纹数据库初始化模块和查询用户当前位 置模块。在指纹数据库初始化模块中,主要任务是建立如下结构的表1: wifi和表 2: location:表IDWifi_SSIDLocation_ID

6、表:Location_IDLocation_name其中表一和表二通过Location_ID进行关联,建表的目的是存储location 信息及其对应的wifi列表信息,一个location信息对应多个wifi信息。在查询用户当前位置模块中,主要是进行待定位地点wifi列表信息与数 据库中已经存在地点的wifi列表信息进行匹配。在此过程中用一个数 组wificount保存匹配的wifi个数,wificounti代表待定位地点 wifi列表信息与数据库表二中location_ID为i的地点所拥有的wifi 列表信息匹配的wifi个数。最初实验只有两者个数完全一样时才输出此地点,但是在实际操作运行时

7、总是没有匹配的信息输出。后来经过分析和查相关的资料,发现生活 中很多wifi信号不是很稳定,并且wifi信号受外界环境的影响较大, 手机就算是在同一地点所收到的wifi信号变化也会很大,于是考虑允 许wificounti有一定的误差,但是多少范围内的误差即能尽大可能的 不影响定位的误差,又可以实现定位?后来经过测试,当wificounti 左右变化不超过3的时候可以满足一般性要求,实现定位。通过本次实验,知道了 wifi定位的基本原理,并且在实际中给予实现;熟 悉了安卓开发的一般性步骤,提升了自己的能力。同时发现,此安卓程序存在诸 多问题和可以改进的地方,如采集指纹信息的时候必须人为操作,可以

8、设置一个 定时器,周期性的进行采集。六、附录:实验代码1. 程序运行主入口:程序运行的主入口package com.example.w4;import java.util.List;import .wifi.ScanResult;import .wifi.WifiInfo;import .wifi.WifiManager;import android.os.Bundle;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.dat

9、abase.sqlite.SQLiteDatabase;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity (public static int locationnum=0;public static int

10、 wifinum二new int100;public TextView text1,text2,text3,text4,text5;Override创建public void onCreate(Bundle savedInstanceState) ( super.onCreate(savedlnstanceState);setContentView(R.layout.activity_main);DBHelper source=new DBHelper(this);SQLiteDatabase db =source.getWritableDatabase();Buttonlocationadd

11、button二 (Button)findViewById(R.id.locationaddbutton);Button searchbutton =(Button)findViewById(R.id.searchbutton);locationaddbutton.setOnClickListener(newAddButtonClickListener();searchbutton.setOnClickListener(new SearchButtonClickListener();text1=(TextView)findViewById(R.id.text1);text1.setText(R.

12、string.hello_world);/ “输入当前地点的位置”按钮的动作监听器public class AddButtonClickListener implements OnClickListener(Overridepublic void onClick(View v) (locationnum+;Intent intent =new Intent(MainActivity.this,Add.class);startActivity(intent);/ “查询当前所在的位置”按钮的动作监听器public class SearchButtonClickListener implement

13、s OnClickListener( Overridepublic void onClick(View v) (Intent intent =new Intent(MainActivity.this,Search.class);startActivity(intent);2. 指纹数据库初始化模块:/创建一个空的数据库,初始化数据库package com.example.w4;import android.content.Context;import android.database.DatabaseErrorHandler;import android.database.sqlite.SQL

14、iteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.widget.Toast;public class DBHelper extends SQLiteOpenHelper (private static final int DATABASE_VERSION =1;private static final String DATABASE_NAME =wifilocation.db”

15、;private Context m_context;private static final String WIFI_CREATE_DDL = CREATE TABLE WIFI (_ID INTERGER PRIMARY KEY,WIFI_SSID TEXT,WIFI_LEVEL INTEGER,WIFI_LOCATION INTERGER);private static final String LOCATION_CREATE_DDL =CREATE TABLELOCATION(_ID INTERGER PRIMARY KEY,LOCATION_DESCRIPTION TEXT);/Wi

16、fi 表,地点 id, wifi 的 ssid, level,查询时按照 groupby 地点 id,/location表地点id,地点描述,两表通过id建立联系private static final String WIFI_DELETE_DDL =DROP TABLE IF EXISTS WIFI;private static final String LOCATION_DELETE_DDL =DROP TABLE IF EXISTS LOCATION;public DBHelper(Context context) (/对象的构造函数super(context,DATABASE_NAME

17、, null, DATABASE_VERSION);m_context二context;/ TODO Auto-generated constructor stubOverride执行SQL语句以创建表public void onCreate(SQLiteDatabase db) (Toast.makeText(m_context,creatdb,Toast.LENGTH_LONG).show();/ TODO Auto-generated method stubdb.execSQL(WIFI_CREATE_DDL);db.execSQL(LOCATION_CREATE_DDL);Overri

18、depublic void onUpgrade(SQLiteDatabase db, int lolVersion, intnewVersion) (/两个表的更新,当version变化时会更新(调试时用)Toast.makeText(m_context,upgradedb,Toast.LENGTH_LONG).show();db.execSQL(WIFI_DELETE_DDL);db.execSQL(WIFI_CREATE_DDL);db.execSQL(LOCATION_DELETE_DDL);db.execSQL(LOCATION_CREATE_DDL);3. 采集并添加指纹信息模块:增

19、加指纹库,往数据库中增加指纹信息package com.example.w4;import java.util.List;import android.app.Activity;import android.content.ContentValues;import android.database.sqlite.SQLiteDatabase;import .wifi.ScanResult;import .wifi.WifiManager;import android.os.Bundle;import android.view.View;import android.view.View.OnCl

20、ickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class Add extends Activity(public static StringBuffer save;/保存的 location 信息都在其中/ “输入当前地点的位置”按钮动作监听器public class SubmitListener implements OnClickListener(Override/点击按钮之后将wifi SSID信息存入指纹数据库中publ

21、ic void onClick(View v) (EditTextdesc二 (EditText)(Add.this).findViewById(R.id.desc);DBHelper helper=new DBHelper(Add.this);SQLiteDatabase db =helper.getWritableDatabase();WifiManagerwifimanager=(WifiManager)getSystemService(WIFI_SERVICE);wifimanager.startScan();List scanResults二wifimanager.getScanRe

22、sults();int i=0;String ssid=new String25;for(ScanResult scanResult:scanResults)(/信息添加到数据库中ContentValues args =new ContentValues();if(wifimanager.calculateSignalLevel(scanResult.level,100)20)/ 这里 将level20的认为是比较稳定的wifi站点args.put(WIFI_SSID,scanResult.SSID.toString();long rowid =db.insert(WIFI, null, ar

23、gs);args.put(WIFI_LEVEL,wifimanager.calculateSignalLevel(scanResult.lev el,100);long rowid2 =db.insert(WIFI, null, args);i+;Toast.makeText(Add.this, One record insert,there are +i+wifiat here”,Toast.LENGTH_LONG).show();MainActivity.wifinumMainActivity.locationnum=i;/ 几 号地 点 有几个wifi站点db.close();prote

24、cted void onCreate(Bundle savedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.add);Button submitButton =(Button)findViewById(R.id.submit);submitButton.setOnClickListener(new SubmitListener();4. 查询用户当前位置模块:查询用户当前位置package com.example.w4;import java.util.ArrayList;import jav

25、a.util.List;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import .wifi.ScanResult;import .wifi.WifiManager;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import

26、 android.widget.Button;import android.widget.Toast;public class Search extends Activity(public int wificount=new int100;与数据库中数据相匹配 wifi的数量public int levelcount=new int100;/ “查询当前所在的位置”按钮动作监听器public class SearchListener implements OnClickListener(private String sqllistarray;Overridepublic void onClic

27、k(View v) (DBHelper helper=new DBHelper(Search.this);SQLiteDatabase db =helper.getReadableDatabase(); /db 是之前 创建和输入指纹信息的数据库WifiManagerwifimanager=(WifiManager)getSystemService(WIFI_SERVICE);List scanResults二wifimanager.getScanResults();List sqllist=new ArrayList();for(int i=1;i=MainActivity.wifinumi

28、-3&wificounti=MainAct ivity.wifinumi+3) /如果匹配的wifi数量在一定范围之内,则输出对应的 location 信息Toast.makeText(Search.this, The location id=+i,Toast.LENGTH_LONG).show();break;protected void onCreate(Bundle savedInstanceState)( super.onCreate(savedInstanceState); setContentView(R.layout.search);Button searchButton =(Button)findViewById(R.id.search);searchButton.setOnClickListener(new SearchListener();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号