欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    wifi定位实验报告.docx

    • 资源ID:4926129       资源大小:129.23KB        全文页数:13页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    wifi定位实验报告.docx

    定位实验题目:基于WIFI位置指纹的室内定位实验成员:2012年12月一、实验题目实验题目基于Wifi位置指纹的室内定位实验实验要求学习android平台使用、android编程、android环境下wifi设备查看操作。实验内容利用最少数目的wifi热点设备,能够实时地对手机进行定位。二、实验目的目前全球定位系统(GPS,Global Positioning System)是获取室外环境位置信息通过实施 项目的最常用方式。但由于卫星信号容易受到各种障碍物遮挡,GPS/APGS等卫星定位技 术并不适用于室内或高楼林立的场合,目前无线室内定位技术迅速发展,已成为GPS的有 力补充。了解智能手机如何利用Wifi热点设备信号强度进行室内定位。三、实验原理l. Android系统架构简介Android系统架构见图,它建立于Linux内核之上,包含了各种设备驱动 和管理模块,囊括了非常齐全的类库和框架,包括轻量级数据库SQLite、浏览 器Webkit等。整个系统建立在Dalvik虚拟机上,应用程序使用Java语言编 写。Android系统提供了丰富的框架(活动管理、位置管理等)来管理系统的软、硬件资源,整合了常用的应用程序(联 系人、电话本等),并开放了很全面的API供用户使用,整个平台具有良好的开 放性和扩展性。Android杂貌条拘2. 采用基于射频指纹的定位方法移动终端需要获得周围AP的RSSI指纹特征,Android系统提供的接口可以 很方便地实现这一功能。3. 定位算法由于室内环境复杂,WiFi无线信号具有较强的时变无线信号传播衰减模型 难以很好的表征距离与信号强度间的映射关系,采用基于射频指纹匹配定位方 法,它具有较好的定位鲁棒性。指纹匹配方式定位算法建立在实验数据基础上, 它主要包括离线训练和在线定位两个阶段,其中离线训练阶段的任务是建立射频 信号强度向量和客户端位置间的一一对应关系,形成一个指纹库(radio map), 定位阶段则使用实时采集的信号强度向量去匹配训练阶段构建的指纹库,从而获 得目标的位置估计。4. 本次实验所采用的基本原理和基本思想如下:当手机程序初次运行时,会创建一个数据库,数据库中包含两个表,一 个记录用户所采集的地点信息,另一个表记录每个之前所记录的地点信 息所对应的wifi信息,为一对多的关系。手持手机设备采集指纹信息,即地点信息,指纹信息会存入之前创建的数据库中,即把输入的地点名称录入表1中,并对此地点的wifi进行 扫描,将满足一定要求的wifi信息,每个wifi SSID+地点名称 作为一 个记录存进表2中。采集的指纹信息越多,定位就会越准确。定位时,先扫描得到所在地点的wifi信息列表,然后与数据库中每一个 地点所拥有的wifi信息进行匹配,若待定位地点的wifi信息绝大部分 都在数据库中某一地点的wifi信息列表中(允许存在一定的误差),则 可以认为当前地点就是数据库中的那一个地点,于是输出那一个地点的 名称,完成定位。四、实验流程1. 首先在手机上面打开应用程序:如图1图12. 然后添加指纹信息,运行效果图如下图2和图3:图3重复此过程,直到数据库中有一定的数量的指纹信息3. 进入到查询界面,如图4:电E & Q壬笆很:网W44. 查询当前所在的位置,结果如图5所示:图5五、个人工作及总结本次实验我主要负责程序中关于指纹数据库初始化模块和查询用户当前位 置模块。在指纹数据库初始化模块中,主要任务是建立如下结构的表1: wifi和表 2: location:表IDWifi_SSIDLocation_ID表:Location_IDLocation_name其中表一和表二通过Location_ID进行关联,建表的目的是存储location 信息及其对应的wifi列表信息,一个location信息对应多个wifi信息。在查询用户当前位置模块中,主要是进行待定位地点wifi列表信息与数 据库中已经存在地点的wifi列表信息进行匹配。在此过程中用一个数 组wificount保存匹配的wifi个数,wificounti代表待定位地点 wifi列表信息与数据库表二中location_ID为i的地点所拥有的wifi 列表信息匹配的wifi个数。最初实验只有两者个数完全一样时才输出此地点,但是在实际操作运行时总是没有匹配的信息输出。后来经过分析和查相关的资料,发现生活 中很多wifi信号不是很稳定,并且wifi信号受外界环境的影响较大, 手机就算是在同一地点所收到的wifi信号变化也会很大,于是考虑允 许wificounti有一定的误差,但是多少范围内的误差即能尽大可能的 不影响定位的误差,又可以实现定位?后来经过测试,当wificounti 左右变化不超过3的时候可以满足一般性要求,实现定位。通过本次实验,知道了 wifi定位的基本原理,并且在实际中给予实现;熟 悉了安卓开发的一般性步骤,提升了自己的能力。同时发现,此安卓程序存在诸 多问题和可以改进的地方,如采集指纹信息的时候必须人为操作,可以设置一个 定时器,周期性的进行采集。六、附录:实验代码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.database.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 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();Buttonlocationaddbutton二 (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.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 implements 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.SQLiteDatabase;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”;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);"/Wifi 表,地点 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, null, DATABASE_VERSION);m_context二context;/ TODO Auto-generated constructor stub©Override执行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);©Overridepublic 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. 采集并添加指纹信息模块:增加指纹库,往数据库中增加指纹信息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.OnClickListener;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信息存入指纹数据库中public 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<ScanResult> scanResults二wifimanager.getScanResults();int i=0;String ssid=new String25;for(ScanResult scanResult:scanResults)(/信息添加到数据库中ContentValues args =new ContentValues();if(wifimanager.calculateSignalLevel(scanResult.level,100)>20)/ 这里 将level>20的认为是比较稳定的wifi站点args.put(WIFI_SSID,scanResult.SSID.toString();long rowid =db.insert("WIFI", null, args);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();protected 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 java.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 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 onClick(View v) (DBHelper helper=new DBHelper(Search.this);SQLiteDatabase db =helper.getReadableDatabase(); /db 是之前 创建和输入指纹信息的数据库WifiManagerwifimanager=(WifiManager)getSystemService(WIFI_SERVICE);List<ScanResult> scanResults二wifimanager.getScanResults();List<String> sqllist=new ArrayList<String>();for(int i=1;i<=MainActivity.locationnum;i+)Cursorcursor=db.query("WIFI",newString_ID,WIFI_SSID,WIFI_LEVEL,WIFI_LOCATION,WHEREWIFI_LOCATION=1”,null,null,null,null);tryif(cursor.moveToFirst()do(Stringsqlresult=cursor.getString(1);/如果结果出错尝试修改sqllist.add(sqlresult);while(cursor.moveToNext(); /对数据库中 某一个location中wifi信息进行遍历,然后加入到sqlresult变量中finally (cursor.close();sqllistarray二sqllist.toString();db.close();wifimanager.startScan();for(ScanResult scanResult:scanResults)( 对扫描 到每一个wifi信息,如果存在于sqlresult中,wifilocation变量加一if(sqllistarray.indexOf(scanResult.SSID)!=-1)wificounti+;/第 i 个 location 有这些个 wifi数与所存地点的wifi匹配if(wificounti>=MainActivity.wifinumi-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();

    注意事项

    本文(wifi定位实验报告.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开