用于读取、分析和处理剖析激光雷达观测的 Python 工具箱。
项目描述
昙花一现
托布洛
用于分析激光雷达观测数据和相关气象数据的工具箱
恢复
工具箱,用于从多普勒光束摆动模式 (DBS) 下的激光雷达剖面剖面观测中检索 3D 风矢量。在检索模块的当前状态下,需要准备径向(LOS)速度观测的输入。对于所有功能,需要仔细准备 LOS 速度输入,以使 LOS 速度输入与所使用的激光雷达系统的坐标和检索坐标系的坐标一致。检索坐标系中的每一个波束都对应一个特定的方位角和天顶角:
方位角,a,单位 = 度
指向以下方向的激光雷达光束
(x,y) = ( 1, 0) : a = 180
(x,y) = ( 0, 1) : a = 270
(x,y) = (-1, 0) : a = 0
(x,y) = ( 0,-1) : a = 90
天顶,z,单位 = 度
天顶角对应于 DBS 的锥角(例如 z=28 度)或向上指向(z=0)
使用检索模块的示例:模拟安装在移动平台上的激光雷达的风速系列
导入必要的 python 模块
from oblopy.retrieval import *
import numpy as np
import pandas as pd
制作样本速度向量
定义一系列时间戳
time = np.arange(0,40*np.pi, 0.1)
定义 3 个风速分量(人工)
u = 2*(np.cos(time*2.5)+np.cos(time*1.5)+np.sin(time/2.5)+np.cos(time/3.5))+np.random.rand(len(time))*2
v = -2*(np.cos(time*3.5)+np.sin(time*1.5)+np.sin(time/3.5)-np.cos(time/4.5))-np.random.rand(len(time))*2
w = np.cos((time-np.pi)/2*3.5)-np.random.randn(len(time))*0.5
定义一系列滚动俯仰和偏航角
注意:如果您不想在检索中包括运动角度和相应的校正,请将滚动、俯仰和偏航系列设置为零
定义运动角度(人工)
roll = np.ones(len(time))
pitch = -np.ones(len(time)) + 10
yaw = np.zeros(len(time)) + 45
获取对应的旋转矩阵
R = get_R(roll, pitch, yaw, time, order = 'zyx')
旋转模拟风速矢量
vec_u_ = multi_dim_matrix_mult(R,vec_u,time)
u_ = vec_u_[0,0,:]
v_ = vec_u_[1,0,:]
w_ = vec_u_[2,0,:]
制作样本径向速度矢量
检索的输入应该是类似的类型。光束数量可自由选择。光束由方位角和天顶坐标分开。梁需要按如下方式组织在 pandas DataFrame 中。列的命名(对应于一个梁的时间序列)是免费的。
定义 DBS 扫描的锥角
theta = np.deg2rad(28)
B1:指向相反的 x 方向 (az=0, ze = 28)
B1 = pd.DataFrame({'B1':u_[0::5]*np.sin(theta)+w_[0::5]*np.cos(theta)}, index = time[0::5])
B2:指向相反的 y 方向(az=90,ze = 28)
B2 = pd.DataFrame({'B2':v_[1::5]*np.sin(theta)+w_[1::5]*np.cos(theta)}, index = time[1::5])
B3:指向 x 方向 (az=180, ze = 28)
B3 = pd.DataFrame({'B3':-u_[2::5]*np.sin(theta)+w_[2::5]*np.cos(theta)}, index = time[2::5])
B4:指向相反的 x 方向 (az=270, ze = 28)
B4 = pd.DataFrame({'B4':-v_[3::5]*np.sin(theta)+w_[3::5]*np.cos(theta)}, index = time[3::5])
B5:垂直指向波束(az=*,ze=0),这里方位角的选择是自由的
B5 = pd.DataFrame({'B5':w_[4::5]}, index = time[4::5])
定义相应的方位角和天顶列表。
注意:需要与使用的梁数量相同的长度
az = [0,90,180,270,0]
ze = [28,28,28,28,0]
创建一个包含所有已定义光束的时间序列的 pandas DataFrame
all_beams = pd.DataFrame(index=time)
all_beams['B1'] = B1.copy()
all_beams['B2'] = B2.copy()
all_beams['B3'] = B3.copy()
all_beams['B4'] = B4.copy()
all_beams['B5'] = B5.copy()
检索样本径向速度矢量
通过船速校正光束。
corr_beams = correct_LOS_vel(all_beams.interpolate(method='pchip'), u_plat, az = az, ze = ze)
检索 3D 速度矢量。
retr_int = DBS_least_squares_retrieval(corr_beams, roll, pitch, yaw, az = az, ze = ze, rot=True, order = 'xyz')