首页 › 技术知识 › 工程笔记 › 算法笔记 › STA/LTA 在微震检测上的实现
算法笔记 地质 STA/LTA微震事件检测地震

STA/LTA 在微震检测上的实现

STA/LTA for Microseismic Detection

STA/LTA 是微震事件检测的经典算法。但阈值设多少?怎么避免漏掉小事件与误报大噪声?这是噪声监测里被反复调参的算法。

约 2106 字· 6 分钟阅读

STA/LTA 的原理

  • STA(Short-Term Average):短时窗能量平均,捕捉事件
  • LTA(Long-Term Average):长时窗能量平均,反映背景噪声

比值 STA/LTA 反映"短期是否显著高于长期"——高于阈值则触发事件。

算法步骤

  1. 计算特征函数(如绝对值、能量、包络)
  2. STA = 特征函数在短时窗(如 0.5 s)内的平均
  3. LTA = 特征函数在长时窗(如 5 s)内的平均
  4. 比值 = STA / LTA
  5. 比值 > 阈值 → 触发事件

关键参数

STA 与 LTA 时窗

事件类型STALTA
微震(10~100 Hz)0.1~0.5 s1~5 s
区域地震(1~10 Hz)1~3 s10~30 s
振动监测(10~1000 Hz)0.05~0.2 s0.5~2 s

时窗选择原则:

  • STA 时窗约等于事件持续时间(事件能量集中在此时窗内)
  • LTA 时窗 ≥ 5 × STA(背景统计稳定)

阈值

阈值行为
2.0灵敏,误报多
3.0平衡
4.0保守,漏报多
5.0只测大事件

噪声监测的典型阈值 3.0~4.0。

实战代码(Python)

```python import numpy as np

def sta_lta(data, fs, sta_len=0.5, lta_len=5.0, threshold=3.0): """STA/LTA 事件检测

data: 时间序列 fs: 采样率 sta_len, lta_len: 时窗长度(秒) threshold: 触发阈值 返回:触发时刻数组(样本索引) """ n_sta = int(sta_len * fs) n_lta = int(lta_len * fs)

# 特征函数:绝对值(也可用平方能量) char_func = np.abs(data)

# 累计和,加速计算 csum = np.cumsum(np.insert(char_func, 0, 0)) sta = (csum[n_sta:] - csum[:-n_sta]) / n_sta

# LTA(滞后 STA 一段,避免事件污染 LTA) csum_lta = csum[n_lta:] lta = (csum_lta[n_sta:] - csum_lta[:-n_sta]) / n_lta

# 比值 ratio = sta / (lta + 1e-10)

# 触发 triggers = np.where(ratio > threshold)[0] triggers = triggers[ratio[triggers] > threshold]

# 去抖:相邻触发合并为一个事件 events = [] if len(triggers) > 0: start = triggers[0] for i in range(1, len(triggers)): if triggers[i] - triggers[i-1] > n_sta: events.append(start) start = triggers[i] events.append(start)

return events

模拟:背景噪声 + 一个微震事件

fs = 100 t = np.arange(0, 30, 1/fs) signal = 0.1 * np.random.randn(len(t))

10 秒处加事件

event_start = 10 * fs event_len = int(0.3 * fs) signal[event_start:event_start+event_len] += 2 * np.sin(2 * np.pi * 30 * t[:event_len])

events = sta_lta(signal, fs, sta_len=0.5, lta_len=5.0, threshold=3.0) print(f"检测到 {len(events)} 个事件") for e in events: print(f" 事件时刻: {e/fs:.2f} s") ```

常见错

错一:LTA 时窗太短

LTA < 5 × STA 时,事件本身污染 LTA,比值降低,事件被"埋掉"。正确做法:LTA ≥ 5 × STA。

错二:阈值太低

阈值 2.0 时,背景噪声波动也会触发。误报率可高达 50 次/小时。

错三:特征函数选择不当

用"绝对值"特征对振动监测够用。但地震学常用"能量"(平方)或"包络"(Hilbert 变换),对低信噪比事件更敏感。

错四:不做去抖

连续多个时窗都超阈值,会被记为多个事件。要做去抖:相邻触发合并为一个事件。

高级改进

自适应阈值

固定阈值对噪声变化适应差。自适应阈值基于"近期触发率"调整:

  • 触发率高(背景活跃):阈值上调
  • 触发率低:阈值下调

多通道联合

单通道 STA/LTA 误报多。多通道联合:N 个通道同时超阈值才触发,提升准确率。

后处理滤波

触发后做事件识别:

  • 频谱检查(是否含微震特征频率)
  • 持续时间检查(事件 vs 噪声脉冲)
  • 互相关检查(与已知事件模板相关)

结语

STA/LTA 是噪声监测事件检测的入门算法,简单但参数敏感。STA 时窗对应事件持续、LTA ≥ 5 × STA、阈值 3.0~4.0、多通道联合,是经过实战的稳定配置。但 STA/LTA 只是"检测",要做"识别"还要后续频谱与相关分析。