win7用自己ip做网站,如何把jQuery特效做网站背景,中山h5模板建站,网站开发怎么谈客户1 问题描述 已知用户实际的轨迹#xff0c;和基站的位置#xff0c;能不能得到用户所连接的基站#xff0c;以及基站的信号强度RSRP#xff1f;
1.1 几个假设
这里我们做几个假设#xff1a;
每个用户有80%的概率连接最近的基站#xff0c;有20%的概率选择其他的基站连…1 问题描述 已知用户实际的轨迹和基站的位置能不能得到用户所连接的基站以及基站的信号强度RSRP
1.1 几个假设
这里我们做几个假设
每个用户有80%的概率连接最近的基站有20%的概率选择其他的基站连接 其他的基站不会太远离用户的位置用户300m内的某个基站至于计算RSRP: 而路径距离这里我们采用‘Urban Area Path loss Propagation Prediction and Optimisation Using Hata Model at 800MHz’论文里面提及的Okumura-Hata公式 A,B是根据功率强度f决定的 L是路径损耗dBF是频率MHzhBS是基站天线高度m)hMS是手机高度(m)d是手机和基站的距离km为了进行计算我们需要知道基站的发射功率、天线增益以及使用的频率。 由于这些信息通常不会公开我们将假设一些标准值 基站的发射功率为35瓦天线增益为10dBi用户设备的天线增益为0dBi使用的频率为2.1GHz2100MHz天线高度 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 读取数据 cellpd.read_csv(celltable.csv)cell 2.1.2 筛选基站Cell ID去重
cellcell[cell[Network System]LTE]
cell cellcell.drop_duplicates(subsetCell ID,keepfirst)
cell 2.2 将经纬度转化成Web Mercator坐标
2.2.1 经纬度至Web墨卡托 转化方法
地理知识墨卡托坐标系-CSDN博客 def lonlat_to_Mercator_(lon,lon_y):xlon*20037508.34/180ymath.log(math.tan((90 lon_y) * math.pi / 360)) / (math.pi / 180)yy*20037508.34/180 return x,y
def Webmercater2latlon(mer_x,mer_y):lon_xmer_x/20037508.34*180lon_ymer_y/20037508.34*180lon_y180/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]),axis1))
cellcell[[Cell ID,mer_x,mer_y,Site Name,Site Address]]
cell 2.2.3 去除重复位置
cellcell.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_mercatorarray([[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_nearest0.8
#多少比例的数据
radius300
#距离用户多近的基站可以被考虑 for location_mercator in user_locations_mercator:#对于用户轨迹的每一个点dist_mercator, ind_mercator tree_mercator.query([location_mercator], k1)#通过基站的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_mercatornearest_cell_mercatorelse:connected_cells_mercatorpd.concat([connected_cells_mercator,nearest_cell_mercator])#基站对应的那一行加入返回的DataFrame中else:indices_mercator tree_mercator.query_radius([location_mercator], rradius)[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_mercatornearest_cell_mercatorelse:connected_cells_mercatorpd.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_mercatorrandom_cell_mercatorelse:connected_cells_mercatorpd.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]),axis1))
connected_cells_mercator 5 可视化用户轨迹和对应的基站轨迹
connected_cellsconnected_cells_mercator[[lat,lon]].values
import foliummfolium.Map(location[1.341505, 103.682498],zoom_start14)for i in range(len(connected_cells)):folium.Marker(connected_cells[i],iconfolium.Icon(iconwifi,prefixfa,colorred,icon_coloryellow)).add_to(m)for i in range(len(user_points)):folium.Marker(user_points[i],iconfolium.Icon(iconphone,prefixfa,colorgreen,icon_colorblue)).add_to(m)
folium.PolyLine(user_points,colorgreen).add_to(m)
folium.PolyLine(connected_cells,colorred).add_to(m)
m 6 估算RSRP
6.1 假设和原理回顾 计算RSRP: 而路径距离这里我们采用‘Urban Area Path loss Propagation Prediction and Optimisation Using Hata Model at 800MHz’论文里面提及的Okumura-Hata公式 A,B是根据功率强度f决定的 L是路径损耗dBF是频率MHzhBS是基站天线高度m)hMS是手机高度(m)d是手机和基站的距离km为了进行计算我们需要知道基站的发射功率、天线增益以及使用的频率。 由于这些信息通常不会公开我们将假设一些标准值 基站的发射功率为35瓦天线增益为10dBi用户设备的天线增益为0dBi使用的频率为2.1GHz2100MHz天线高度 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_h30 #基站天线高度
antenna_u1.6 #手机高度
6.3 计算路径损失的函数
def calclate_pl(distance_m,freq_mhz):path_loss46.339.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_valueconnected_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 dBmGood Signal: -81 dBm to -90 dBmFair Signal: -91 dBm to -100 dBmPoor Signal: -101 dBm to -110 dBmVery Poor Signal: -111 dBm to -120 dBmNo Signal: -121 dBm to -140 dBm
可以看到大部分信号都在excellent 和good 之间