当前位置: 首页 > news >正文

python 笔记 根据用户轨迹+基站位置,估计基站轨迹+RSRP

1 问题描述

已知用户实际的轨迹,和基站的位置,能不能得到用户所连接的基站,以及基站的信号强度RSRP?

1.1 几个假设

这里我们做几个假设:

  • 每个用户有80%的概率连接最近的基站,有20%的概率选择其他的基站连接
    • 其他的基站不会太远离用户的位置,用户300m内的某个基站
  • 至于计算RSRP:
    • 而路径距离,这里我们采用‘Urban Area Path loss Propagation Prediction and Optimisation Using Hata Model at 800MHz’论文里面提及的Okumura-Hata公式
      • L=A+B\log_{10}(f)-13.82\log_{10}(h_{BS})-a(h_{MS})+[44.9-6.55\log_{10}(h_{BS})]\log_{10}d
        • A,B是根据功率强度f决定的
        • L是路径损耗(dB)
        • F是频率(MHz)
        • hBS是基站天线高度(m)
        • hMS是手机高度(m)
        • d是手机和基站的距离(km)
  • 为了进行计算,我们需要知道基站的发射功率、天线增益以及使用的频率。
    • 由于这些信息通常不会公开,我们将假设一些标准值:
      • 基站的发射功率为35瓦
      • 天线增益为10dBi
      • 用户设备的天线增益为0dBi
      • 使用的频率为2.1GHz(2100MHz)
      • 天线高度 30m
      • 手机高度 1.6m
      • 这些都是典型的值,但在实际情况中可能会有所不同。

2  找寻基站轨迹

from scipy.spatial.distance import cdist
from sklearn.neighbors import KDTree
import numpy as np
import pandas as pd

2.1 读取基站轨迹数据

  • 公开的数据,可以通过OpenCellID的数据处理而得

一下是一个人为伪造模型的数据

2.1.1 读取数据


cell=pd.read_csv('celltable.csv')cell

 2.1.2 筛选基站+Cell ID去重

cell=cell[cell['Network System']=='LTE']
cell

cell=cell.drop_duplicates(subset='Cell ID',keep='first')
cell

 

2.2 将经纬度转化成Web Mercator坐标

2.2.1 经纬度至Web墨卡托 转化方法

地理知识:墨卡托坐标系-CSDN博客

def lonlat_to_Mercator_(lon,lon_y):x=lon*20037508.34/180y=math.log(math.tan((90 + lon_y) * math.pi / 360)) / (math.pi / 180)y=y*20037508.34/180    return x,y
def Webmercater2latlon(mer_x,mer_y):lon_x=mer_x/20037508.34*180lon_y=mer_y/20037508.34*180lon_y=180/math.pi*(2*math.atan(math.exp(lon_y*math.pi/180))-math.pi/2)return(lon_x,lon_y)

2.2.2 cell中的经纬度转化成Web墨卡托

cell['mer_x'],cell['mer_y']=zip(*cell.apply(lambda row:lonlat_to_Mercator_(row['Longitude'],row['Latitude']),axis=1))
cell=cell[['Cell ID','mer_x','mer_y','Site Name','Site Address']]
cell

2.2.3 去除重复位置

cell=cell.drop_duplicates(['mer_x','mer_y'])
cell

2.2.4 根据基站的墨卡托坐标创建KD树

# Extract the relevant data for the KD Tree (Web Mercator X and Y coordinates)
lte_cells_mercator = cell[['mer_x','mer_y']].values
lte_cells_mercator
'''
array([[11562113.25547015,   145284.49757409],[11547895.59195217,   148544.54957278],[11560513.65623184,   153805.87319286],...,[11543354.99361167,   149843.63229047],[11557325.28048347,   144718.47725593],[11557490.7136156 ,   139442.78908455]])
'''tree_mercator = KDTree(lte_cells_mercator)

3  读取用户轨迹

人为给定一条

user_points = np.array([[1.342520, 103.681236],[1.342196, 103.679179],[1.340511, 103.682740],[1.343717, 103.686724],[1.346773, 103.690370],[1.343203, 103.692289],[1.338421, 103.695795],[1.337798, 103.696571],[1.340250, 103.705373],[1.338572, 103.704885],[1.339684, 103.705642],[1.338408, 103.706127],[1.344021, 103.720346],[1.344426, 103.722062],[1.341786, 103.722293],[1.341259, 103.725101],[1.339582, 103.727067],[1.338587, 103.725448]
])

3.1 用户轨迹转化为Web墨卡托轨迹

user_locations_mercator =[lonlat_to_Mercator_(lon,lat) for lat,lon in user_points]
user_locations_mercator
'''
[(11541742.394730601, 149462.31994029254),(11541513.410538072, 149426.24252432864),(11541909.819244731, 149238.61776834572),(11542353.31609599, 149595.60599074847),(11542759.186959365, 149935.8921435887),(11542972.809062168, 149538.372039615),(11543363.095196836, 149005.89644030613),(11543449.47912168, 148936.52547995208),(11544429.313279504, 149209.55542897113),(11544374.989368005, 149022.71027123014),(11544459.258222522, 149146.5313626564),(11544513.24817555, 149004.44889199687),(11546096.100014921, 149629.456426657),(11546287.124261094, 149674.5532310448),(11546312.839063464, 149380.58901097745),(11546625.424193569, 149321.90755505234),(11546844.278312437, 149135.1736702744),(11546664.05205687, 149024.38051939345)]
'''

4 找到用户连接的基站

connected_cells_mercator= pd.DataFrame()
#用户对应的基站 DataFrame
probability_nearest=0.8
#多少比例的数据
radius=300
#距离用户多近的基站可以被考虑

for location_mercator in user_locations_mercator:#对于用户轨迹的每一个点dist_mercator, ind_mercator = tree_mercator.query([location_mercator], k=1)#通过基站的KD树找到距离用户最近的基站的idnearest_cell_mercator = cell.iloc[ind_mercator[0]]#id对应的那一行基站if np.random.random() <= probability_nearest:#比0.8小——就是最近的基站,比0.8大——从300m内的基站中选一个if(len(connected_cells_mercator)==0):connected_cells_mercator=nearest_cell_mercatorelse:connected_cells_mercator=pd.concat([connected_cells_mercator,nearest_cell_mercator])#基站对应的那一行加入返回的DataFrame中else:indices_mercator = tree_mercator.query_radius([location_mercator], r=radius)[0]#找到距离用户300m内的所有基站,按照从近到远排序indices_mercator = indices_mercator[indices_mercator != ind_mercator[0]]#剔除最近的基站if len(indices_mercator) == 0:#len(indices_mercator) == 0,表示300m内只有最近的基站这一个基站if(len(connected_cells_mercator)==0):connected_cells_mercator=nearest_cell_mercatorelse:connected_cells_mercator=pd.concat([connected_cells_mercator,nearest_cell_mercator])else:random_cell_index_mercator = np.random.choice(indices_mercator)#随机地选择一个其他基站random_cell_mercator = cell.iloc[np.array([random_cell_index_mercator])]if(len(connected_cells_mercator)==0):connected_cells_mercator=random_cell_mercatorelse:connected_cells_mercator=pd.concat([connected_cells_mercator,random_cell_mercator])#connected_cells_mercator.append(random_cell_mercator)
connected_cells_mercator

4.1 基站轨迹从墨卡托坐标转化为经纬度

connected_cells_mercator['lon'],connected_cells_mercator['lat']=zip(*connected_cells_mercator.apply(lambda row:Webmercater2latlon(row['mer_x'],row['mer_y']),axis=1))
connected_cells_mercator

5 可视化用户轨迹和对应的基站轨迹 

connected_cells=connected_cells_mercator[['lat','lon']].values
import foliumm=folium.Map(location=[1.341505, 103.682498],zoom_start=14)for i in range(len(connected_cells)):folium.Marker(connected_cells[i],icon=folium.Icon(icon='wifi',prefix='fa',color='red',icon_color='yellow')).add_to(m)for i in range(len(user_points)):folium.Marker(user_points[i],icon=folium.Icon(icon='phone',prefix='fa',color='green',icon_color='blue')).add_to(m)
folium.PolyLine(user_points,color='green').add_to(m)
folium.PolyLine(connected_cells,color='red').add_to(m)
m

 6 估算RSRP

6.1 假设和原理(回顾)

  •  计算RSRP:
    • 而路径距离,这里我们采用‘Urban Area Path loss Propagation Prediction and Optimisation Using Hata Model at 800MHz’论文里面提及的Okumura-Hata公式
      • L=A+B\log_{10}(f)-13.82\log_{10}(h_{BS})-a(h_{MS})+[44.9-6.55\log_{10}(h_{BS})]\log_{10}d
        • A,B是根据功率强度f决定的
        • L是路径损耗(dB)
        • F是频率(MHz)
        • hBS是基站天线高度(m)
        • hMS是手机高度(m)
        • d是手机和基站的距离(km)
  • 为了进行计算,我们需要知道基站的发射功率、天线增益以及使用的频率。
    • 由于这些信息通常不会公开,我们将假设一些标准值:
      • 基站的发射功率为35瓦
      • 天线增益为10dBi
      • 用户设备的天线增益为0dBi
      • 使用的频率为2.1GHz(2100MHz)
      • 天线高度 30m
      • 手机高度 1.6m
      • 这些都是典型的值,但在实际情况中可能会有所不同。

6.2 参数设置


transmit_power_dbm = 35  # 基站的发射功率
antenna_gain_dbi = 10    # 天线增益
device_gain_dbi = 0      # 用户设备的天线增益
frequency_hz = 2100      # 使用的频率
speed_of_light = 3e8     # 光速
antenna_h=30             #基站天线高度
antenna_u=1.6            #手机高度

6.3 计算路径损失的函数

def calclate_pl(distance_m,freq_mhz):path_loss=46.3+39.9*math.log10(freq_mhz)path_loss-=13.82*math.log10(antenna_h)path_loss-=(3.2*((math.log10(11.75*antenna_u))**2)-4.97)path_loss+=(44.5-6.55*math.log10(antenna_h))*math.log10(distance_m/1000)return path_loss

 6.4 计算rsrp的函数

def calculate_rsrp(fspl_db, transmit_power_dbm, antenna_gain_dbi, device_gain_dbi):rsrp_dbm = transmit_power_dbm + antenna_gain_dbi + device_gain_dbi - fspl_dbreturn rsrp_dbm

6.5 计算每一个用户点的RSRP

 

connected_cells_mercator_value=connected_cells_mercator[['mer_x','mer_y']].values
rsrp_values = []for user_location_mercator, connected_cell in zip(user_locations_mercator, connected_cells_mercator_value):#迭代每一个用户位置,和对应的基站位置distance_x = user_location_mercator[0] - connected_cell[0]distance_y = user_location_mercator[1] - connected_cell[1]distance_m = np.sqrt(distance_x**2 + distance_y**2)#计算每一个用户位置和基站位置的距离fspl_db = calclate_pl(distance_m, frequency_hz)#计算相应的路径损失rsrp_dbm = calculate_rsrp(fspl_db, transmit_power_dbm, antenna_gain_dbi, device_gain_dbi)#计算相应的RSRPrsrp_values.append(rsrp_dbm)
connected_cells_mercator['rsrp']=rsrp_values
connected_cells_mercator

 一般来说RSRP的取值为:

  • Excellent Signal: -44 dBm to -80 dBm
  • Good Signal: -81 dBm to -90 dBm
  • Fair Signal: -91 dBm to -100 dBm
  • Poor Signal: -101 dBm to -110 dBm
  • Very Poor Signal: -111 dBm to -120 dBm
  • No Signal: -121 dBm to -140 dBm

可以看到大部分信号都在excellent 和good 之间

相关文章:

python 笔记 根据用户轨迹+基站位置,估计基站轨迹+RSRP

1 问题描述 已知用户实际的轨迹&#xff0c;和基站的位置&#xff0c;能不能得到用户所连接的基站&#xff0c;以及基站的信号强度RSRP&#xff1f; 1.1 几个假设 这里我们做几个假设&#xff1a; 每个用户有80%的概率连接最近的基站&#xff0c;有20%的概率选择其他的基站连…...

RocketMQ 安装部署及应用场景记录

文章目录 前言一、RocketMQ简介1.1 整体架构 二、RocketMQ安装部署2.1 RocketMQ 下载2.2 修改 JVM 参数2.3 启动 NameServer 和 Broker2.4 验证发送和接受消息2.5 停止 NameServer 和 Broker2.6 配置全局环境 三、RocketMQ应用场景3.1 异步处理3.2 应用解耦3.3 流量削峰 前言 …...

人工智能面面观

人工智能简介 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机能够模拟和执行人类智能任务的科学和技术领域。它致力于开发能够感知、理解、学习、推理、决策和与人类进行交互的智能系统。人工智能的背景可以追溯到上世纪50…...

vue-router的使用技巧

一、安装 npm install vue-router 二、引入 main.ts引入 import { createApp } from vue import App from ./App.vue import router from ./routerconst app createApp(App)app.use(router) app.mount(#app)三、定义路由文件 路由的参数 meta添加路由的其他参数 redire…...

CV计算机视觉每日开源代码Paper with code速览-2023.11.21

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】Multi-entity Video Transformers for Fine-Grained Video Representation Learning 论文地址&…...

人工智能对当代生活的影响

人工智能&#xff08;AI&#xff09;是指通过模拟人类智能的方式&#xff0c;使机器能够执行某些需要智能的任务。随着技术的快速发展和应用的广泛推广&#xff0c;人工智能已经深入到我们的日常生活中&#xff0c;对我们的生活和社会产生了深远的影响。本文将探讨人工智能对当…...

笔记:如何搭建一套前端监控系统?(持续更新中)

数据敏感处理 数据加密&#xff0c;对涉及用户隐私的数据做到加密防护 独立部署&#xff0c;不和其它应用共享监控系统 不采集具体数据&#xff0c;只采集用户操作数据 错误采集 Runtime Error: JS运行错误&#xff0c;可通过error监听器捕获 load Error: 资源加载错误&#x…...

在 Ubuntu 上安装最新版的 Calibre

目录 前言 方法1&#xff1a;从 Ubuntu 的仓库安装 Calibre 卸载 Calibre 方法2&#xff1a;获取最新版本的 Calibre 卸载 Calibre 结语 前言 Calibre 是一款自由开源的电子书软件。下面介绍如何在 Ubuntu Linux 上安装它。 作为电子书管理的瑞士军刀&#xff0c;Calibre …...

docker基础学习笔记

文章目录 Docker简介Linux下安装DockerDocker常用命令Docker网络Docker存储docker-composedockerfile制作镜像私有仓库镜像导入导出参考 Docker简介 定义&#xff1a;Docker是一个开源的应用容器引擎优势&#xff1a; 一键部署&#xff0c;开箱即用&#xff1a;容器使用基于im…...

Could not resolve all files for configuration ‘:app:androidJdkImage‘.

在使用./gradlew build编译项目时候遇到了该问题&#xff0c;整体错误如下: * What went wrong: Configuration cache state could not be cached: field generatedModuleFile of com.android.build.gradle.tasks.JdkImageInput bean found in field compilerArgumentProvider…...

GLP-1 , GLP-1R

-- 6VCB_GLP-1R G_protein, GLP-1 peptidea positive allosteric modulator...

【数据结构】F : 道路建设 (Ver. I)

F : 道路建设 (Ver. I) Description 有N个村庄&#xff0c;编号从1到N&#xff0c;你应该建造一些道路&#xff0c;使每个村庄都可以相互连接。 两个村A和B是相连的&#xff0c;当且仅当A和B之间有一条道路&#xff0c;或者存在一个村C使得在A和C之间有一条道路&#xff0c;并…...

flutter 无法从H5 WebView 访问摄像头和录音权限

AndroidManifest.xml需要在 中添加以下权限&#xff1a; <uses-permission android:name"android.permission.INTERNET"/> <uses-permission android:name"android.permission.CAMERA" /> <uses-permission android:name"android.per…...

electron27-react-mateos:基于electron+react18仿matePad桌面系统

基于Electron27React18ArcoDesign搭建桌面版OS管理系统。 electron-react-mateos 基于最新前端跨端技术栈electron27.xreact18arco-designzustand4sortablejs构建的一款仿制matePad界面多层级路由管理OS系统。 ElectronReactOS支持桌面多路由配置&#xff0c;新开窗口弹窗开启路…...

高精度算法总结

高精度加法 题目链接&#xff1a; https://www.acwing.com/activity/content/problem/content/825/ 代码模版&#xff1a; #include <iostream> #include <vector>using namespace std;// C A B vector<int> add(vector<int> &A, vector<…...

EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡

本例单机集群部署使用三个节点&#xff0c;分别为node1、node2、node3 一、安装与配置 1 创建数据目录 mkdir -p node1/data node1/logs mkdir -p node2/data node2/logs mkdir -p mode3/data node3/logs 2 数据目录授权 chown 1000 node1/ node2/ node3/ chown 1000 n…...

电商又有大动静,又一短视频进军电商领域!

我是电商珠珠 电商近几年来发展迅速&#xff0c;截止到23年的10月26日&#xff0c;电商零售平台市场份额是淘宝市场占比的53%&#xff0c;京东为20%&#xff0c;拼多多手握15%的市场占比&#xff0c;三者合计份额已经达到了88%。 剩下的抖音、快手、苏宁也在奋力抢占更多。 …...

C语言线性表的链式存储(框架)

线性表的链式存储 线性表的顺序存储&#xff1a;用一块连续的内存空间 线性表的链式存储&#xff1a;不连续的内存空间 链表是由一系列的节点组成&#xff0c;每个节点包含两个域&#xff0c;一个是数据域&#xff0c;一个是指针域 链表的插入和删除原理 单项链表框架的搭建 …...

webpack配置完热更新之后还是会刷新整个页面

可以在webpack文档中找到有关热更新的详细信息&#xff0c;意思就是&#xff0c;开启热更新之后&#xff0c;整个页面你改了哪里&#xff0c;就只更新哪里&#xff0c;其他没变的&#xff0c;或者保存在缓存里面的内容&#xff0c;都不会改变&#xff0c;感谢很神奇&#xff01…...

2023年第六届传智杯程序设计挑战赛(个人赛)B组 赛后复盘

传智杯赛后复盘 大家好 我是寸铁&#x1f44a; 2023年第六届传智杯程序设计挑战赛&#xff08;个人赛&#xff09;B组 赛后复盘 喜欢的小伙伴可以点点关注 &#x1f49d; 1. 字符串拼接 细节&#xff1a;一定要清楚nextLine()和next()的区别 nextLine()是遇到回车会停下来 nex…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...