4. 峰值强度自动识别与人工复核规则
峰值识别的对象与判据
偏应力-轴向应变曲线上的“峰值”在数学上并不唯一:它可能是全局最大值,也可能是第一个显著局部极大值。工程上取峰值强度时,通常要求该点之后偏应力出现可观测的下降(软化),或至少进入稳定平台。因此自动搜索不能只调用一次 argmax,而应同时输出峰值点、峰值前单调段终点、峰值后下降幅度三个量,供人工复核判断该点是否为真实峰值。
本节采用“平滑曲线 + 局部极值候选 + 显著性筛选”的算法:先在平滑后的偏应力序列上找所有局部极大值,再按“峰值突出度”和“峰值后回落比”两个指标筛选。突出度定义为候选峰与其两侧较低谷值的最小高差;回落比定义为峰值后指定应变窗口内偏应力下降量与峰值之比。两者同时超过阈值才判为有效峰值。
自动搜索算法实现
以下 Python 实现接收平滑后的偏应力数组 q 与轴向应变数组 eps,返回峰值强度、对应应变及复核标记。算法不依赖外部库,仅用标准库完成局部极值搜索与判据计算,便于嵌入试验数据处理脚本。
def find_peak(eps, q, prominence_ratio=0.03, drop_ratio=0.05, drop_window=0.02):
"""
eps, q: 等长序列,q 为平滑后偏应力(kPa),eps 为轴向应变(小数)
prominence_ratio: 突出度阈值(相对峰值)
drop_ratio: 峰值后回落比阈值
drop_window: 回落观察窗口(应变增量)
返回: dict(peak_q, peak_eps, status, candidates)
"""
n = len(q)
# 1. 找所有局部极大值(含端点平台处理)
candidates = []
for i in range(1, n - 1):
if q[i] >= q[i-1] and q[i] >= q[i+1]:
# 向左找谷值
left = i
while left > 0 and q[left-1] <= q[left]:
left -= 1
# 向右找谷值
right = i
while right < n - 1 and q[right+1] <= q[right]:
right += 1
h = q[i] - max(q[left], q[right])
candidates.append((i, q[i], h))
if not candidates:
return {"peak_q": q[-1], "peak_eps": eps[-1],
"status": "持续硬化-无局部峰", "candidates": []}
# 2. 按突出度筛选
valid = []
for i, qi, h in candidates:
if h / qi < prominence_ratio:
continue
# 峰值后回落比
j = i
while j < n - 1 and eps[j] - eps[i] < drop_window:
j += 1
q_after = min(q[i:j+1]) if j > i else qi
drop = (qi - q_after) / qi
valid.append({"idx": i, "q": qi, "eps": eps[i],
"prom": h/qi, "drop": drop,
"ok": drop >= drop_ratio})
# 3. 判定状态
accepted = [c for c in valid if c["ok"]]
if accepted:
p = accepted[0] # 首个满足判据的峰
status = "有效峰值" if len(accepted) == 1 else "双峰-取首峰"
return {"peak_q": p["q"], "peak_eps": p["eps"],
"status": status, "candidates": valid}
else:
# 有局部峰但回落不足 -> 平台
p = max(valid, key=lambda c: c["q"])
return {"peak_q": p["q"], "peak_eps": p["eps"],
"status": "平台-回落不足", "candidates": valid}
调用示例:假设某组数据 eps 从 0 到 0.15、q 在 0.08 应变处达到 420 kPa 后回落至 380 kPa,则 prom 与 drop 均超阈值,返回 status="有效峰值",peak_q=420,peak_eps=0.08。若曲线在 400 kPa 附近形成宽平台、回落仅 2%,则返回 status="平台-回落不足",提示人工确认平台起点。
人工复核规则与输出
自动结果必须经过复核才能作为强度参数。复核按以下顺序执行,任一条件触发即标记为“需人工确认”:
- 双峰:候选峰多于一个且均满足判据。取首个满足判据的峰,但需检查第二峰是否由试样端部摩擦或局部剪切带引起;若第二峰高于首峰 10% 以上,应复核首峰是否为真实峰值。
- 平台:局部峰存在但回落比不足 5%。此时峰值取平台起点(偏应力首次达到平台均值 98% 的应变点),而非平台中点。
- 持续硬化:全程无局部极大值。峰值取试验终止点,并在报告中注明“未出现峰值,取终止点强度”。
- 噪声毛刺:若峰值点前后 0.5% 应变内偏应力波动超过峰值 2%,说明平滑不足,需回到去噪环节调整窗口后重算。
最终输出应包含:peak_q(峰值偏应力,kPa)、peak_eps(对应轴向应变,%)、status(有效峰值/双峰/平台/持续硬化)、prom 与 drop 两个判据值,以及复核人签字栏。这样峰值强度不再是单一数字,而是带判据和状态的可追溯结果。
prominence_ratio 设为 0.03、drop_ratio 设为 0.05 作为默认值;对软黏土等低刚度材料可适当降低突出度阈值至 0.02,但回落比不宜低于 0.03,否则平台与峰值的区分会失效。