# 高密度检查段误差计算：讨论、公式与溯源记录

## 1. 文档目的

本文档整理关于“高密度检查段误差计算”的对话内容、分析口径变化及最终采用的规范公式，供后续计算、复核、程序实现和质量检查溯源使用。

后续确认：用户提供的公式来自 **DZ/T 0070-2016《时间域激发极化法技术规程》**。本文中的规范公式根据用户提供的两张规范截图转写。

> 溯源说明：规范名称和公式出处由用户确认；公式内容依据本次对话中的截图整理。正式成果引用前，建议再与规范原文对应页核对符号、表号、设计限值及上下文。

## 2. 需求与沟通过程

### 2.1 初始需求

用户提出：“高密度检查段误差计算”。

由于最初没有提供数据文件、行业背景、规范名称和误差计算公式，无法确定这里的误差是普通 RMSE、相对误差、中误差，还是某一行业规范规定的成对观测误差。

初步给出的通用误差指标为：

单点误差：

$$
e_i=x_i-x_i'
$$

平均误差：

$$
ME=\frac{1}{n}\sum_{i=1}^{n}e_i
$$

平均绝对误差：

$$
MAE=\frac{1}{n}\sum_{i=1}^{n}|e_i|
$$

普通均方根误差：

$$
RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}e_i^2}
$$

相对误差：

$$
r_i=\frac{|x_i-x_i'|}{|x_i|}\times100\%
$$

这些公式当时仅作为通用候选口径，并非最终采用的规范计算方法。

### 2.2 公式处理范围确认

随后确认可以处理以下类型的规范公式：

- 图片、扫描件、PDF、Word 或 Excel 中的公式识别和转写；
- 求和、分段函数、矩阵、回归及各类工程误差公式；
- 中误差、限差、RMSE、相对误差和闭合差；
- 带修正系数、权重、单位换算和条件判断的公式；
- 将公式转换为 Excel、Python 或 MATLAB 实现；
- 使用样例数据复核结果，并检查符号、量纲和适用条件。

### 2.3 收到规范截图后的思路变化

用户提供规范截图后，计算口径得到明确：该规范不是简单地把生产观测值当作真值来计算普通 RMSE，而是比较“生产观测数据”和“系统检查观测数据”，通过同精度成对观测差值估计单次观测误差。

因此，分析思路从“通用误差统计”调整为以下规范化流程：

1. 将生产观测值与系统检查观测值逐点配对；
2. 以两个观测值的平均值作为相对误差的对称基准；
3. 使用分母 $2n$ 估计单次观测的均方误差；
4. 对低极化率数据段按条件改用绝对均方误差；
5. 除总体均方误差外，同时检查单点误差的分布和三级超限比例；
6. 绘制质量检查对比曲线及误差分布曲线。

## 3. 规范来源

- 规范编号：DZ/T 0070-2016
- 规范名称：《时间域激发极化法技术规程》
- 用户提供截图对应内容：第 7.9.4 节“质量检查结果”
- 涉及公式：公式（6）、公式（7）、公式（8）
- 涉及条款：7.9.4.1、7.9.4.2、7.9.4.3、7.9.4.4

## 4. 规范公式转写

### 4.1 极化率的均方相对误差

根据公式（6）：

$$
m=\pm\sqrt{\frac{1}{2n}\sum_{i=1}^{n}
\left(\frac{\eta_{si}-\eta'_{si}}{\bar{\eta}_{si}}\right)^2}
$$

其中：

- $\eta_{si}$：第 $i$ 点生产观测数据；
- $\eta'_{si}$：第 $i$ 点系统检查观测数据；
- $\bar{\eta}_{si}$：$\eta_{si}$ 与 $\eta'_{si}$ 的平均值；
- $n$：参加统计计算的测点数。

平均值为：

$$
\bar{\eta}_{si}=\frac{\eta_{si}+\eta'_{si}}{2}
$$

实际质量判定通常使用 $m$ 的非负数值；公式中的 $\pm$ 表示误差的正负属性，而均方误差指标本身取其大小。

### 4.2 低极化率数据段的均方误差

规范指出：在低极化率（$\leq3\%$）数据段，使用均方相对误差达不到设计要求时，可改用均方误差评价，具体设计限值应结合规范表 3。

根据公式（7）：

$$
\varepsilon=\pm\sqrt{\frac{1}{2n}\sum_{i=1}^{n}
(\eta_{si}-\eta'_{si})^2}
$$

其中：

- $\eta_{si}$：第 $i$ 点生产观测数据；
- $\eta'_{si}$：第 $i$ 点系统检查观测数据；
- $n$：参加统计计算的测点数。

该指标是由成对观测差值估计的单次观测均方误差，不是平均绝对误差 MAE。

### 4.3 视电阻率的均方相对误差

根据公式（8）：

$$
m=\pm\sqrt{\frac{1}{2n}\sum_{i=1}^{n}
\left(\frac{\rho_{si}-\rho'_{si}}{\bar{\rho}_{si}}\right)^2}
$$

其中：

- $\rho_{si}$：第 $i$ 点生产观测数据；
- $\rho'_{si}$：第 $i$ 点系统检查观测数据；
- $\bar{\rho}_{si}$：$\rho_{si}$ 与 $\rho'_{si}$ 的平均值；
- $n$：参加统计计算的测点数。

平均值为：

$$
\bar{\rho}_{si}=\frac{\rho_{si}+\rho'_{si}}{2}
$$

规范截图还注明：用点数应不大于系统质量检查点数的 $1\%$。该句的准确适用对象和“用点数”原文含义，正式实施前宜结合规范完整上下文复核。

## 5. 单点误差及误差分布要求

根据 7.9.4.3，受检点应统计以下误差量的绝对值。

极化率相对误差分布量：

$$
q_{\eta,i}=\left|\frac{\eta_{si}-\eta'_{si}}
{2\bar{\eta}_{si}}\right|
$$

低极化率数据段的绝对误差分布量：

$$
q_{\varepsilon,i}=\left|\frac{\eta_{si}-\eta'_{si}}{2}\right|
$$

视电阻率相对误差分布量：

$$
q_{\rho,i}=\left|\frac{\rho_{si}-\rho'_{si}}
{2\bar{\rho}_{si}}\right|
$$

误差分布应满足：

- 超过设计均方相对误差（或均方误差）的测点数，不大于受检点总数的三分之一；
- 超过两倍设计均方相对误差（或均方误差）的测点数，不大于受检点总数的 $5\%$；
- 超过三倍设计均方相对误差（或均方误差）的测点数，不大于受检点总数的 $1\%$。

根据 7.9.4.4，还应绘制：

- 质量检查对比曲线；
- 误差分布曲线。

## 6. 与最初通用公式的主要差异

### 6.1 分母不同

普通成对差值 RMSE 为：

$$
RMSE_d=\sqrt{\frac{1}{n}\sum_{i=1}^{n}d_i^2}
$$

规范采用：

$$
m=\sqrt{\frac{1}{2n}\sum_{i=1}^{n}d_i^2}
$$

因此：

$$
m=\frac{RMSE_d}{\sqrt{2}}
$$

这里的 $1/2$ 来源于同精度、相互独立的两次观测差值：若两次观测具有相同方差 $\sigma^2$，则差值方差为 $2\sigma^2$。规范借此从差值估计单次观测误差。

### 6.2 相对误差基准不同

最初列出的通用相对误差一般将某一个值作为参考值。规范使用生产值与检查值的平均值：

$$
\bar{x}_i=\frac{x_i+x_i'}{2}
$$

这是一种对称比较方式，交换生产值与检查值不会改变误差绝对值。

### 6.3 增加低极化率例外条件

当极化率不大于 $3\%$，且相对误差评价达不到设计要求时，规范允许改用绝对均方误差。通用公式本身没有规定这一业务条件。

### 6.4 增加误差分布判定

规范不仅判断总体均方误差是否满足设计值，还要求统计超过一倍、两倍和三倍设计误差限的点数比例。只计算一个总体 RMSE 无法完成规范质量判定。

### 6.5 总体指标和单点分布指标不能混用

总体均方误差公式使用 $1/(2n)$；单点分布误差使用差值除以 2。两者均与成对观测有关，但用途和计算结构不同，不能将单点公式直接代入总体公式。

## 7. 后续统一计算口径

后续针对该项目的“高密度检查段误差计算”，建议统一采用以下步骤：

1. 按测点号、测线号或空间位置匹配生产数据和系统检查数据；
2. 剔除无法可靠匹配的点，并记录剔除原因；
3. 分别识别极化率和视电阻率字段及单位；
4. 计算每个配对点的平均值、差值和单点分布误差；
5. 极化率原则上按公式（6）计算；符合低极化率条件时按公式（7）补充或改用绝对均方误差；
6. 视电阻率按公式（8）计算；
7. 将总体误差与设计要求比较；
8. 统计超过一倍、两倍、三倍设计误差限的点数和比例；
9. 判断三级分布比例是否满足 $1/3$、$5\%$、$1\%$ 的要求；
10. 输出计算明细、汇总表、对比曲线和误差分布曲线。

## 8. 建议的数据字段

后续数据表至少应包含：

| 字段 | 说明 |
|---|---|
| 测点编号 | 用于生产数据和检查数据配对 |
| 测线编号 | 可选，用于分线统计 |
| 坐标或里程 | 可选，用于复核点位和绘图 |
| 生产极化率 | $\eta_{si}$ |
| 检查极化率 | $\eta'_{si}$ |
| 生产视电阻率 | $\rho_{si}$ |
| 检查视电阻率 | $\rho'_{si}$ |
| 极化率设计误差限 | 用于总体与分布判定 |
| 视电阻率设计误差限 | 用于总体与分布判定 |
| 备注 | 异常、缺失、剔除原因等 |

## 9. 尚待确认事项

为完成实际计算，还需要以下信息：

- 生产观测与系统检查观测的原始数据；
- 极化率和视电阻率的单位及字段对应关系；
- 项目采用的设计均方相对误差或均方误差限值；
- 低极化率段是否按规范表 3 的具体限值执行；
- 测点配对规则以及缺失点、零值、负值和异常值处理规则；
- 是否需要分测线、分区段或分仪器统计；
- 规范截图中“用点数应不大于系统质量检查点数的 1%”的完整上下文和准确解释。

## 10. 版本记录

| 日期 | 内容 |
|---|---|
| 2026-07-22 | 提出“高密度检查段误差计算”，初步列出通用误差公式 |
| 2026-07-22 | 确认可处理规范图片、PDF、表格及工程计算公式 |
| 2026-07-23 | 用户提供规范截图，计算思路调整为同精度成对观测差值法 |
| 2026-07-23 | 用户确认公式来自 DZ/T 0070-2016《时间域激发极化法技术规程》，完成本文档整理 |
| 2026-07-23 | 完成高密度电法质量检查通用对比工具，支持列表和图形对比 |
| 2026-07-23 | 增加全部层色谱、全部层曲线叠合、异常点圆环及检查段范围设置 |
| 2026-07-23 | 增加检查数据本地 X 坐标自动平移、手动偏移及双坐标溯源 |

## 11. 可视化对比工具目标

在规范公式和计算口径确认后，任务进一步明确为：生成一个可在浏览器本地运行的高密度电法质量检查工具，用于比较生产观测原始数据和系统检查数据。

工具包括两类主要展示：

1. 列表式对比：逐点展示生产值、检查值、平均值、差值、相对差值、单点误差和异常状态；
2. 图形化对比：通过色谱剖面、逐层曲线、全部层曲线、散点图和误差分布图发现差异及跳变点。

工具文件：

- `高密度电法质量检查对比工具.html`

设计原则：

- 本地运行，不上传数据；
- 支持 GBK、GB18030 和 UTF-8 CSV；
- 不内置固定文件名、固定范围或固定计算结论；
- 由用户导入任意符合字段要求的数据；
- 计算过程、异常识别和剔除结果均可追溯；
- 计算明细可导出为 CSV。

## 12. 数据结构与字段识别

当前工具读取 CSV 或文本文件，自动识别以下字段：

| 标准含义 | 常见表头 |
|---|---|
| 视电阻率 | `ρs(Ω.m)`、`ρs`、`rho`、`视电阻率` |
| 极化率 | `M`、`M0`、`极化率` |
| 层内测点号 | `Y层第m测点`、`point_m`、`测点` |
| 层号 | `Y(剖面)`、`layer`、`层号` |
| 实际距离 | `X(实际距离)`、`x`、`实际距离` |

配对主键为：

```text
层号 + 换算后的实际距离 X
```

距离保留到六位小数生成匹配键。检查数据经坐标平移时，同时保留检查文件内的原始 X，保证可以回查源文件。

## 13. 检查段范围与层数

### 13.1 用户参数

通用工具界面允许指定：

- 检查段起点 X；
- 检查段终点 X；
- 参与统计的最大层数。

检查段起止 X 按电极测线范围解释，不是伪剖面数据点中心的最小值和最大值。

导入检查数据后，程序根据第 1 层数据中心和点距自动推断电极范围及最大层数；用户可以覆盖自动结果。

### 13.2 Wenner-alpha 逐层内缩

检查段内第 $n$ 层允许参与计算的数据中心范围为：

$$
x_{\min,n}=X_{start}+1.5ns
$$

$$
x_{\max,n}=X_{end}-1.5ns
$$

其中：

- $X_{start}$：检查段电极起点；
- $X_{end}$：检查段电极终点；
- $n$：层号；
- $s$：点距。

程序先按用户指定最大层数过滤，再按上述每层理论边界过滤。这样可避免将深层正常内缩误判为缺失，也不会把检查段之外的点纳入统计。

### 13.3 范围测试

使用本次数据验证：

| 设置 | 参与检查点 | 成功匹配 | 实际层数 |
|---|---:|---:|---:|
| 1840–2310 m，15 层 | 360 | 360 | 15 |
| 1900–2200 m，5 层 | 110 | 110 | 5 |

## 14. 检查数据 X 坐标兼容

### 14.1 问题背景

系统检查工作实际可能从某一绝对里程开始，例如 1840 m，但检查文件内部可能采用局部坐标并从 0 m 起算。如果直接用文件 X 与生产数据匹配，将出现全部点无法配对的问题。

### 14.2 坐标模式

程序提供四种检查数据 X 坐标模式：

| 模式 | 处理规则 |
|---|---|
| 自动识别 | 分别试算原坐标和按检查段起点平移后的坐标，采用匹配点更多的方案 |
| 文件内为实际坐标 | 偏移量固定为 0 |
| 文件内从 0 起算 | 自动使用 `检查段起点 − 检查文件推断起点` |
| 手动偏移 | 使用用户输入的 X 偏移量 |

坐标换算公式：

$$
X_{actual}=X_{check\_file}+\Delta X
$$

局部坐标模式下：

$$
\Delta X=X_{start}-X_{check\_lineStart}
$$

### 14.3 自动识别逻辑

自动模式生成两个候选方案：

```text
方案 A：偏移量 = 0
方案 B：偏移量 = 检查段起点 − 检查文件推断起点
```

两个方案分别执行范围过滤和“层号 + 实际距离”匹配，程序选择成功匹配点更多的方案。如匹配点数相同，优先保留文件原坐标，避免不必要的平移。

### 14.4 坐标兼容测试

将本次检查数据全部 X 减去 1840 m，生成测试用局部坐标文件。自动模式验证结果：

- 识别偏移量：`+1840 m`；
- 成功匹配：`360/360`；
- 未匹配：0；
- 误差结果与绝对坐标文件一致。

列表和导出明细同时记录：

- 实际距离 X；
- 检查文件原始 X；
- 层号和误差计算字段。

## 15. 列表式对比

列表逐点展示：

| 字段 | 说明 |
|---|---|
| 序号 | 当前匹配点顺序 |
| 层号 | 数据层号 |
| 实际距离 X | 坐标换算后用于配对和绘图的距离 |
| 检查文件 X | 检查源文件中的原始距离 |
| 原始视电阻率 | 生产观测值 $\rho_{si}$ |
| 检查视电阻率 | 系统检查值 $\rho'_{si}$ |
| 平均值 | $\bar{\rho}_{si}$ |
| 差值 | $\rho_{si}-\rho'_{si}$ |
| 相对差值 | $(\rho_{si}-\rho'_{si})/\bar{\rho}_{si}$ |
| 单点误差 | $|\rho_{si}-\rho'_{si}|/(2\bar{\rho}_{si})$ |
| 状态 | 正常、异常或已剔除 |

列表支持：

- 按层号过滤；
- 按正常、异常、已剔除状态过滤；
- 按距离和数值搜索；
- 导出 UTF-8 BOM CSV 明细。

## 16. 图形化对比

### 16.1 全部层色谱对比

生产数据和系统检查数据以左右两个倒梯形剖面并排显示，两幅图共用同一色标，保证同一颜色代表同一数值范围。

色谱沿用数据切割工具：

| 归一化位置 | 颜色 |
|---:|---|
| 0.00 | 深蓝 `rgb(38,60,136)` |
| 0.42 | 青绿 `rgb(27,138,143)` |
| 0.72 | 黄色 `rgb(241,200,75)` |
| 1.00 | 红色 `rgb(182,59,49)` |

色标范围使用正值的 2%–98% 分位，避免少量极端值压缩主要数据的颜色差异。

异常点使用白色外晕加黑色实线的双层圆环标记。生产剖面和检查剖面的对应异常位置均画圈，便于空间定位。

### 16.2 全部层曲线叠合

全部层按层号从上到下排列。每一层内：

- 原始数据绘制为蓝色曲线；
- 检查数据绘制为红色曲线；
- 两条曲线使用相同横坐标直接叠合；
- 异常检查点使用黑白圆环标记。

曲线采用视电阻率对数幅值，并使用 2%–98% 分位限幅。这样可避免极端跳变值导致其他层曲线被压平，同时保留两条曲线偏离的位置特征。

### 16.3 逐层曲线对比

用户选择单一层号后，程序按实际距离绘制该层生产值和检查值曲线。该模式保留实际视电阻率纵轴，适合精查某一层的数值变化。

### 16.4 原始值/检查值散点图

横轴为生产观测值，纵轴为检查观测值，并绘制 $y=x$ 参考线。偏离参考线越远，表示两次观测差异越大。

### 16.5 单点误差分布图

对当前有效点的单点误差 $q_i$ 绘制直方图。横轴显示至约 98% 分位，避免极端值使主体分布不可读。

## 17. 异常识别与剔除

### 17.1 自动异常条件

自动异常阈值同时满足：

```text
q_i > Q3 + 3 × IQR
且
q_i > 3 × 设计误差限
```

采用联合条件是为了避免在整体误差很小时，仅靠 IQR 将正常的小幅波动大量标记为异常。

### 17.2 剔除约束

工具允许用户设置最大剔除比例，默认 1%。实际最大剔除点数按以下方式计算：

```text
floor(匹配点数 × 最大剔除比例)
```

异常点不会静默删除。界面同时显示异常点数量、实际剔除数量及剔除比例，导出明细中记录异常和剔除状态。

> 说明：1% 剔除比例依据用户提供的规范截图实施。正式成果应继续核对规范完整原文中该条款的准确措辞和适用条件。

## 18. 本次数据计算结果

本节仅记录用于验证工具算法的数据结果，不作为程序内置样例或固定结论。

两份数据的结构：

- 生产数据：2838 点；
- 检查数据：360 点；
- 检查段：1840–2310 m；
- 检查层数：15 层；
- 成功配对：360/360。

全部点计算结果：

$$
m_{\rho}=10.5363\%
$$

发现两个数量级明显异常的检查值：

| 层号 | X(m) | 生产视电阻率(Ω·m) | 检查视电阻率(Ω·m) | 单点误差 |
|---:|---:|---:|---:|---:|
| 15 | 2075 | 2546.699219 | 12795119 | 99.9602% |
| 9 | 2095 | 1455.887573 | 5659479.5 | 99.9486% |

两点占全部检查点的：

$$
\frac{2}{360}\times100\%=0.5556\%
$$

显式剔除两点后：

$$
m_{\rho}=0.0585\%
$$

剔除后最大单点误差约为 0.2249%。

两份数据的极化率 M 均为 0，因此无法使用平均值作为分母计算极化率均方相对误差；当前有效计算对象为视电阻率。

## 19. 软件验证记录

已完成以下验证：

- HTML 内 JavaScript 静态语法检查通过；
- 使用 Microsoft Edge 无头浏览器实际导入两份 GBK CSV；
- 原始坐标模式匹配 360/360；
- 局部 X 从 0 起算模式自动识别偏移并匹配 360/360；
- 手动缩小检查范围和层数后，统计点数正确变化；
- 原始总体误差与独立计算一致；
- 剔除两点后的误差与独立计算一致；
- 列表显示 360 条匹配记录；
- 全部层色谱、全部层曲线、逐层曲线和其他图形均完成实际浏览器渲染；
- 异常点圆环在深色和浅色背景上均可识别；
- 图形和页面控件未发现明显遮挡。

## 20. 当前交付文件

- `高密度检查段误差计算_讨论与公式溯源.md`：本讨论、公式、实现和验证溯源文档；
- `高密度电法质量检查对比工具.html`：通用本地对比程序；
- `26071501_原始数据.csv`、`26071502_系统检查数据.csv`：本次验证数据副本。

## 21. 程序流程重构

### 21.1 双文件读取与统计卡片

打开生产原始文件后，左侧卡片显示：

- 剖面长度；
- 起点 X；
- 终点 X；
- 点距；
- 电极数；
- 层数。

打开系统检查文件后，右侧卡片显示同样六项信息。

统计关系：

$$
L=X_{end}-X_{start}
$$

$$
E=\frac{L}{s}+1
$$

程序根据第 1 层数据中心位置和点距反推电极起止位置。文件统计卡片展示的是电极范围，不是伪剖面数据中心范围。

### 21.2 叠加偏移参数

叠加设置包括：

- 对齐方式；
- 检查数据是否反向；
- 检查数据逻辑起点 X；
- 叠加后的实际起点 X；
- 叠加后的实际终点 X；
- 点距；
- 电极数；
- 层数；
- 计算得到的 X 偏移量。

叠加终点、点距和电极数应满足：

$$
X_{end}=X_{start}+(E-1)s
$$

如输入的终点与点距、电极数不一致，程序以起点、点距和电极数重新计算终点，保证剖面几何关系闭合。

### 21.3 正向坐标换算

正向叠加时：

$$
X_{actual}=X_{overlayStart}+(X_{check}-X_{logicalStart})
$$

对应偏移量：

$$
\Delta X=X_{overlayStart}-X_{logicalStart}
$$

### 21.4 反向坐标换算

检查数据反向定义为：检查剖面关于自身逻辑中点镜像，再将该逻辑中点映射到叠加区段的实际中点。

先计算检查逻辑终点：

$$
X_{logicalEnd}=X_{logicalStart}+(E-1)s
$$

再计算检查逻辑中点和叠加区段实际中点：

$$
X_{logicalMid}=\frac{X_{logicalStart}+X_{logicalEnd}}{2}
$$

$$
X_{actualMid}=\frac{X_{actualStart}+X_{actualEnd}}{2}
$$

关于中点执行镜像：

$$
X_{actual}=X_{actualMid}-(X_{check}-X_{logicalMid})
$$

展开后为：

$$
X_{actual}=-X_{check}+X_{actualMid}+X_{logicalMid}
$$

当检查逻辑长度与实际叠加长度相等时，该结果与端点倒序写法数值相同，但中点镜像更准确地表达几何含义。反向只改变检查数据的横向映射方向，不改变层号、U、I 和视电阻率原始值。

### 21.5 对齐方式

程序当前提供三种方式：

| 对齐方式 | 逻辑 |
|---|---|
| 按范围自动对齐 | 使用文件推断参数和用户指定实际起点，将检查逻辑坐标映射到实际坐标 |
| 从数据自动搜索 | 沿生产剖面逐个候选起点搜索，并同时测试正向与反向 |
| 手动设置 | 使用用户填写的起点、终点、点距、电极数、层数和方向 |

### 21.6 数据自动搜索

数据自动搜索的候选起点范围为：

```text
生产剖面起点 ... 生产剖面终点 − 检查剖面长度
```

候选步长优先使用生产数据点距。每个候选起点分别计算正向和反向方案。

排序规则：

1. 优先选择成功匹配点数最多的方案；
2. 匹配点数相同时，选择视电阻率平均对数差最小的方案。

对数差评分为：

$$
S=\frac{1}{n}\sum_{i=1}^{n}\left|\ln\frac{\rho_{si}}{\rho'_{si}}\right|
$$

自动搜索只用于寻找叠加位置和方向；最终误差仍严格按 DZ/T 0070-2016 公式计算。

### 21.7 匹配数据模型

匹配后每个点保存：

- 横坐标 X；
- 纵坐标 Y，即拟深度；
- 层号；
- 检查文件原始 X；
- 源 Umn；
- 源 Iab；
- 源视电阻率；
- 检查 Umn；
- 检查 Iab；
- 检查视电阻率；
- 平均视电阻率；
- 差值、相对差值和单点误差；
- 异常和剔除状态。

拟深度当前按下式生成：

$$
Y=n\times s
$$

其中 $n$ 为层号，$s$ 为叠加点距。

Umn 自动读取 `vp(mv)`，Iab 自动读取 `ip(mA)`。若源文件缺少对应字段，成果中相应单元格为空，不以 0 代替。

## 22. 成果 CSV 定义

成果文件名默认为：

```text
高密度电法质量检查成果.csv
```

文件采用 UTF-8 BOM 编码。

### 22.1 第一行：源文件统计信息

包含：

```text
文件名、剖面长度、起点X、终点X、点距、电极数、层数、数据点数
```

### 22.2 第二行：检查文件统计信息

包含与第一行相同的统计字段，数值来自检查源文件本身。即使检查文件使用从 0 开始的局部坐标，第二行仍记录源文件坐标，便于溯源。

### 22.3 第三行：误差统计信息

包含：

```text
匹配点数、设计误差限、全部点均方相对误差、
剔除点数、剔除比例、剔除后均方相对误差
```

全部点误差和剔除后误差同时写出，不能只保留处理后的较小结果。

### 22.4 第四行：数据字段头

```text
横坐标X(m),纵坐标Y-拟深度(m),
源Umn(mV),源Iab(mA),源电阻率(Ω·m),
检查Umn(mV),检查Iab(mA),检查电阻率(Ω·m),
误差q(%)
```

### 22.5 第五行及以后：数据体

每个成功匹配点写一行。误差字段使用规范单点误差分布量：

$$
q_i=\left|\frac{\rho_{si}-\rho'_{si}}{2\bar{\rho}_{si}}\right|\times100\%
$$

## 23. 本轮验证结果

- 左侧源文件统计：长度 1310 m，起点 1000 m，终点 2310 m，点距 10 m，132 电极，43 层；
- 右侧检查文件统计：长度 470 m，起点 1840 m，终点 2310 m，点距 10 m，48 电极，15 层；
- 按范围自动对齐：360/360 点；
- 局部坐标从 0 起算，叠加到 1840 m：360/360 点；
- 数据自动搜索：自动找到 1840–2310 m，方向为正向，360/360 点；
- 手动设置 1900–2200 m、10 m、31 电极、5 层：110/110 点；
- 导出文件前三行统计、第四行字段头和数据体已实际生成并核对；
- 源/检查 Umn、Iab、视电阻率均成功写入成果数据体。

## 24. 叠加交互与术语简化

### 24.1 原问题

上一版同时向用户显示“检查逻辑起点、叠加实际起点、X 偏移”，用户需要自行理解并完成坐标换算，容易混淆。

本轮将界面主要操作收敛为：

- 检查段实际起点 X；
- 检查数据正向或反向；
- 点距；
- 电极数；
- 层数。

检查逻辑起点不再作为普通可见输入项，由程序从检查文件统计结果自动取得。X 偏移改为只读计算结果。

### 24.2 各坐标量含义

检查文件逻辑起点：检查文件自身坐标系的起点。例如检查文件从 0 起算时为 0；检查文件已经使用实际里程时可能为 1840。

检查段实际起点：用户希望检查剖面叠加到生产测线上的实际位置，例如 1840 m。这是用户主要调整的参数。

正向 X 偏移：只在正向映射中表示普通平移量：

$$
\Delta X=X_{actualStart}-X_{logicalStart}
$$

$$
X_{actual}=X_{file}+\Delta X
$$

反向映射不属于单纯平移，因此界面不再把该值称为“偏移”，而显示为“中点镜像轴截距”：

$$
X_{actual}=-X_{file}+C
$$

$$
C=X_{actualMid}+X_{logicalMid}
$$

实时预览状态栏会直接显示当前采用的完整换算公式。

### 24.3 检查数据反向的具体操作

反向并不是颠倒数组行号，而是将检查剖面关于自身逻辑中点做横向镜像：

1. 根据逻辑起点、点距和电极数计算逻辑终点；
2. 计算检查剖面的逻辑中点；
3. 计算叠加区段的实际中点；
4. 保持每个检查点到中点的距离不变，将其左右方向取反；
5. 层号、Umn、Iab 和视电阻率保持原值；
6. 只有用于叠加、配对和绘图的实际 X 改变。

公式为：

$$
X_{logicalEnd}=X_{logicalStart}+(E-1)s
$$

$$
X_{actual}=X_{actualMid}-(X_{file}-X_{logicalMid})
$$

## 25. 人工参与的实时叠加预览

### 25.1 文件打开即绘图

- 只打开生产原始文件时，立即绘制源剖面；
- 打开检查文件后，立即在源剖面下方绘制检查剖面；
- 两幅图上下排列并共用同一实际 X 轴；
- 两幅图共用同一色标范围。

用户不需要先执行误差计算即可检查数据位置和形态。

### 25.2 参数实时联动

以下参数改变时立即重绘：

- 检查段实际起点；
- 检查数据方向；
- 点距；
- 电极数；
- 层数。

实际起点变化时，检查剖面在共用 X 轴上左右滑动。勾选反向时，检查剖面立即镜像。层数变化时，原始和检查预览同时按参与层数裁剪，便于直接比较。

### 25.3 自动搜索与人工确认

选择“从数据自动搜索”后，程序先搜索候选位置和方向，并把最佳结果写入实际起点和方向控件，再刷新预览。用户可以在图上确认或继续微调，最后点击“计算并对比”。

这种流程为：

```text
文件导入 → 自动建议 → 图形确认/人工调整 → 计算并对比 → 导出成果
```

计算按钮已从文件导入区移至“叠加偏移与计算设置”末尾，使操作顺序与实际逻辑一致。

## 26. 低通色标

### 26.1 目的

孤立跳变值可能高达正常值的数千倍。如直接使用原始最大值和最小值生成色标，大部分正常数据会被压缩到同一种颜色，难以比较。

### 26.2 当前实现

程序按层号分组并按 X 排序，对每个点使用最多 5 点的滑动中值：

```text
当前点前 2 点 + 当前点 + 当前点后 2 点
```

各窗口取中位数形成低通序列，再用低通序列的 2% 和 98% 分位作为色标上下限。

因此：

- 原始异常值仍在剖面中绘制；
- 异常值不直接控制色标范围；
- 原始和检查剖面始终使用相同色标；
- 正常数据的空间颜色差异可以保留。

本次数据中存在百万级检查异常值，但实时预览低通色标约为 275.40–4421.51 Ω·m，没有被异常值拉伸到百万级。

计算后的全部层色谱对比同样改用低通色标，并继续使用黑白双层圆环突出异常点。

## 27. 异常倍数可调

上一版异常条件固定为 3 倍。本轮增加“异常倍数”数值输入，默认值为 3，允许按项目要求调大或调小。

设异常倍数为 $k$，自动异常条件为：

$$
q_i>Q_3+k\times IQR
$$

并且：

$$
q_i>k\times L_{design}
$$

其中 $L_{design}$ 为设计误差限。

采用两个条件的较大阈值，避免整体误差很小时因 IQR 很小而把正常波动大量标成异常。

异常倍数仅影响异常候选点识别，不改变 DZ/T 0070-2016 的总体均方相对误差公式和三级误差分布判定规则。

## 28. 实时交互验证

- 只打开源文件：立即显示 43 层源剖面；
- 再打开检查文件：立即显示共同 15 层的上下对齐预览；
- 实际起点从 1840 改为 1830：检查剖面实时左移 10 m；
- 勾选反向：检查剖面实时镜像，状态栏显示 `X实际 = -X文件 + 4140`；
- 恢复正向和 1840 m：仍匹配 360/360 点；
- 全部点误差仍为 10.5363%；
- 显式剔除两个异常点后仍为 0.0585%；
- 数据自动搜索仍能找到 1840–2310 m 正向区段。

## 29. 最近迭代汇总

本节将最近几轮讨论和修改集中记录，作为后续检查、继续开发和版本回退时的快速索引。具体公式和实现细节仍以第 21–28 节为准。

### 29.1 文件导入信息卡片

修改前：文件选择区只显示文件名和简单提示，用户无法立即确认剖面几何信息。

修改后：

- 左侧原始数据卡片显示剖面长度、起点 X、终点 X、点距、电极数、层数；
- 右侧检查数据卡片显示相同信息；
- 文件打开后立即计算并刷新统计；
- 起止 X 使用电极范围，不使用伪剖面数据中心范围。

### 29.2 叠加设置与计算顺序

修改前：“计算并对比”按钮位于文件导入区，操作顺序与叠加参数设置不一致。

修改后：

```text
导入文件 → 设置或搜索叠加位置 → 图形预览 → 人工调整 → 计算并对比 → 导出成果
```

“计算并对比”按钮已移至叠加偏移与计算设置区域末尾。

### 29.3 坐标参数简化

修改前：检查逻辑起点、叠加实际起点和 X 偏移同时作为可见参数，容易混淆。

修改后：

- 检查逻辑起点由程序从检查文件自动读取，不再作为普通可见输入；
- 用户主要调整检查段实际起点；
- 实际终点由起点、点距和电极数自动计算，设为只读；
- X 偏移为只读诊断结果；
- 正向预览直接显示 `X实际 = X文件 ± 偏移`；
- 反向预览直接显示中点镜像公式。

### 29.4 三种对齐方式

- 按范围自动对齐：使用检查文件几何参数和用户指定实际起点；
- 从数据自动搜索：沿源剖面搜索候选区段，同时测试正向和中点镜像方向；
- 手动设置：由用户填写起点、点距、电极数、层数和方向。

自动搜索按以下优先级选择结果：

1. 成功匹配点数最多；
2. 匹配点数相同时，平均视电阻率对数差最小。

自动搜索结果先写回界面并绘图，由用户确认或继续调整，不直接替代人工判断。

### 29.5 局部 X 坐标兼容

检查工作实际起点可能为 1840 m，但检查文件内部 X 可能从 0 开始。程序通过逻辑坐标到实际坐标的映射实现兼容。

正向模式：

$$
X_{actual}=X_{actualStart}+(X_{file}-X_{logicalStart})
$$

验证：检查文件 X 减去 1840 m 后，程序仍可恢复实际位置并匹配 360/360 点。

### 29.6 数据反向改为自身中点镜像

最终定义：检查剖面关于自身逻辑中点镜像，并将逻辑中点对应到叠加区段实际中点。

$$
X_{logicalMid}=\frac{X_{logicalStart}+X_{logicalEnd}}{2}
$$

$$
X_{actualMid}=\frac{X_{actualStart}+X_{actualEnd}}{2}
$$

$$
X_{actual}=X_{actualMid}-(X_{file}-X_{logicalMid})
$$

实现约束：

- 不颠倒原始文件行；
- 不改变层号；
- 不改变 Umn、Iab、视电阻率及其他物理字段；
- 仅改变检查点用于叠加、配对和绘图的实际 X；
- 预览标题显示“检查数据（中点镜像）”；
- 状态栏显示“关于自身中点镜像”；
- 只读诊断字段显示“中点镜像轴截距”。

### 29.7 实时双剖面预览

- 打开原始文件即绘制源剖面；
- 打开检查文件即在源剖面下方绘制检查剖面；
- 两幅图上下排列并共用实际 X 轴；
- 两幅图共用同一色标；
- 修改实际起点时检查剖面实时左右滑动；
- 切换中点镜像时检查剖面实时翻转；
- 修改点距、电极数或层数时预览实时更新；
- 用户可以在计算前判断叠加位置是否合理。

### 29.8 低通色标

孤立跳变点仍参与误差计算和图形标记，但不直接参与色标最大值、最小值的生成。

当前色标流程：

1. 按层分组；
2. 按 X 排序；
3. 使用最多 5 点滑动中值低通；
4. 汇总低通结果；
5. 使用 2% 和 98% 分位作为色标上下限；
6. 原始和检查剖面使用同一色标。

本次百万级异常值没有将色标拉伸至百万级，正常数据颜色差异仍可辨认。

### 29.9 异常识别参数化

异常倍数由固定 3 改为可调输入，默认值为 3，可按项目需要调大或调小。

设异常倍数为 $k$：

$$
q_i>Q_3+k\times IQR
$$

且：

$$
q_i>k\times L_{design}
$$

异常倍数只影响候选异常点识别，不修改规范总体误差公式，也不修改 $1/3$、5%、1% 的三级分布判定要求。

### 29.10 成果 CSV

成果结构最终确定为：

```text
第1行：源文件统计信息
第2行：检查文件统计信息
第3行：全部点误差、剔除点数、剔除比例、剔除后误差等统计
第4行：数据字段头
第5行起：匹配数据体
```

数据体字段：

```text
横坐标X，纵坐标Y（拟深度），
源Umn，源Iab，源电阻率，
检查Umn，检查Iab，检查电阻率，误差q
```

全部点误差和剔除后误差必须同时输出，不能只保存剔除后的结果。

### 29.11 综合验证状态

- 源文件统计卡片正确；
- 检查文件统计卡片正确；
- 文件打开即绘图；
- 参数变化实时联动；
- 正向范围对齐匹配 360/360；
- 局部 X 从 0 起算匹配 360/360；
- 自动搜索找到 1840–2310 m 正向区段；
- 中点镜像预览公式正确；
- 手动裁剪 1900–2200 m、31 电极、5 层匹配 110/110；
- 全部点均方相对误差为 10.5363%；
- 剔除两个异常点后均方相对误差为 0.0585%；
- 成果 CSV 统计头和数据体已经实际导出核对；
- HTML JavaScript 静态语法和 Edge 浏览器端到端测试通过。

## 30. 双物性处理：电阻率与极化率 M

### 30.1 数据模型升级

程序不再只处理视电阻率。每个匹配点同时保存并计算：

- 源 Umn；
- 源 Iab；
- 源视电阻率；
- 源极化率 M；
- 检查 Umn；
- 检查 Iab；
- 检查视电阻率；
- 检查极化率 M；
- 电阻率差值、相对差值和单点误差；
- 极化率差值、相对差值、相对单点误差和绝对单点误差。

极化率字段从 `M`、`M0` 或“极化率”表头读取。

### 30.2 极化率均方相对误差

按 DZ/T 0070-2016 公式（6）：

$$
m_M=\sqrt{\frac{1}{2n}\sum_{i=1}^{n}
\left(\frac{M_i-M'_i}{\bar M_i}\right)^2}
$$

其中：

$$
\bar M_i=\frac{M_i+M'_i}{2}
$$

极化率相对单点误差为：

$$
q_{M,i}=\left|\frac{M_i-M'_i}{2\bar M_i}\right|\times100\%
$$

### 30.3 低极化率绝对误差

当平均极化率为 0，或低极化率段不适合使用相对误差评价时，相对误差不可计算。程序同时计算规范公式（7）的绝对均方误差：

$$
\varepsilon_M=\sqrt{\frac{1}{2n}\sum_{i=1}^{n}(M_i-M'_i)^2}
$$

绝对单点误差为：

$$
q_{M,abs,i}=\left|\frac{M_i-M'_i}{2}\right|
$$

处理规则：

- $\bar M_i\neq0$ 时，成果极化率误差优先写相对单点误差百分比；
- $\bar M_i=0$ 时，成果极化率误差写绝对单点误差；
- 总体统计同时写极化率均方相对误差和绝对均方误差；
- 相对误差因分母为 0 而不可计算时，成果写“不可计算（平均值为0）”，不写 `NaN`；
- 绝对均方误差仍正常输出。

当前验证数据中，源和检查极化率 M 均为 0，因此：

- 极化率均方相对误差不可计算；
- 极化率绝对均方误差 $\varepsilon_M=0$；
- 极化率绝对单点误差均为 0。

### 30.4 双物性选项卡

质量检查结果区域增加两个物性选项卡：

1. 电阻率；
2. 极化率 M。

切换选项卡后，以下内容统一切换到当前物性：

- 规范公式说明；
- 中间误差统计卡；
- 最大单点误差；
- 误差分布状态；
- 列表中的源值、检查值、平均值、差值和误差；
- 实时上下剖面预览；
- 全部层色谱对比；
- 全部层曲线叠合；
- 逐层曲线对比；
- 原始值/检查值散点图；
- 单点误差分布直方图。

两个选项卡共用同一套坐标叠加、层数裁剪、中点镜像、自动搜索和导出逻辑，避免将程序拆成两套不一致的流程。

### 30.5 极化率色谱和曲线

选择极化率 M 后：

- 实时预览使用 M 着色；
- 原始和检查极化率剖面使用同一低通色标；
- 全部层色谱显示 M；
- 全部层曲线和逐层曲线显示 M；
- 若 M 包含 0 或负值，曲线使用线性幅值；
- 只有全部数值均为正时才允许使用对数幅值；
- 当前数据全部为 0 时，色标回退为 0–1，所有点以同一低值颜色显示。

### 30.6 异常与剔除

异常识别随当前物性选项卡切换：

- 电阻率页按电阻率相对单点误差识别；
- 极化率页在相对误差可计算时按极化率相对单点误差识别；
- 极化率平均值为 0 时，不把绝对误差与百分比设计限值直接混用；
- 低值段以绝对均方误差和规范表 3 的限值单独评价。

切换物性时，程序重新计算当前物性的异常候选和剔除结果，避免将电阻率异常点直接套用到极化率。

## 31. 双物性成果 CSV 定义

### 31.1 前三行统计

第一行仍为源文件统计信息，第二行仍为检查文件统计信息。

第三行误差统计扩展为：

```text
匹配点数
设计误差限
电阻率全部点均方相对误差
电阻率剔除后均方相对误差
极化率全部点均方相对误差
极化率剔除后均方相对误差
极化率全部点绝对均方误差 ε
极化率剔除后绝对均方误差 ε
剔除点数
剔除比例
```

### 31.2 第四行字段头

成果文件数据字段最终定义为：

```text
横坐标X(m)
纵坐标Y-拟深度(m)
源Umn(mV)
源Iab(mA)
源电阻率(Ω·m)
源极化率M
检查Umn(mV)
检查Iab(mA)
检查电阻率(Ω·m)
检查极化率M
电阻率误差q(%)
极化率误差(相对%，低值段为绝对值)
```

第五行开始写匹配数据体。

### 31.3 双物性验证

- 电阻率选项卡统计、列表、实时预览和图形切换正常；
- 极化率选项卡表头切换为源 M、检查 M 和平均 M；
- 极化率实时预览切换成功；
- 当前 M 全为 0 时，界面显示相对误差“—”和绝对均方误差 `ε=0.000000`；
- 成果 CSV 已写出 12 个规定字段；
- 成果第三行同时包含电阻率和极化率总体统计；
- 极化率相对误差不可计算时写明确文本，不再输出 `NaN`；
- 电阻率原有结果保持不变：全部点 10.5363%，剔除两个异常点后 0.0585%。
