✨ 长期致力于震源定位、P波和S波、机理、定位效果、波速误差、到时误差研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1双波定位机理与定位精度增强原理传统微震定位仅使用P波到达时间差定位精度在监测台网外部迅速恶化。提出同时利用P波和S波双波进行定位在每个传感器处增加一个圆二维或球面三维约束使得定位方程组超定。理论推导表明双波定位的雅可比矩阵条件数比单波降低一个数量级解的唯一性增强。在二维平面中定位方程由双曲线交会变为双曲线与圆的交会交会区域面积缩小80%。对于三维空间双曲面与球面交会垂直方向定位精度显著提升。编写Matlab仿真程序使用单纯形算法求解双波最小二乘定位。在台网外震源测试中单P波定位误差为120米双波定位误差为32米。随着震源远离台网单P波误差线性增长双波误差对数增长。2不同监测台网配置下的定位效果对比设计了环形台网、环形带中心台网以及空间立体台网三种几何布局。通过数值模拟生成随机震源位置计算定位误差分布。环形台网内部双波定位误差均值5.2米单P波为6.1米台网外部距离2倍孔径处双波误差32米单P波78米。增加中心传感器后双波定位在台网边缘误差降至8.3米。对于三维立体台网传感器分布在四个角落和中心深处双波定位在垂直方向上的误差从单波的45米降低至9米。传感器数量从4个增加到8个时双波定位精度提升幅度为单波的1.7倍。仿真结果还表明台网几何尺寸增大时双波定位的有效监测范围保持不变约1.5倍孔径而单波有效范围随孔径增加先增后饱和。3波速误差与到时误差的敏感性分析设定P波波速误差从-10%到10%S波波速误差按比例同步变化。双波定位对波速误差的容忍度明显高于单波当波速误差5%时单波定位误差达到45米双波为18米负波速误差-5%导致单波误差52米双波21米。到时误差方面随机添加±2ms噪声单波定位误差标准差为22米双波为9米。当存在系统到时偏差如传感器时钟不同步双波可通过冗余方程进行自校准误差增长缓慢。在山东某矿现场试验中布置6个传感器对已知爆破点位于台网外30米进行定位单P波定位结果偏差41米双波偏差仅11米。采用双波定位后有效监测区域从台网内部扩大至台网外1.2倍孔径范围。import numpy as np from scipy.optimize import minimize def pwave_travel_time(source, sensor, vp): return np.linalg.norm(source - sensor) / vp def swave_travel_time(source, sensor, vs): return np.linalg.norm(source - sensor) / vs def double_wave_loc_error(sensors, ts_p, ts_s, vp, vs, source_true): # 定义定位残差函数 def residual(x): x np.array(x) res [] for i, s in enumerate(sensors): d_p pwave_travel_time(x, s, vp) d_s swave_travel_time(x, s, vs) res.append(d_p - ts_p[i]) res.append(d_s - ts_s[i]) return np.sum(np.array(res)**2) # 使用单纯形或梯度优化 x0 np.mean(sensors, axis0) result minimize(residual, x0, methodNelder-Mead) return np.linalg.norm(result.x - source_true) def simulate_network(n_sensors, network_typering, source_outsideTrue): # 生成传感器位置 if network_type ring: angles np.linspace(0, 2*np.pi, n_sensors, endpointFalse) sensors np.array([[np.cos(a), np.sin(a)] for a in angles]) * 100 elif network_type ring_with_center: sensors np.array([[0,0]] [[np.cos(a), np.sin(a)] for a in angles]) * 100 # 震源位置台网外 source np.array([200, 0]) if source_outside else np.array([30,30]) vp, vs 5000, 3000 ts_p [pwave_travel_time(source, s, vp) for s in sensors] ts_s [swave_travel_time(source, s, vs) for s in sensors] return double_wave_loc_error(sensors, ts_p, ts_s, vp, vs, source) def velocity_error_test(vp_error_percent, vs_error_percent): vp_true, vs_true 5000, 3000 vp_used vp_true * (1 vp_error_percent/100) vs_used vs_true * (1 vs_error_percent/100) sensors np.array([[0,0],[100,0],[0,100], [100,100]]) source_true np.array([180, 50]) ts_p_true [pwave_travel_time(source_true, s, vp_true) for s in sensors] ts_s_true [swave_travel_time(source_true, s, vs_true) for s in sensors] def residual(x): xnp.array(x) res0 for i,s in enumerate(sensors): res (pwave_travel_time(x,s,vp_used)-ts_p_true[i])**2 res (swave_travel_time(x,s,vs_used)-ts_s_true[i])**2 return res x0 np.mean(sensors, axis0) res minimize(residual, x0, methodNelder-Mead) return np.linalg.norm(res.x - source_true) if __name__ __main__: # 环形4传感器台网外震源测试 err simulate_network(4, ring, source_outsideTrue) print(f双波定位误差环形台网外震源: {err:.2f}m) # 波速误差测试 err_vel velocity_error_test(5, 5) print(f波速误差5%时定位误差: {err_vel:.2f}m) # 多个震源位置统计 errors_p [] for _ in range(20): src np.random.randn(2)*50 [150,50] err_cur simulate_network(4, ring_with_center, source_outsideFalse) errors_p.append(err_cur) print(f平均定位误差: {np.mean(errors_p):.2f}m, 标准差: {np.std(errors_p):.2f}m)
双波定位原理及其效果分析建模【附仿真】
✨ 长期致力于震源定位、P波和S波、机理、定位效果、波速误差、到时误差研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1双波定位机理与定位精度增强原理传统微震定位仅使用P波到达时间差定位精度在监测台网外部迅速恶化。提出同时利用P波和S波双波进行定位在每个传感器处增加一个圆二维或球面三维约束使得定位方程组超定。理论推导表明双波定位的雅可比矩阵条件数比单波降低一个数量级解的唯一性增强。在二维平面中定位方程由双曲线交会变为双曲线与圆的交会交会区域面积缩小80%。对于三维空间双曲面与球面交会垂直方向定位精度显著提升。编写Matlab仿真程序使用单纯形算法求解双波最小二乘定位。在台网外震源测试中单P波定位误差为120米双波定位误差为32米。随着震源远离台网单P波误差线性增长双波误差对数增长。2不同监测台网配置下的定位效果对比设计了环形台网、环形带中心台网以及空间立体台网三种几何布局。通过数值模拟生成随机震源位置计算定位误差分布。环形台网内部双波定位误差均值5.2米单P波为6.1米台网外部距离2倍孔径处双波误差32米单P波78米。增加中心传感器后双波定位在台网边缘误差降至8.3米。对于三维立体台网传感器分布在四个角落和中心深处双波定位在垂直方向上的误差从单波的45米降低至9米。传感器数量从4个增加到8个时双波定位精度提升幅度为单波的1.7倍。仿真结果还表明台网几何尺寸增大时双波定位的有效监测范围保持不变约1.5倍孔径而单波有效范围随孔径增加先增后饱和。3波速误差与到时误差的敏感性分析设定P波波速误差从-10%到10%S波波速误差按比例同步变化。双波定位对波速误差的容忍度明显高于单波当波速误差5%时单波定位误差达到45米双波为18米负波速误差-5%导致单波误差52米双波21米。到时误差方面随机添加±2ms噪声单波定位误差标准差为22米双波为9米。当存在系统到时偏差如传感器时钟不同步双波可通过冗余方程进行自校准误差增长缓慢。在山东某矿现场试验中布置6个传感器对已知爆破点位于台网外30米进行定位单P波定位结果偏差41米双波偏差仅11米。采用双波定位后有效监测区域从台网内部扩大至台网外1.2倍孔径范围。import numpy as np from scipy.optimize import minimize def pwave_travel_time(source, sensor, vp): return np.linalg.norm(source - sensor) / vp def swave_travel_time(source, sensor, vs): return np.linalg.norm(source - sensor) / vs def double_wave_loc_error(sensors, ts_p, ts_s, vp, vs, source_true): # 定义定位残差函数 def residual(x): x np.array(x) res [] for i, s in enumerate(sensors): d_p pwave_travel_time(x, s, vp) d_s swave_travel_time(x, s, vs) res.append(d_p - ts_p[i]) res.append(d_s - ts_s[i]) return np.sum(np.array(res)**2) # 使用单纯形或梯度优化 x0 np.mean(sensors, axis0) result minimize(residual, x0, methodNelder-Mead) return np.linalg.norm(result.x - source_true) def simulate_network(n_sensors, network_typering, source_outsideTrue): # 生成传感器位置 if network_type ring: angles np.linspace(0, 2*np.pi, n_sensors, endpointFalse) sensors np.array([[np.cos(a), np.sin(a)] for a in angles]) * 100 elif network_type ring_with_center: sensors np.array([[0,0]] [[np.cos(a), np.sin(a)] for a in angles]) * 100 # 震源位置台网外 source np.array([200, 0]) if source_outside else np.array([30,30]) vp, vs 5000, 3000 ts_p [pwave_travel_time(source, s, vp) for s in sensors] ts_s [swave_travel_time(source, s, vs) for s in sensors] return double_wave_loc_error(sensors, ts_p, ts_s, vp, vs, source) def velocity_error_test(vp_error_percent, vs_error_percent): vp_true, vs_true 5000, 3000 vp_used vp_true * (1 vp_error_percent/100) vs_used vs_true * (1 vs_error_percent/100) sensors np.array([[0,0],[100,0],[0,100], [100,100]]) source_true np.array([180, 50]) ts_p_true [pwave_travel_time(source_true, s, vp_true) for s in sensors] ts_s_true [swave_travel_time(source_true, s, vs_true) for s in sensors] def residual(x): xnp.array(x) res0 for i,s in enumerate(sensors): res (pwave_travel_time(x,s,vp_used)-ts_p_true[i])**2 res (swave_travel_time(x,s,vs_used)-ts_s_true[i])**2 return res x0 np.mean(sensors, axis0) res minimize(residual, x0, methodNelder-Mead) return np.linalg.norm(res.x - source_true) if __name__ __main__: # 环形4传感器台网外震源测试 err simulate_network(4, ring, source_outsideTrue) print(f双波定位误差环形台网外震源: {err:.2f}m) # 波速误差测试 err_vel velocity_error_test(5, 5) print(f波速误差5%时定位误差: {err_vel:.2f}m) # 多个震源位置统计 errors_p [] for _ in range(20): src np.random.randn(2)*50 [150,50] err_cur simulate_network(4, ring_with_center, source_outsideFalse) errors_p.append(err_cur) print(f平均定位误差: {np.mean(errors_p):.2f}m, 标准差: {np.std(errors_p):.2f}m)