ICP解决的问题
每个接收信号的系统都面临同一个根本问题:在此时间间隔内,发生了多少事? 不是指到达了多少数据,而是有多少数据穿越了显著性阈值——有多少值得被整合进系统的状态中。
| 度量 | 它回答的问题 | 它忽略的是什么 |
| 均值 / 标准差 | 典型值是多少? | 显著事件的时间分布 |
| 信号能量 | 功率有多大? | 该功率是否超过相关阈值 |
| 香农熵 | 信息量有多大? | 阈值以上事件的时间权重 |
| 过零率 | 符号变化的频率? | 这些变化的幅度 |
| ICP / PCI | 显著体验的密度有多高? | — |
操作原则:并非所有数据都是感知。ICP 量化的是系统处于正式意义上的“感知”状态的时间比例。
正式定义
给定一个经 感知波函数 Ψ(t) 处理的信号流,设某次会话共有 L 个样本,且坍缩阈值为 τ,我们定义:
ICP = ln(1 + L · E)
其中 E 为共振密度:
E = |{t : |Ψ(t)| > τ}| / L
即 E 是 Ψ(t) 幅度超过阈值 τ 的样本占比。乘积 L · E 统计了会话中感知坍缩的绝对次数。
数学性质
- 下界: ICP ≥ 0 恒成立。仅在 E = 0 时 ICP = 0(即无样本越过 τ)。
- 对数增长: 对数运算防止 ICP 随 L 无限增长。
- 双重敏感性: 同时对 L(时长)和 E(坍缩密度)的变化做出亚线性响应。
- 绝对尺度无关性: 不依赖信号的原始单位,仅依赖作为领域相对校准器的 τ。
线性 PCI 与标准 ICP 的关系
问卷版的线性 PCI(加权和)与标准 ICP(对数形式)测量的是同一本质属性——显著感知事件的密度——只是应用场景不同:
- 线性 PCI(问卷): 为快速评估观测者而设计,通过 0–10 量表的 4 项自我评估维度。
- 标准 ICP(技术文档): 为已知 L 且可计算 E 的采样信号处理而设计。
两者在解读上殊途同归:低值表示低感知密度(
叠加态),高值表示高密度(
坍缩)。
应用案例
| # | 信号 | τ | ICP 测量内容 |
| 1 | 射电通量 (FAST) | 0.30 | 脉冲星密度 |
| 2 | 音频 (麦克风) | 0.2–0.4 | 声音活动密度 |
| 3 | 加速度计 | 0.15–0.25 | 运动密度 |
| 4 | 脑电图 (神经) | 0.3–0.5 | 持续注意密度 |
| 5 | 文本流 (NLP) | 0.6–0.8 | 主题相关内容密度 |
| 6 | 网络流量 | 0.5 | 显著利用率密度 |
| 7 | 金融价格 | 0.33 | 显著波动密度 |
| 8 | 多模态融合 | 按通道设定 | 多感官感知密度指数 |
ICP 值解读
| ICP | 解读 | 决策 |
| 0.0 – 0.5 |
无显著活动 |
丢弃 |
| 0.5 – 1.5 |
零星活动 |
丢弃或复核 |
| 1.5 – 3.0 |
中等活动 |
存储 |
| 3.0 – 5.0 |
高活动 |
高优先级存储 |
| > 5.0 |
相对饱和 |
存储 · 复核 τ |
标准实现
import numpy as np
def compute_icp(signal: np.ndarray, tau: float = 0.3) -> float:
"""计算感知复杂性指数 (ICP)。"""
L = len(signal)
if L == 0:
return 0.0
E = np.sum(np.abs(signal) > tau) / L
return float(np.log(1.0 + L * E))
def fuse_icp(icp_values: dict, weights: dict = None) -> float:
"""将多个 ICP 融合为一个加权全局指数。"""
keys = list(icp_values.keys())
if weights is None:
weights = {k: 1.0 / len(keys) for k in keys}
return sum(weights[k] * icp_values[k] for k in keys)
# 示例:天文数据 (FAST/Pulsar) 上的 ICP
# 模拟脉冲星信号(周期性高峰)
flux = np.array([0.05, 0.85, 0.02, 0.01, 0.90, 0.03, 0.02, 0.88])
icp_astro = compute_icp(flux, tau=0.30)
print(f"天文 ICP = {icp_astro:.4f}")