`
jianFengGong
  • 浏览: 20485 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基站定位算法

    博客分类:
  • JAVA
阅读更多

定位技术有

两种,一种是基于 GPS 的定位,一种是基于移动运营网的基站的定位。

基于移动运营网基站定位服务又叫做移动位置服务(LBS——Location Based

Service
),它是通过电信移动运营商的网络(如 GSM 网)获取移动终端用户的位置信息

(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务[1]

在手机上不需要增加任何功能,向运营商开通相关服务就可以实现。

本文所说的基站定位,是采用 google 的数据,在功能手机上实现的定位功能(另

一种方法是:内置基站位置信息,然后查询。这需要购买第三方的数据库,并且由于运营

商的网络优化,数据会变得不准确。当然,在智能手机的实现那就更简单了)。这方面的

文章网上也有不少,大多偏向于理论,将它转化成代码,还是有些内容需要自己恩考。

本文尽量将自己实现代码的过程及注意点写下来,目的是:看了本文,就知道该如何

写代码了(如果还看不懂,就先查看网上原理性的东东,呵呵)。

其基本原理是:1、调用手机协议栈函数,获取当前服务小区和邻近小区的 CellID

mnc
mcclacrssi 值,至少需要要 3 组。2、通过手机的 HTTP 协议,将上述小区信

息传到 Google Gelocation Server 获取相对应小区的经纬度。3、根据无线电传播路径损

耗理论公式,将 RSSI 值转化成相对应的距离。4、运用三角形质心算法,采用3 组小区的

坐标信息和距离,得出手机当前的位置信息。下面具体描述实现过程。

一、获取服务小区和邻近小区的相关信息。由于手机平台的不同,调用的协议栈函数不

同。但必须获得以下的数据:小区 ID 号:CellID,移动网络号码(用于识别移动客户所

属的移动网络):mnc;移动国家号码(用于唯一地标识移动客户属于的国家):mcc;位

置区码(用于标识不同的位置区):lac;接收的信号强度指示:RSSI。根据三角形算法的需

要,至少要 3 组小区信息。在展讯平台中,一般情况下能够获得 6 组小区信息,这给挑选可

信任度较高的数据,提供了便利。

二、通过手机的 HTTP 协议,将上述小区信息传到 Google Gelocation Server 获取相

对应小区的经纬度。获取位置信息时,必须遵照网络位置提供者协议(Network Location

Provider Protocol)
,详细的协议在 google 的网站上做了说明。其要点有:

1
、使用 HTTP POST,请求和响应的格式都是JSON ,请求的内容示例如下:

{

"version": "1.1.0",

"host": "maps.google.com",

"home_mobile_country_code": 310,

"home_mobile_network_code": 410,

"radio_type": "gsm",

"carrier": "Vodafone",

"request_address": true,

"address_language": "en_GB",

"location": {

"latitude": 51.0,

"longitude": -0.1

},

"cell_towers": [

{

"cell_id": "42",

"location_area_code": 415,

"mobile_country_code": 310,

"mobile_network_code": 410,

"age": 0,

"signal_strength": -60,

"timing_advance": 5555

},

{

"cell_id": "88",

"location_area_code": 415,

"mobile_country_code": 310,

"mobile_network_code": 580,

"age": 0,

"signal_strength": -70,

"timing_advance": 7777

}

],

"wifi_towers": [

{

"mac_address": "01-23-45-67-89-ab",

"signal_strength": 8,

"age": 0

},

{

"mac_address": "01-23-45-67-89-ac",

"signal_strength": 4,

"age": 0

} [2]

]

}

其中,"version""host"字段是必须有的,当然,里面要求的信息尽可能全面提供。

响应的示例如下:

{

"location": {

"latitude": 51.0,

"longitude": -0.1,

"altitude": 30.1,

"accuracy": 1200.1,

"altitude_accuracy": 10.1,

"address": {

"street_number": "100",

"street": "Amphibian Walkway",

"postal_code": "94043",

"city": "Mountain View",

"county": "Mountain View County",

"region": "California",

"country": "United States of America",

"country_code": "US"

}

}

} [2]

如果请求的数据格式不正确,服务器返回 HTTP 的状态为 400,并在响应的文本中

有详细描述。如果请求的数据格式正确,服务器返回 HTTP 的状态为 200。如果定位成

功,就有返回经纬度信息;如果定位不成功,经纬度信息就为空。

2
POST 时,URL 地址是:http://www.google.com/loc/json

3
HTTP 发送时,对应的 IP 就是解析www.google.com 得到的“74.125.71.105”,端口:

80

4
、将上述请求的数据组织成 HTTP 数据包格式,才能发送成功。如果手机软件本身已

经集成了 HTTP 协议的相关代码,这一步就省了。由于是在展讯 modem 版本的软件上实现

此功能,HTTP 协议没有被集成,因此必须自己组织 HTTP 数据包。HTTP 数据包包含以下几

个字段:

"POST /loc/json HTTP/1.1"

"Host:www.google.com"

"Content
Type: application/requestJson"

"User Agent: user name" "Content
Length: " + 内容的长度


每个字段间都要加上回车换行符,实际内容与上述字段间要加 2 个回车换行符。这些数

据组织完成,再调用 socket API 发送出去就行了。

三、根据无线电传播路径损耗理论公式,将 RSSI 值转化成相对应的距离。自由空间

无线电传播路径损耗模型为:

式中,d 为距信源的距离,单位为kmf 为频率,单位为 MHzk 为路径衰减因子,范围在

2
5 之间。对数一常态分布模型,其路径损耗的计算公式为:

式中,是平均值为 O 的高斯分布随机变数,其标准差范围为 410PL(d0),是式(1

d=1 时,算出的 Loss值。根据式(1)和式(2),得出信号强度为:

RSSI=
发射功率(Pt)+天线增益(Pf)一路径损耗(PL(d))

根据上面的理论公式,推算出距离与 RSSI 的关系公式:

D = 10^((Pt+Pf-RSSI-PL(d0)-X0)/(10*K))

PL(d0) = 32.44 + 10*K*log10 (f)
,根据发射频率算出 PL(d0)

A = Pt + Pf –X0,则A 是一常数,距离 D 的公式变成:

D = 10^((A-PL(d0))/(10*K)) [
计算中,K 取中间值 3]

四、计算前的单位转换。

由于经纬度信息单位度与根据 RSSI 算出的距离公里,是不同的单位,不能直接计算,

必须转换成统一的单位。方法是:找出离目标最近的一点作为参考点(原点),其它点参考

原点换算出相对的经纬度差值,再将该差值根据刻度与实际距离的关系,换算成公里数,就

得到其它点相对原点的坐标值,单位也统一成公里。地球的子午线总长度大约 40008km,平

均:纬度 1 = 大约 111km,纬度 1 = 大约 1.85km,纬度1 = 大约30.9m[4]。我们

知道,地球的半径大概是 6378.137公里,那么经度与距离的关系如下式进行换算:

经度 1 = 2*pi *6378.137*cos(当前的纬度) km

五、找出可信度相对较高的三组数据。

由于距离越远,根据RSSI 算出的距离误会越大,我们认为可信度较高的数据就是距离

最小的数据。据此,选出距离最小的三组数据作为下面三角形质心算法的数据。

六、运用三角形质心算法,得出手机当前的位置信息。三角形质心定位算法的基本思想是:计算三圆交叠区域的 3 个特征点的坐标,以这三个点为三角形的顶点,未知点即为三


角形质心。特征点为 EFG,特征点E 点的计算方法为[3]



同理,可计算出 FG,此时未知点的坐标为。但是二次

方程,求解过程计算量较大,将式(3)中的方程式两两相减,则分别得到每条交线的直线

方程,特征点 E 的坐标则可以通过这些直线方程求解,如下三个直线方程式:

1: 2(Xb-Xa)Xe+2(Yb-Ya)Ye=ra*ra-rb*rb-Xa*Xa+Xb*Xb-Ya*Ya+Yb*Yb

2: 2(Xb-Xc)Xe+2(Yb-Yc)Ye=rc*rc-rb*rb-Xc*Xc+Xb*Xb-Yc*Yc+Yb*Yb

3: 2(Xa-Xc)Xe+2(Ya-Yc)Ye=rc*rc-ra*ra-Xc*Xc+Xa*Xa-Yc*Yc+Ya*Ya

根据上面算出的未知点的坐标是相对于原点的公里数,先将公里数转化成经纬度,然后再

与原点的经纬度相加,就得到了手机的位置信息。

基于 GPS 的定位方式是利用手机上的 GPS 定位模块将自己的位置信号发送到定位

后台来实现定位的,精度比较高,在空旷的地方表现优越;而在大厦内部,由于

信号微弱,无法实现定位功能。基站定位则是利用基站对手机的距离的测算距离来确

定手机位置的,不需要手机具有 GPS 定位能力,但是精度很大程度依赖于基站的分布

及覆盖范围的大小,本文实现的基站定位误差在 200m 之内,在一定程度上弥补了 GPS

信号无法覆盖区域的定位缺憾。

分享到:
评论

相关推荐

    TDOA基站定位算法详细介绍学习教案.pptx

    TDOA基站定位算法详细介绍学习教案.pptx

    TDOA基站定位算法详细介绍PPT课件.pptx

    TDOA 基站定位算法详细介绍 TDOA(Time Difference of Arrival)是一种基于时间差的无线电发射源定位算法。该算法通过测量无线电信号到达不同监测地点的时间差,来对发射无线电信号的发射源进行定位。 一、 TDOA ...

    TDOA基站定位算法详细介绍.ppt

    **TDOA基站定位算法详解** TDOA(Time Difference Of Arrival)即到达时间差定位算法,是一种基于信号到达不同监测点的时间差来确定发射源位置的技术。在无线电监测领域,TDOA算法被广泛应用于定位非法广播、查找...

    TDOA基站定位算法详细介绍PPT教案.pptx

    **TDOA基站定位算法详解** TDOA(Time Difference Of Arrival)基站定位算法是一种用于确定无线电信号发射源位置的技术。该算法基于信号到达不同监测站点的时间差来进行定位,而不是像DOA(Direction Of Arrival)...

    TDOA基站定位算法详细介绍PPT学习教案.pptx

    **TDOA基站定位算法详解** TDOA(Time Difference Of Arrival)基站定位算法是一种用于确定无线电信号发射源位置的技术。该算法基于信号到达不同监测站点的时间差来进行定位,而不是通过测量信号的方向(DOA)。...

    多基站UWB观测距离加权最小二乘算法WLS和最小二乘算法LS三边定位算法比较分析MATLAB源码.m

    本文将深入探讨基于多基站UWB的观测距离加权最小二乘算法(Weighted Least Squares, WLS)和普通最小二乘算法(Least Squares, LS)在三边定位算法中的应用和比较。MATLAB源码文件"多基站UWB观测距离WLS和LS三边定位...

    Google 基站定位源码

    综上所述,Google基站定位源码是移动设备定位技术的核心组成部分,涉及到信号处理、数据库交互、定位算法等多个领域,对于开发高效、精准的手机导航系统至关重要。通过深入学习和研究,我们可以从中获取宝贵的工程...

    使用C++实现的时差定位CHAN算法和Taylor算法(github资源)

    本项目是基于C++实现的时差定位算法,包括CHAN算法和Taylor算法,这两种算法都用于解决无源定位问题,即不依赖于目标自身的发射信号来确定其位置。 **时差定位(TDOA)** 时差定位是通过测量信号到达多个接收站的时间...

    mobile GPS 基站定位 cell id算法

    移动设备上的GPS基站定位是利用手机接收多个移动通信基站发出的信号来确定设备位置的一种技术。这种方法结合了全球定位系统(GPS)与蜂窝网络的数据,特别是在GPS信号弱或者不可用的情况下,如室内环境,基站定位能...

    loc.zip_基站_基站 定位_定位_手机定位

    在这里,可能有Servlet配置(web.xml)、自定义的Java类以及必要的jar文件,这些类文件和库可能包含了基站定位算法的具体实现,例如计算手机与基站之间距离的函数,以及处理和存储定位数据的逻辑。 基站定位技术...

    移远QueLocator2基站定位服务介绍

    这项服务支持基站定位和Wi-Fi定位,为用户提供便捷、可靠、安全和精准的定位功能。 ### QuecLocator介绍 QuecLocator服务能够覆盖各种场景,包括基站定位和Wi-Fi定位,并且在新版本中加入了混合定位技术,即结合...

    android 基站定位程序

    通过比较不同基站信号的强弱,系统可以估算出手机与各个基站的距离,再结合基站的位置信息,就可以运用三角定位或多边形定位算法来确定手机的大致位置。 二、支持的通信商 在描述中提到,这个特定的Android基站定位...

    Chan MATLAB多基站 室内定位算法.pdf

    Chan算法在二维空间中的应用可以分为两种情况:一是只有三个基站参与定位,二是三个以上基站参与定位。 当只有三个基站参与定位时,算法基于几何关系和距离差的测量值,可以建立一组线性方程组来求解移动台位置。...

    基于基站的三维定位算法模拟.zip

    本项目名为“基于基站的三维定位算法模拟”,其主要目标是通过仿真模拟帮助学习者深入理解基站定位的原理和方法。 在三维定位中,通常会涉及到以下几种关键算法: 1. **多边形定位**:当手机接收到至少三个基站的...

    无线定位基本算法的MATLAB程序.rar

    1. **多基站定位算法** - **距离差法(Differential Distance Estimation, DDE)**:根据信号到达不同基站的时间差来计算目标位置。在MATLAB中,可以利用信号传播速度和时间差来计算距离,进而通过几何关系确定位置...

    matlab_基站定位算法,设置基站的位置,信号达到基站的相对时间,即可算出手机的具体位置

    基站定位算法,设置基站的位置,信号达到基站的相对时间,即可算出手机的具体位置(The base station positioning algorithm, set the base station location, the relative time the signal to reach the base ...

    定位算法 三点定位MATLAB代码

    三点定位算法广泛应用于各种场景,如无线传感器网络、无人机导航、移动通信基站定位等。通过结合其他技术,如RSSI(接收信号强度指示)或TOA(到达时间)信息,可以进一步提高定位精度。此外,还可以将该算法扩展到...

    基于基站定位数据的商圈分析Python源码.rar

    标题中的“基于基站定位数据的商圈分析Python源码”表明这是一个使用Python编程语言进行的项目,专注于通过基站定位数据来研究商业区的人流分布、活动模式以及潜在的商业价值。基站定位数据通常由移动运营商提供,它...

    用MATLAB编写,4个基站的基于TDOA的Chan-Taylor混合加权算法定位

    用MATLAB编写,4个基站的基于TDOA的Chan-Taylor混合加权算法定位。最普通的Chan-Taylor算法,将Chan算法计算出来的估计值作为Taylor级数展开法的迭代初始值...可以用于TDOA定位算法的改进或者比较或者UWB定位都可以。

Global site tag (gtag.js) - Google Analytics