如何正确地三角定位GSM基站以获取位置?

32
首先,我正在尝试使用 C# (.NET 4) 处理这个灾难,因此如果你有一些能帮助我的代码,那将不胜感激。我有一个设备只能获取 GSM 基站信息(顺便说一句,通过AT+KCELL命令),因此我有一个关于基站的值集合(每个基站都有LAC、MCC、MNC、Cell ID、信号强度和第一个定时提前量)。所以我认为我可以得到某种经度和纬度坐标(虽然不准确,但是也可以)。现在我需要帮助,因为我的小脑袋已经混乱了...
我看到有各种各样的服务提供基站代码分辨率(Google、Open Cell ID等),它们将 LAC、MCC 等作为参数并返回一个坐标。因此,我认为它们返回的应该是我传递进去的给定基站的坐标。因此在我的情况下,我可以发送所有我拥有的 LAC 等信息,并获得一系列经度和纬度。很棒,但我的设备并不在那里。现在我认为我需要做一些三角测量,这就是我的知识缺失所困扰的地方。
那么,我到目前为止正确吗?如果是,我该如何进行这个计算(是否有什么东西可以告诉我如何处理所有这些数字,或者更好的是,我可以引用和将所有这些东西馈送到其中以获得一些明智的东西的开源库)?
例如,这是我可能从前述 AT 命令中获得的东西:
5,74,33,32f210,157e,8101,50,0,79,3,32f210,157e,80f7,37,64,5,32f210,157e,810b,37,55,32,32f210,157e,9d3,27,41,33,32f210,157e,edf8,15

分解并解析它,我将得到(我希望我解析正确 - 当然,我的解析程序可能存在错误,但看起来合理):

Number of cells: 5

单元格 1

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33025
Signal: 80
ARFCN: 74
BSIC: 33
Timing advance: 0
Longitude: 14.2565389
Latitude: 48.2248439

单元格 2

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33015
Signal: 55
ARFCN: 79
BSIC: 3
Longitude: 14.2637736
Latitude: 48.2331576

单元格3

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33035
Signal: 55
ARFCN: 64
BSIC: 5
Longitude: 14.2488966
Latitude: 48.232513

单元格 4

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 2515
Signal: 39
ARFCN: 55
BSIC: 32
Longitude: 14.2488163
Latitude: 48.2277972

单元格5

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 60920
Signal: 21
ARFCN: 41
BSIC: 33
Longitude: 14.2647612
Latitude: 48.2299558

有了所有这些信息,我应该如何以最准确的方式找到自己所在的位置?


1
有人知道支持此功能的UMTS USB设备吗?我有一款来自华为和一款来自阿尔卡特的设备,但都不支持AT+KCELL。 - Folkert van Heusden
我有同样的情况,想澄清一下你是否对下面提供的公式进行了任何更改? - Kin
@Kirix - 对我来说,下面的公式运行良好。 - kmp
1
@ppumkin,好久不见了,但我想它是一个Sagemcom HiLo V2模块 - 详细信息在这里:http://support.sagemcom.com/site/livret/URD1_OTL_5635_2_013_72398_ed_02_-_HiLo_V2_technical_specification_14_March_2011.pdf。 - kmp
2
没关系。我看的是2010年的文档,2014年的文档有一个供应商特定命令“AT+CNETSCAN”,可以提供所有没有SIM卡或连接到连接网络的单元。对于9英镑来说非常棒 :) - Piotr Kula
显示剩余6条评论
2个回答

42

我可以帮您讲解一些理论知识。

三角定位基本上是通过找到三个圆的交点来实现的。

每个移动信号基站都是一个圆的中心。圆的大小与该基站信号强度成比例。

三个圆重叠的地方就是用户所在的位置。

您可以按以下方式进行一些非常基本的三角定位:

3个基站:
 tx1,ty1 
 tx2,ty2 
 tx3,ty3
其信号强度为 s1, s2, s3
我们计算每个信号的权重。对于每个基站,它们的权重从0到1之间,而所有基站的权重总和为1。
加权信号 w1, w2, w3 分别为: w1 = s1/(s1+s2+s3) w2 = s2/(s1+s2+s3) w3 = s3/(s1+s2+s3)
用户将在以下位置: x: (w1 * tx1 + w2 * tx2+ w3 * tx3) y: (w1 * ty1 + w2 * ty2+ w3 * ty3)

这里是使用您问题中的值的工作示例:

s1 = 80
s2 = 55
s3 = 55
s4 = 55
s5 = 21
w1 = 80 / ( 80 + 55 + 55 + 55 + 21 ) w2 = 55 / ( 80 + 55 + 55 + 55 + 21 ) w3 = 55 / ( 80 + 55 + 55 + 55 + 21 ) w4 = 55 / ( 80 + 55 + 55 + 55 + 21 ) w5 = 21 / ( 80 + 55 + 55 + 55 + 21 )
w1 = 0.3007519 w2 = 0.2067669 w3 = 0.2067669 w4 = 0.2067669 w5 = 0.0789474
1. 经度为:14.2565389 2. 纬度为:48.2248439
2. 经度: 14.2637736 2. 纬度: 48.2331576
3. 经度: 14.2488966 3. 纬度: 48.232513
4. 经度: 14.2488163 4. 纬度: 48.2277972
5. 经度: 14.2647612 5. 纬度: 48.2299558
位置经度 = 14.2565389 * 0.3007519 + 14.2637736 * 0.2067669 + 14.2488966 * 0.2067669 + 14.2488163 * 0.2067669 + 14.2647612 * 0.0789474
位置纬度 = 48.2248439 * 0.3007519 + 48.2331576 * 0.2067669 + 48.232513 * 0.2067669 + 48.2277972 * 0.2067669 + 48.2299558 * 0.0789474
结果经度: 14.255507 结果纬度: 48.2291628

1
感谢您的回答 - 我已经包含了每个单元格的经度和纬度值(根据Google单元格分辨率服务),因此我将信号强度最大的三个单元格插入到您提供的计算中。它给出了一个在非洲的位置(x:16.0764901666667 y:4.75214030350877),但是所有单元格都位于奥地利,所以这似乎不太对 - 有可能有错别字吗? - kmp
你如何计算像这样的位置的“误差半径”?或者按照谷歌的说法,“准确性”? - kouton
2
...并且它假设所有的塔都具有相同的强度、高度、干扰等。我有一个关于如何获得误差半径的想法,你可以使用交替选择塔,并寻找三角化点中的相似性/差异性。此外,在一段时间内(重复上述步骤几次,以减轻强度的错误峰值/下降) - Dave Engineer
3
信号通常以dBm为单位表示,数值为负值。因此,绝对值越小的信号越好,意味着信号越强,接收器离基站越近。在这个回答中,它意味着具有较小绝对值的信号权重必须更大。 - Denis The Menace
1
这个公式是错误的。 让我们简化为四舍五入的数字。 我们有3个单元格:a(1,2),b(2,3)和c(2,1)。而我们的手机在(2,2)处。 因此,所有3个单元格的信号都为1。因此,因子w1,w2,w3都为1/3X =(1/3 + 2/3 + 2/3)= 5/3(应该是6/2 = 2) Y =(2/3 + 3/3 + 1/3)= 6/3 = 2(这是正确的)还要注意,塔周围的圆圈是全向天线,但在实践中,这些天线很少使用,它们更像扇形(像馅饼一样)。 在扇区内,功率在每个方向上不相同,在中间是最高的,在两端可能会下降到3或更多dB。 - Marvin
显示剩余4条评论

5
这不是一个真正的答案,而是一个开端,我可能会添加更多内容:
单元格ID似乎已经发布:

http://openbmap.org/

我从这个维基页面找到了一个链接,其中包含其他小区ID数据源的链接: http://en.wikipedia.org/wiki/Cell_ID )

请查看页面底部的小区ID数据链接:

http://openbmap.org/latest/cellular/raw/input_raw.zip

我还发现了这个YouTube视频,一个人在玩一些似乎有基站位置的应用程序:

http://www.youtube.com/watch?v=CYvVN5dJD7A

可能在小区ID和信号强度之间,您可以猜测一下...

但是据我所知,对于一般的三角定位,您需要知道至少三个基站的确切位置以及您与它们的确切距离(这可能是信号强度的粗略距离,但可能太不准确)。

看起来维基百科是这样说的...使用您所在的小区、最近的基站和信号强度的组合来获取您的位置:

http://en.wikipedia.org/wiki/Mobile_phone_tracking


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接