内容摘要:为解决流动重力观测仪器数量多,周期长漂移率复杂等问题,Geoist团队研发了贝叶斯平差方法。该方法适用于不同仪器方差未知,绝对重力和多台相对重力联合观测的数据处理问题。根据观测时间长短可以分为线性漂移模型和非线性漂移模型两种。今天我们谈谈Geoist的gravity模块,如何完成具有大量冗余观测条件下的重力平差任务。
1、重力平差
地震重力测量核心目标是获取高精度时变重力信号。现有陆基重力观测仪器以弹簧型相对型重力仪为主,由于测点之间地理跨度大,一般双程闭合时间长,如果要获得高精度重力测量结果,需要考虑仪器的非线性漂移特性等问题。
Geoist团队基于贝叶斯原理,提出了一种改进的重力平差算法,假设仪器的漂移率光滑是已知的先验信息,并根据贝叶斯统计学方法估计最优化参数,提出了一种专用于改进现在广泛应用的线性漂移平差模型,并完成了可以用于最优估计仪器非线性漂移特性的新平差算法设计。
重力平差在概念上与水准平差类似,但是原理上不同,因为相对重力仪测量的段差具有独立性,平差最重要的是对仪器漂移率进行最优估计。
对于水准测量必须知道每个段差才能计算。举个例子,假设水准测量中间一个数据丢失了,后续平差无法开展。而重力不一样中间去掉几个测量数据,还是可以形成新的段差组合,平差不受影响。
2、经典平差
经典平差是相对于测网内固定的起算点,根据往返闭合差进行的点值估计工作。在经典重力平差中,每台仪器的漂移率一般假定为线性。根据实际测量点的顺序和时间,可以构成平差方程,采用最小二乘即可估计每个点值。
3、Geoist的平差功能
Geoist的gravity模块实现了多种平差方法,包括经典平差,贝叶斯平差等。graobj里面是平差计算中用到的类定义与接口实现。adjmethods是不同平差方法实现部分。
import geoist.gravity.graobj as gg
import geoist.gravity.adjmethods as adj
在gravity模块中,平差过程需要仪器、测网、测量和工程四个主要类,分别表示为Meter类,Network类,Survey类和Campaign类。在平差前,需要生成每个类的实例,比如用到两台重力仪,就需要用Meter类生成两个实例。Network是测网,通常是我们所说的点之记,里面根据点的编号,存储了每个测点的经纬度、名称等信息。Survey是一次测量,实例化后,可以将不同仪器、测网和观测文件添加进去。最后,通过实例化Campaign类,来调用平差方法,实例化后的Campaign可以添加Survey进去,比如一期测量,由多个野外队完成,先应该生成不同的Survey,然后再统一的添加到Campaign中,再开始平差。
注意,要进行平差,必须要生成Campaign的实例,然后正确地导入数据后,才可以开始计算。下面是一段示例代码:
m1 = gg.Meter('CG-5','C098')
m1.msf = 1.00009
m2 = gg.Meter('CG-5','C099')
m2.msf = 1.000637
m3 = gg.Meter('CG-5','C097')
m3.msf = 1.000163
m4 = gg.Meter('CG-5','C098')
m4.msf = 1.00009
n1 = gg.Network('NorthChina',1)
n1.read_pnts('./data/SDQSX8.DZJ')
print(n1)
s1 = gg.Survey('DQSW+SX', '201508')
s1.add_meter(m1)
s1.add_meter(m2)
s1.add_meter(m3)
s1.add_meter(m4)
s1.net = n1
s1.read_survey_file('./data/QSCW201508p.098')
s1.read_survey_file('./data/QSCW201508p.099')
s1.read_survey_file('./data/SXCW971508p.ori')
s1.read_survey_file('./data/SXCW981508p.ori')
s1.corr_aux_effect()
print(s1)
#查找一个测量工程中某个测点号对应的坐标
slon, slat, selev = s1._get_pnt_loc('11003902')
#查找一个测量工程中某台重力仪的格值
sf_val = s1._get_meter_sf('C097')
ag1 = gg.AGstation('白山洞绝对','11014121','A', 116.169, 40.018, 212.5)
ag1.ref_gra = 1110.54453
ag1.ref_gra_err = 5.0E-3
gravwork = gg.Campaign('IGP201604', 1)
gravwork.add_ag_sta(ag1) #添加绝对点信息 可以添加多次
gravwork.add_surveys(s1) #添加测量到平差任务
print(gravwork)
#开始平差pre_adj是完成从观测文件重,生成平差矩阵的
gravwork.adj_method = 1 #1:cls ; 2:Baj; 3:Baj1
gravwork.pre_adj()
gravwork.run_adj('./data/grav_cls.txt',3)
一句话总结:Geoist提供的平差方法对点之记,观测文件都有一定的格式要求。后面我们会一点点介绍,通过7次课,将主要的平差程序使用方法介绍完,每次课的内容也会不定期进行修改和完善,力争做到图文并茂,通俗易懂。
网友评论