定位python仿真相关

高斯噪声是指它的概率密度函数服从高斯分布的一类噪声。

高斯分布,也称正态分布,又称常态分布,记为N(μ,σ^2),其中μ,σ^2为分布的参数,分别为高斯分布的期望和方差。当有确定值时,p(x)也就确定了,特别当μ=0,σ^2=1时,X的分布为标准正态分布

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。

 

numpy.random.randn(row, col)是从标准正态分布中返回一个或多个样本值。 
numpy.random.rand(row, col)的随机样本位于[0, 1)中。 
random.seed(0)作用:使得随机数据可预测,即只要seed的值一样,后续生成的随机数都一样。

画直方图:
 matplotlib.pyplot.hist(  
    x, bins=10, range=None, normed=False,  color=None, label=None) 
x : 这个参数是指定每个bin(箱子)分布的数据,对应x轴
bins : 这个参数指定bin(箱子)的个数,也就是总共有几条条状图
normed : boolean, optional,这个参数指定密度,也就是每个条状图的占比例比,默认为1,y轴值的比例
color : 这个指定条状图的颜色 

 

你可以多次使用figure命令来产生多个图,其中,图片号按顺序增加。

plt.figure(1)  子图只需要创建一次或者序号相同创建
 
#coding:utf-8

import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np

def histFigure():
    mu, sigma = 0, 1
    sampleNo = 100000
    np.random.seed(0)
    s = np.random.normal(mu, sigma, sampleNo)

    plt.hist(s, bins=100, normed=True, color="green")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.text(-4, 0.30, r'$\mu=0,\ \sigma=1$')#在x轴-4, y轴0.30开始加入说明
    plt.title("title of relationship of x and y")
    plt.show()

def subFigure():
    x = np.arange(-5.0, 5.0, 0.02)
    y1 = np.sin(x)
    plt.figure(1)
    plt.subplot(211)
    plt.axis([-5, 5, -2, 2])#设置x,y坐标范围
    plt.xlim((-3, 3))#另一种设置坐标区间的方法
    plt.plot(x, y1)

    plt.subplot(212)
    #设置x轴范围
    plt.xlim(-2.5, 2.5)
    #设置y轴范围
    plt.ylim(-1, 1)
    plt.plot(x, y1)
    plt.show()

def mulFigure():
    x = np.arange(0, 5, 0.2)
    y1 = x
    y2 = x**2 #平方
    y3 = x**3

    plt.plot(x, y1, 'r.', label="x")
    plt.plot(x, y2, 'bs', label="x^2")
    plt.plot(x, y3, 'g^', label="x^3")

    plt.legend(loc="upper left")
    plt.show()

def scatterFigure():
    x = np.random.uniform(1, 10, size=(1, 10))
    y = np.random.uniform(1, 10, size=(1, 10))
    print x
    print y
    plt.scatter(x, y, color = 'blue')
    plt.plot(x, y, color = 'green')
    plt.show()
scatterFigure()

 

### 室内定位算法的Python仿真实现 #### RSSI定位原理概述 RSSI(接收信号强度指示)用于估计发射器和接收器之间的距离。由于信号传播过程中会受到环境因素的影响,因此通常采用多点测量并结合一定的数学模型来进行位置估算[^1]。 #### 基于RSSI的室内定位算法Python实现 下面是一个简单的基于最小二乘法的RSSI定位算法Python实现案例: ```python import numpy as np from scipy.optimize import least_squares def rssi_to_distance(rssi, n=2.0, A=-45): """ 将RSSI转换成距离 """ return 10 ** ((A - rssi) / (10 * n)) def distance_model(params, anchor_positions, rssis): """ 计算预测的距离误差 """ x, y = params distances_pred = [] for i in range(len(anchor_positions)): dx = x - anchor_positions[i][0] dy = y - anchor_positions[i][1] d = np.sqrt(dx**2 + dy**2) distances_pred.append(d) residuals = np.array(distances_pred) - rssis return residuals.flatten() # 锚节点坐标(单位:m),可以根据实际情况调整 anchor_positions = [ [0, 0], [0, 10], [10, 10], ] # 对应锚节点测得的RSSI值 rssis_dbm = [-60, -58, -70] # 转换成实际距离 measured_distances = list(map(lambda rssi: rssi_to_distance(rssi), rssis_dbm)) initial_guess = [5, 5] # 初始猜测位置 result = least_squares(distance_model, initial_guess, args=(anchor_positions, measured_distances)) estimated_position = result.x.tolist() print(f'Estimated Position: {estimated_position}') ``` 此代码片段展示了如何使用三个已知坐标的参考点(称为“锚点”),以及它们对应的RSSI读数来计算未知目标的大致二维平面坐标。这里采用了最小二乘拟合的方法求解最优解。 #### 可视化结果 为了更好地理解定位效果,可以借助Matplotlib库绘制图形表示各个锚点及其与估计位置的关系图: ```python import matplotlib.pyplot as plt plt.figure(figsize=(6, 6)) for pos in anchor_positions: plt.scatter(pos[0], pos[1], c='blue', marker='o') plt.scatter(*estimated_position, c='red', marker='x') for i in range(len(anchor_positions)): circle = plt.Circle((anchor_positions[i]), measured_distances[i], color='g', fill=False) ax = plt.gca() ax.add_artist(circle) plt.xlim(-2, 12) plt.ylim(-2, 12) plt.grid(True) plt.show() ``` 上述绘图部分会在图表上标记出所有的锚定点,并用绿色圆圈展示各点到预估位置的实际测量范围;红色叉号则代表最终得到的目标位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值