尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

面波处理与剖面连接:从频散曲线稳定提取到二维Vs剖面生成

面波处理与剖面连接:从频散曲线稳定提取到二维Vs剖面生成 简介本资源是面向地球物理勘探从业者与高校科研人员的专业级面波处理工具包聚焦浅层地质结构解析与速度剖面建模两大核心任务适用于地震灾害评估、工程地质勘察及教学实践等场景。压缩包共91个文件总大小1.8MB包含7个可执行程序CCSWSWIN、CCSWSMAP等主程序、18个HTM帮助文档与30个GIF操作示意图辅以BMP界面图、SYS/VXD驱动文件及DOC使用说明完整覆盖软件安装、加密狗驱动配置、数据导入、相位解缠、频散曲线提取、多测线剖面连接与速度分层反演全流程。已有911人学习下载资源结构高度工程化既有底层驱动如GSDOG.VXD、HOSTNT.SYS与系统配置CONFIG.SYS、HIMEM.SYS也有图形界面资源SwsGr*.bmp、ZmBtns.bmp和分步式HTML帮助系统CSH*.HTM、SWSmap*.htm便于用户从部署到建模逐层掌握。1. 面波处理及剖面连接软件为什么野外采集的瑞利波频散曲线总对不上、剖面拼不齐你刚跑完一条 2km 的 MASW多道面波分析测线现场用某商业软件生成了频散图像挑了 5 条曲线手动拾取导出 CSV 后发现同一位置不同道组拾取的相速度差 15%换到隔壁测线相同偏移距的频散能量团明显右移——不是仪器没校准是面波处理流程里藏着三个“静默断点”频散图像质量依赖窗长与重叠率的非线性耦合、自动拾取在低信噪比段必然漂移、而更致命的是——多条测线生成的独立频散数据集根本没统一坐标系、没对齐时间零点、没校正近地表倾角直接丢进反演软件等于把五张不同比例尺、不同旋转角度、不同高程基准的地图硬叠在一起画地质解释。这就是「面波处理及剖面连接软件」要解决的真实问题它不是单点工具比如只做 f-k 变换或只做 SVD 滤波而是一套闭环工作流——从原始地震记录中稳定提取物理可解释的频散曲线再通过空间约束将离散测线升维为连续二维/三维剪切波速剖面。适合工程物探一线人员、浅层地震反演工程师、以及需要交付合规岩土参数报告的勘察单位技术负责人。如果你还在用 Excel 手动对齐测线坐标、用 Photoshop 裁剪频散图再拼接、靠经验“目估”相邻测线速度突变是否合理——这套软件不是锦上添花是止损刚需。2. 面波频散曲线稳定提取从原始记录到物理可解释曲线的三道过滤面波处理的核心矛盾在于有效信号能量弱、频带窄、易受体波/随机噪声干扰而反演对相速度误差容忍度极低3% 即导致 Vs30 偏差 15%。市面上多数软件把 FFT f-k 变换当黑匣子但实际项目中80% 的翻车源于前处理参数与地质条件错配。我们拆解为三道必须人工干预的过滤环节并给出可复现的参数边界。2.1 预处理用时频域联合门限压制体波而非简单切除体波P/S 波在面波频段内形成强干扰尤其在近偏移距10m和低频端5Hz。单纯设置时间门time gate会误切面波初至而仅用频率滤波又无法分离同频体波。正确做法是构建时频掩膜Time-Frequency Maskimport numpy as np from scipy.signal import stft, istft def apply_tf_mask(trace, fs500, nperseg256, noverlap128, t_start0.05, t_end0.3, f_low3, f_high30): 对单道地震记录施加时频掩膜保留 t_start~t_end 时间窗内、f_low~f_high 频带的能量 参数说明 - fs: 采样率Hz必须与实际采集一致 - nperseg: STFT 窗长点数影响时间分辨率建议 128~512此处取 256 平衡精度 - noverlap: 窗重叠点数50% 提升频散能量连续性128 是 256 的 50%已足够 - t_start/t_end: 面波有效时间窗秒需根据初至时间面波群速度估算例10m 偏移距Vs≈200m/s → 初至≈0.05s面波主体≈0.08~0.25s - f_low/f_high: 面波主频带Hz由震源类型决定锤击3~40Hz落重2~20Hz f, t, Zxx stft(trace, fsfs, npersegnperseg, noverlapnoverlap, return_onesidedTrue, boundaryNone) # 构建掩膜时间窗内且频带内置 1其余为 0 mask np.zeros(Zxx.shape) t_idx (t t_start) (t t_end) f_idx (f f_low) (f f_high) mask[np.ix_(f_idx, t_idx)] 1.0 # 应用掩膜并重构时域信号 _, trace_filtered istft(Zxx * mask, fsfs, npersegnperseg, noverlapnoverlap) return trace_filtered # 示例处理第 12 道索引 11采样率 500Hz面波主体在 0.08~0.22s主频 4~25Hz trace_12_clean apply_tf_mask(raw_data[11], fs500, t_start0.08, t_end0.22, f_low4, f_high25)逻辑说明STFT 将时域信号转为时频平面掩膜在该平面直接屏蔽体波占据的“时-频矩形区”避免传统时间门造成的相位畸变。关键参数t_start和t_end必须基于实测初至时间计算不能凭经验固定值——这是新手最常踩的坑用同一组时间窗处理所有偏移距导致远偏移距面波被误切。2.2 频散能量提取f-k 变换后必须做速度域重采样否则频散曲线失真f-k 变换输出的是波数 k 对频率 f 的能量谱但反演需要的是相速度 Vpf/k。直接取能量峰值对应的 (f,k) 计算 Vp会因 k 域采样不均导致低频段 Vp 系统性偏高k 值小微小 k 误差放大为大 Vp 误差。解决方案是将 f-k 谱重采样到均匀的 Vp-f 网格import numpy as np from scipy.interpolate import griddata def fk_to_vp_spectrum(fk_energy, f_vec, k_vec, vp_min100, vp_max800, vp_step10, f_step1.0): 将 f-k 能量谱重采样为 Vp-f 谱相速度-频率谱 输入 - fk_energy: 2D array, shape (len(k_vec), len(f_vec)), f-k 能量矩阵 - f_vec: 1D array, 频率向量Hz - k_vec: 1D array, 波数向量rad/m 输出 - vp_f_energy: 2D array, shape (len(vp_vec), len(f_vec)), Vp-f 能量矩阵 - vp_vec: 1D array, 相速度向量m/s - f_vec_out: 1D array, 重采样后频率向量与输入一致仅用于对齐 # 构建原始 f-k 网格的 Vp 值Vp f / k注意 k0 处跳过 k_nonzero k_vec[k_vec ! 0] f_grid, k_grid np.meshgrid(f_vec, k_nonzero, indexingij) vp_grid f_grid / k_grid # shape (len(f_vec), len(k_nonzero)) # 展平为散点数据 points np.column_stack((vp_grid.ravel(), f_grid.ravel())) values fk_energy[np.ix_(np.where(k_vec ! 0)[0], range(len(f_vec)))].ravel() # 定义目标 Vp-f 网格 vp_vec np.arange(vp_min, vp_max vp_step, vp_step) f_vec_out np.arange(f_vec[0], f_vec[-1] f_step, f_step) vp_grid_out, f_grid_out np.meshgrid(vp_vec, f_vec_out, indexingij) # 双线性插值重采样 vp_f_energy griddata(points, values, (vp_grid_out, f_grid_out), methodlinear, fill_value0) return vp_f_energy, vp_vec, f_vec_out # 示例对 f-k 谱shape: 256x128重采样到 Vp100~800m/s步长 10、f2~40Hz步长 1Hz vp_f_energy, vp_axis, f_axis fk_to_vp_spectrum( fk_result, f_freqs, k_wavenumbers, vp_min150, vp_max750, vp_step5, f_step0.5 )参数说明vp_step5是精度与计算量的平衡点——步长 10m/s 会导致频散曲线锯齿化影响后续自动拾取f_step0.5保证低频段8Hz有足够分辨率。重采样后频散能量在 Vp-f 平面呈连续“能量带”而非 f-k 平面的离散“能量点”这是稳定拾取的前提。2.3 自动拾取用动态阈值连续性约束替代全局阈值解决低信噪比段漂移传统方法用固定能量阈值如峰值的 30%提取频散曲线在噪声大的低频端5Hz或远偏移距段拾取点大量跳变。我们采用两阶段策略先用动态阈值粗选候选点再用速度连续性约束筛选def pick_dispersion_curve(vp_f_energy, vp_vec, f_vec, min_snr2.0, min_continuity0.9): 基于 Vp-f 能量谱的自动拾取 参数 - min_snr: 最小信噪比相对于局部背景噪声默认 2.0低噪环境可提至 3.0 - min_continuity: 最小速度连续性系数0~1值越高越抑制跳变建议 0.85~0.95 n_f, n_vp vp_f_energy.shape picks np.full(n_f, np.nan) # 初始化拾取结果 # 步骤1逐频率计算局部信噪比动态设定阈值 for i_f in range(n_f): energy_slice vp_f_energy[i_f, :] # 用中位数绝对偏差MAD估计背景噪声比标准差更鲁棒 noise_est 1.4826 * np.median(np.abs(energy_slice - np.median(energy_slice))) threshold min_snr * noise_est candidates np.where(energy_slice threshold)[0] if len(candidates) 0: continue # 步骤2在候选点中选择最接近前一频率拾取点的点连续性约束 if i_f 0: # 首频点选能量最大者 picks[i_f] vp_vec[np.argmax(energy_slice)] else: prev_vp picks[i_f-1] if not np.isnan(prev_vp): # 计算候选点与前一点的速度差归一化到当前 Vp 范围 vp_diff_norm np.abs(vp_vec[candidates] - prev_vp) / (vp_vec[-1] - vp_vec[0]) # 连续性得分 1 - 归一化差值取最高分者 scores 1.0 - vp_diff_norm valid_idx np.where(scores min_continuity)[0] if len(valid_idx) 0: best_candidate candidates[valid_idx[np.argmax(scores[valid_idx])]] picks[i_f] vp_vec[best_candidate] return picks # 示例拾取要求连续性不低于 0.88允许每 10Hz 有约 1 个点跳变 dispersion_curve pick_dispersion_curve(vp_f_energy, vp_vec, f_vec, min_continuity0.88)关键设计min_continuity0.88意味着允许相邻频率点间速度变化不超过 Vp 范围的 12%如 Vp 范围 600m/s则允许 72m/s 变化。这符合瑞利波频散物理规律——在均匀层状模型中相邻频率相速度变化通常 5%。若设为 0.95虽更平滑但易漏掉真实速度突变如基岩面设为 0.8则噪声点大量混入。这个参数必须根据场地地质复杂度调整软土区用 0.9基岩出露区用 0.85。3. 剖面连接从离散测线到连续二维剪切波速剖面的空间对齐与插值单条测线产出的是“一维频散曲线→一维 Vs 剖面”但工程勘察需要的是覆盖整个工区的二维/三维 Vs 剖面。直接将各测线反演结果按坐标拼接会因三大空间失配导致剖面断裂测线坐标系未统一施工坐标 vs GPS 坐标、测线倾角未校正地形起伏导致深度标定偏差、测线间距大于面波探测半径导致横向信息缺失。“剖面连接”不是图像拼接而是基于地球物理约束的空间重建。3.1 坐标与高程统一用控制点强制约束而非简单投影转换野外施工坐标如地方独立坐标系与 GPS 坐标存在系统性偏移可达 2~5m且各测线高程基准不一部分用 GPS 高程部分用水准点。若直接导入 GIS 软件拼接剖面会出现“阶梯状错位”。正确做法是在每条测线两端布设 ≥2 个已知坐标的控制点全站仪实测用仿射变换Affine Transform统一到同一坐标系import numpy as np from sklearn.linear_model import LinearRegression def align_survey_line(control_points_local, control_points_global): 用控制点对local→global计算仿射变换矩阵 输入 - control_points_local: N×2 array, [x_local, y_local]至少 3 个点 - control_points_global: N×2 array, [x_global, y_global] 输出 - transform_matrix: 3×3 仿射矩阵用于后续坐标转换 # 构造增广矩阵 [x,y,1] → [x,y] X np.hstack([control_points_local, np.ones((len(control_points_local), 1))]) y_x control_points_global[:, 0] y_y control_points_global[:, 1] # 分别拟合 x 和 y 的线性关系 reg_x LinearRegression().fit(X, y_x) reg_y LinearRegression().fit(X, y_y) # 组装 3×3 仿射矩阵 [a,b,c; d,e,f; 0,0,1] transform_matrix np.array([ [reg_x.coef_[0], reg_x.coef_[1], reg_x.intercept_], [reg_y.coef_[0], reg_y.coef_[1], reg_y.intercept_], [0, 0, 1] ]) return transform_matrix # 示例测线 A 有 3 个控制点本地坐标及对应全局坐标 local_pts np.array([[10.2, 5.8], [102.5, 5.9], [205.1, 6.0]]) # 本地施工坐标 global_pts np.array([[384210.1, 3425670.2], [384312.3, 3425671.5], [384415.0, 3425672.8]]) # WGS84 UTM T_matrix align_survey_line(local_pts, global_pts) # 应用变换将整条测线坐标N×2转为全局坐标 line_coords_local np.column_stack([x_positions, np.zeros_like(x_positions)]) # 假设沿 x 轴布设 line_coords_local_aug np.hstack([line_coords_local, np.ones((len(line_coords_local), 1))]) line_coords_global (T_matrix line_coords_local_aug.T).T[:, :2]为什么不用 GIS 投影因为施工坐标系与大地坐标系的转换参数七参数通常未知且局部变形不可忽略。仿射变换用实测控制点强制约束误差可压至 0.1m这是剖面连接的精度底线。3.2 倾角校正用数字高程模型DEM修正深度标定避免“假基岩面”面波反演得到的是“深度 z”下的 Vs但此 z 是沿测线法向的垂直深度。若测线沿山坡布设坡度 5°未校正倾角会导致上坡段深度被高估实际浅层对应更大 z 值下坡段被低估拼接后出现虚假的“基岩面起伏”。校正需两步从 DEM 提取测线各点高程计算沿线坡度将反演深度 z 校正为真实垂向深度 z_true z × cos(θ)其中 θ 为该点坡度角。def correct_depth_for_slope(depth_profile, slope_degrees): 根据沿线坡度校正反演深度 输入 - depth_profile: 1D array, 反演得到的深度序列m长度 测点数 - slope_degrees: 1D array, 各测点处的坡度角度长度同上 输出 - depth_corrected: 校正后的垂向深度m slope_rad np.radians(slope_degrees) cos_theta np.cos(slope_rad) # 坡度为 0 时 cos1不校正坡度 10° 时 cos≈0.985深度缩小 1.5% depth_corrected depth_profile * cos_theta return depth_corrected # 示例测线有 100 个点已从 10m 分辨率 DEM 提取坡度 slope_profile np.array([...]) # 100 个坡度值度 vs_profile_2d np.array([...]) # 100×50 的 Vs 剖面100 点 × 50 深度层 depth_axis np.linspace(0, 30, 50) # 原始深度轴0~30m # 对每个深度层校正 depth_corrected correct_depth_for_slope(depth_axis, slope_profile[0]) # 假设坡度沿测线均匀 # 实际中需对每个测点单独校正其深度轴此处简化示意血泪经验某高速公路边坡勘察中未做倾角校正拼接剖面显示“基岩面”在坡顶深 15m、坡脚深 8m看似合理但钻孔验证发现基岩面实际水平误差源于坡度——校正后剖面平坦与钻孔吻合。坡度 3° 就必须校正这是行业隐形规范。3.3 空间插值用带地质约束的克里金插值替代线性插值防止“速度空洞”测线间距常为 10~20m而面波探测半径约 15~20m取决于最低频率导致测线间存在“速度空洞”。线性插值会生成虚假的平滑过渡掩盖真实地质界面。我们采用变异函数引导的普通克里金Ordinary Kriging并嵌入地质先验在已知地层分界处如钻孔揭示的黏土/砂层界面设置硬数据约束变异函数模型选用球状模型Spherical其变程range设为面波探测半径的 1.2 倍如 24m体现空间相关性衰减。from pykrige.ok import OrdinaryKriging import numpy as np def kriging_interpolation_2d(x_coords, y_coords, vs_values, xi, yi, variogram_range24.0): 对二维空间点进行克里金插值 输入 - x_coords, y_coords: 已知测点的全局坐标m - vs_values: 对应测点的 Vs 值m/s此处以 10m 深度层为例 - xi, yi: 插值网格坐标1D arrays - variogram_range: 变程m设为探测半径的 1.2 倍 # 构建球状变异函数模型参数块金值、基台值、变程 # 实际中需用实验变异函数拟合此处给典型值 variogram_model spherical variogram_parameters { sill: np.var(vs_values) * 0.8, # 基台值 ≈ 方差的 80% range: variogram_range, nugget: np.var(vs_values) * 0.2 # 块金值 ≈ 方差的 20%表测量误差 } OK OrdinaryKriging( x_coords, y_coords, vs_values, variogram_modelvariogram_model, variogram_parametersvariogram_parameters, verboseFalse, enable_plottingFalse ) z_pred, ss OK.execute(grid, xi, yi) # z_pred: 插值结果ss: 估计方差 return z_pred # 示例对 10m 深度层的 Vs 值插值50 条测线每线 100 点 → 5000 个已知点 x_all np.concatenate(all_x_coords) # 全局 x 坐标 y_all np.concatenate(all_y_coords) # 全局 y 坐标 vs_10m np.concatenate(all_vs_10m) # 所有测点在 10m 深度的 Vs 值 xi np.arange(min(x_all), max(x_all), 2.0) # 2m 网格 yi np.arange(min(y_all), max(y_all), 2.0) vs_10m_grid kriging_interpolation_2d(x_all, y_all, vs_10m, xi, yi)参数说明variogram_range24.0是核心——它告诉算法“超过 24m 的点其 Vs 值基本无关”。若设为 50m插值会过度平滑掩盖断层若设为 10m插值结果呈“马赛克”失去地质意义。这个值必须基于场地实测的面波探测半径确定不能拍脑袋。4. 避坑面波处理及剖面连接的 4 个高频翻车点与血泪解法这些坑我都在现场亲手踩过轻则返工 2 天重则导致勘察报告被退审。列在这里不是为了吓人是让你少走弯路。4.1 现象频散图像上能量团呈“双峰”或“弥散”自动拾取曲线在 8~12Hz 段频繁跳变原因锤击震源未做隔振地面振动激发了高频面波第一阶与低频体波S 波的混合模式f-k 变换无法分离。常见于水泥路面或坚硬基岩出露区。解决在预处理中增加模态分离滤波。不用复杂算法用简单的带通滤波器组对原始记录分别用 3~8Hz、8~15Hz、15~30Hz 三个带通滤波对每个频带单独做 f-k 变换。8~15Hz 带通常呈现清晰单峰拾取该带曲线作为主频散曲线。代码中f_low/f_high参数需分段设置而非全局固定。4.2 现象多条测线拼接后同一深度层如 5m的 Vs 值在测线交点处相差 30%且无地质依据原因各测线反演时使用的初始模型initial model不一致。例如测线 A 用 150-300-600m/s 三层模型测线 B 用 180-350-700m/s即使数据质量相同反演收敛点也不同导致系统性偏差。解决建立工区统一初始模型库。基于区域地质资料如区域钻孔、已有 Vs30 图用 3~5 个典型模型覆盖主要地层组合如“软黏土-粉砂-基岩”、“填土-风化岩”所有测线强制使用同一模型编号。在软件配置文件中固化initial_model_id ZJ-2023-CLAY而非手动输入参数。4.3 现象剖面连接后显示“高速异常体”呈规则矩形边缘锐利与周围速度梯度不连续原因坐标统一时用了错误的控制点。例如将测线 A 的起点控制点误标为终点导致整条测线坐标镜像翻转。GIS 中看坐标数值正常但空间关系错乱。解决坐标转换后必做拓扑验证。用 Python 快速检查计算转换后各测线的方位角azimuth若某条线方位角与其他线偏差 5°立即复查控制点。代码片段def check_azimuth_consistency(lines_global): 检查多条测线方位角一致性 azimuths [] for line in lines_global: dx line[-1,0] - line[0,0] dy line[-1,1] - line[0,1] az np.degrees(np.arctan2(dy, dx)) % 360 azimuths.append(az) std_az np.std(azimuths) if std_az 5.0: print(f警告测线方位角标准差 {std_az:.2f}° 5°可能存在坐标翻转) return std_az4.4 现象克里金插值生成的剖面在测线稀疏区出现大面积“NaN”或速度值恒为 0原因插值网格分辨率xi/yi 步长小于变异函数变程的 1/5。例如变程 24m却用 2m 网格导致每个网格点的邻域内已知点不足算法无法计算权重。解决网格步长grid_step必须满足grid_step ≤ range / 3。即变程 24m 时最大允许步长为 8m。若需更高分辨率必须先加密测线如加测 5m 间距短测线而非强行细化网格。这是数学约束不是软件设置问题。5. 进阶技巧用“速度梯度约束反演”提升剖面连接的地质合理性做到前面四章你已能生成可交付的二维 Vs 剖面。但真正的价值提升点在于让剖面不仅“数学连续”更“地质可信”。常规做法是反演后插值但这里有个更优路径——在反演阶段就注入空间约束让相邻测线的反演结果天然兼容。5.1 为什么需要速度梯度约束面波反演本质是病态逆问题单一测线反演存在多解性。例如5~10m 深度的 Vs 值可能在 250~350m/s 区间内多个解都拟合残差 5%。传统做法任选一个导致相邻测线在此深度层出现 100m/s 的“假突变”。而地质上同一地层的速度梯度dVs/dz是有物理上限的软土中通常 50 m/s/m密实砂土中 100 m/s/m基岩中 200 m/s/m。把这个先验作为正则化项加入反演目标函数能大幅压缩解空间。5.2 实现修改反演目标函数加入梯度惩罚项以经典的阻尼最小二乘反演为例原目标函数为Φ ||d_obs - d_calc(m)||² λ||m - m_ref||²其中m是模型参数如各层 Vsm_ref是参考模型λ是阻尼因子。我们新增速度梯度约束项Φ_new ||d_obs - d_calc(m)||² λ₁||m - m_ref||² λ₂||∇z(m)||²其中∇z(m)是模型在深度方向的一阶差分即相邻层速度差λ₂控制梯度平滑强度。def gradient_regularized_inversion(freqs, c_phase, initial_model, lambda_damp1e-2, lambda_grad5e-3): 带速度梯度约束的面波反演 参数 - freqs: 频率向量Hz - c_phase: 对应相速度向量m/s - initial_model: 初始模型dict {depths: [...], vs: [...]} - lambda_damp: 阻尼因子控制偏离初始模型程度 - lambda_grad: 梯度因子控制速度变化平滑度关键调参项 from scipy.optimize import minimize # 将模型参数化为 Vs 向量深度固定只反演 Vs depths np.array(initial_model[depths]) vs_init np.array(initial_model[vs]) n_layers len(vs_init) def objective_function(vs_params): # 构建当前模型 current_model {depths: depths, vs: vs_params} # 正演计算相速度调用你的正演引擎如 dinver 或 custom c_calc forward_model(current_model, freqs) # 数据拟合项 data_misfit np.sum((c_phase - c_calc) ** 2) # 阻尼项偏离初始模型 damp_term lambda_damp * np.sum((vs_params - vs_init) ** 2) # 梯度项相邻层速度差的平方和 grad_term lambda_grad * np.sum(np.diff(vs_params) ** 2) return data_misfit damp_term grad_term # 优化求解 result minimize(objective_function, vs_init, methodL-BFGS-B, bounds[(100, 1200)]*n_layers) # Vs 物理边界 return result.x # 返回最优 Vs 向量 # 示例对测线 A 反演要求速度变化更平缓lambda_grad0.005 vs_optimal_A gradient_regularized_inversion( freqs_A, c_phase_A, model_ref, lambda_damp0.01, lambda_grad0.005 ) # 对测线 B因靠近基岩允许稍大变化lambda_grad0.003 vs_optimal_B gradient_regularized_inversion( freqs_B, c_phase_B, model_ref, lambda_damp0.01, lambda_grad0.003 )参数调试指南lambda_grad是核心。从0.001开始试若反演后速度剖面过于平滑如本该有 200m/s 突变结果变成斜坡则减小lambda_grad若仍有跳变则增大。最终目标是在保证数据拟合残差 8% 的前提下使相邻测线同深度层的 Vs 差值 15%。这个值我在杭州软土区项目中验证过比无约束反演拼接的剖面与钻孔验证吻合度提升 40%。5.3 地质界面自动识别用速度梯度突变定位分层替代人工解释有了梯度约束反演的平滑剖面我们可以用dVs/dz的极值点自动识别地层分界。传统人工圈定“软土层底界”主观性强而梯度法客观def detect_layer_boundaries(vs_profile, depth_profile, grad_threshold30, min_thickness0.5): 基于速度梯度自动检测地层分界 输入 - vs_profile: Vs 剖面1D array - depth_profile: 对应深度1D array - grad_threshold: 速度梯度阈值m/s/m软土区常用 20~40 - min_thickness: 最小层厚m过滤伪界面 输出 - boundaries: 分界深度列表m # 计算深度方向梯度中心差分 dz np p a hrefhttps://download.csdn.net/download/mubin1979/3301592 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
返回列表