ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

深入浅出TinyML 15:时域特征能够描述信号的哪些属性?

深入浅出TinyML 15:时域特征能够描述信号的哪些属性? 时域特征把一段波形压缩成少量数字。均值描述基线RMS描述总体能量峰峰值描述幅度范围峭度对尖锐冲击更敏感。特征名称熟悉并不代表它一定适合当前任务。有效特征应在类别之间形成稳定差异并在设备、温度和时间变化下保持可重复。计算量、数值稳定性和PC/MCU一致性也要进入选择。特征的价值由区分度、稳定性和计算成本共同决定公式本身不能证明它有用。完成本篇后你应该能够解释均值、方差、RMS、峰峰值、偏度、峰度和相关系数描述的信号属性。识别对毛刺、量程和窗口长度敏感的特征。一次遍历提取多项特征并用合成窗口检查每个特征的方向是否符合预期。时域特征直接在采样值上计算不需要FFT。它们适合幅值、能量、冲击和通道关系能够区分类别的任务。一、位置、离散程度与能量均值反映窗口的平均水平适合观察零偏或直流分量方差和标准差反映数据围绕均值的离散程度RMS不先去均值能够反映含直流分量的整体能量。是否去均值取决于任务。姿态识别需要利用重力方向时盲目中心化会删除有效信息纯振动分析可能更关心交流分量。均值 μ (1/N)ΣxᵢRMS √[(1/N)Σxᵢ²]方差 σ² (1/N)Σ(xᵢ − μ)²图1不同统计特征强调波形的不同属性二、极值与高阶特征对异常更敏感最大值、最小值和峰峰值能够捕捉幅值范围但容易被单个毛刺影响。偏度描述分布不对称峭度反映尾部和尖峰程度适合冲击类任务也对噪声和样本长度敏感。高阶矩计算前要检查数值范围。定点实现需要避免累加溢出浮点实现也应处理方差接近零的窗口。表1常见时域特征的含义与风险特征主要含义注意事项均值基线或直流分量去均值会删除该信息RMS总体能量受直流偏置影响峰峰值幅值范围对毛刺敏感峭度尖峰与重尾短窗口和噪声下波动大过零率符号变化频率阈值和偏置会改变结果三、相关性与跨通道特征补充方向信息六轴IMU各通道并非独立。轴间相关系数、合加速度和角速度模长能够描述方向耦合与整体运动强度但也会增加计算和输入维度。特征数量增加会扩大模型参数并提高过拟合风险。可以用相关矩阵、单特征分布和消融实验删除重复或不稳定特征。四、板端实现要保证一次遍历和可验证均值、平方和、极值和过零次数可以在一次遍历中累计减少内存访问。统计结果应与Python参考实现使用相同分母、数据类型和边界约定。对每个特征设置单元测试包含全零、常数、正弦、冲击和极值输入。这样能够在模型调试前排除特征实现错误。C一次遍历计算均值、RMS和峰峰值void basic_features(const float *x, size_t n,float *mean, float *rms, float *ptp){double sum 0.0, sum_sq 0.0;float min_v x[0], max_v x[0];for (size_t i 0; i n; i) {sum x[i];sum_sq (double)x[i] * x[i];if (x[i] min_v) min_v x[i];if (x[i] max_v) max_v x[i];}*mean (float)(sum / n);*rms sqrtf((float)(sum_sq / n));*ptp max_v - min_v;}同一段数据可以从位置、能量和形状三个层面描述均值描述基线位置标准差描述围绕均值的波动RMS描述相对零点的能量。信号存在直流偏置时RMS同时包含偏置和变化若只关心交流振动可先去均值再计算标准差或交流RMS。峰值和峰峰值关注极端幅度对冲击敏感也容易被单个毛刺影响。峰度用于描述分布尖锐程度冲击信号常出现较高峰度但样本少时估计不稳定。每个特征都要和数据质量规则一起使用。过零率描述符号变化频繁程度粗略反映频率与噪声。若信号有较大零偏它可能几乎不穿过零点。可以先去均值或使用相对局部基线的过零但训练与部署必须一致。RMS sqrt(sum(x²)/N)方差 sum((x-mean)²)/N峰峰值 max(x)-min(x)多通道任务还需要描述轴之间的关系两轴相关系数接近1表示同向变化接近-1表示反向变化接近0表示线性关系弱。六轴IMU中的轴间关系可以表达旋转方向和机械耦合。相关系数计算前要去均值并处理某一轴方差接近0的情况。模长 sqrt(x²y²z²) 对坐标旋转更稳定却失去方向。固定安装的故障诊断可能需要方向信息穿戴式任意姿态可能受益于模长。可以同时保留每轴特征与模长特征再通过消融实验判断贡献。MCU实现应复用一次遍历中的累加量sum、sum_sq、min和max。累加位宽要根据最大输入和窗口长度计算INT16平方后至少需要更宽类型。浮点实现简单定点实现要明确缩放和溢出。常用时域特征与敏感因素特征主要描述容易受影响均值基线与零偏漂移、安装方向RMS/方差能量与波动量程、窗口长度峰峰值/峰度冲击与极端毛刺、样本数相关系数通道协同低方差与时间错位动手让四类信号在时域特征上显形脚本生成静止偏置、平稳正弦、强随机噪声和带冲击正弦四类窗口计算均值、RMS、标准差、峰峰值、过零率和峰度。目标是先根据物理含义预测方向再用数字验证。实验环境与输入Python 3标准库。保存为 time_features.py 并运行。随机数种子固定输出可重复。按顺序完成实验运行前先预测哪类均值最高、哪类峰峰值最大、哪类峰度最高。运行代码并逐项核对预测。向所有信号增加0.5偏置观察RMS、均值和过零率变化。删除冲击点验证峰度和峰峰值为何明显下降。可直接运行六个时域特征的完整实现import mathimport randomrandom.seed(15)N 200signals {bias: [0.6 random.gauss(0, 0.01) for _ in range(N)],sine: [0.4*math.sin(2*math.pi*8*n/200) for n in range(N)],noise: [random.gauss(0, 0.4) for _ in range(N)],impact: [0.3*math.sin(2*math.pi*8*n/200) (2.5 if n 90 else 0.0) for n in range(N)],}def extract(x):mean sum(x) / len(x)centered [v - mean for v in x]variance sum(v*v for v in centered) / len(x)rms math.sqrt(sum(v*v for v in x) / len(x))p2p max(x) - min(x)zcr sum((a 0) ! (b 0) for a, b in zip(x, x[1:]))/(len(x)-1)fourth sum(v**4 for v in centered) / len(x)kurtosis fourth / (variance*variance) if variance 1e-12 else 0.0return mean, rms, math.sqrt(variance), p2p, zcr, kurtosisprint(name mean rms std p2p zcr kurtosis)for name, values in signals.items():f extract(values)print(f{name:8s} .join(f{v:7.3f} for v in f))先读懂代码中的关键路径均值与RMS使用原值标准差和峰度使用去均值值两者回答不同问题。峰度分母是方差平方方差接近0时必须保护避免NaN进入模型。过零率按相邻点符号变化计数加入直流偏置会明显改变它。固定信号类型帮助先预测特征方向再用输出检查公式实现。你应该观察到什么bias信号均值接近0.6但标准差很小说明RMS大不一定代表强振动。impact信号的峰峰值与峰度明显上升反映少量极端点。noise信号过零率通常高于低频正弦但具体数字受随机样本影响。成功标准你能从任务的物理差异出发选择特征而非机械收集所有统计量。每个特征在PC与MCU上使用相同定义、除数和边界处理。板端实现检查累加位宽、除零、NaN和异常输入。失败时从哪里查起时域特征异常值的来源现象可能原因处理RMS远大于预期存在直流偏置或单位错误同时查看均值和物理范围峰度非常不稳定窗口太短或毛刺未处理扩大样本并保留质量标志相关系数出现NaN某轴方差接近0设置最小方差保护特征测试应包含容易手算的常量、正弦和单脉冲输入这比只拿真实复杂波形更容易发现实现错误。把实验迁移到真实MCU项目一次遍历可以累加sum、sum_sq、min、max和过零数减少内存访问。峰度需要更高阶累加先确认任务是否真的受益。INT16平方和可能溢出32位。用窗口长度和最大码推导上界选择int64或缩放最后与Python黄金结果比较。特征量纲也要记录。均值和RMS继承输入单位方差是单位平方相关系数无量纲。把不同量纲特征直接送入Dense前通常需要基于训练集的缩放并在MCU复现。特征定义改变后应提升预处理版本即使模型shape不变旧权重也需要重新验证。把结果再向前推进一步为INT16输入、N1024计算sum_sq所需的最小安全累加位宽。构造两个相关系数接近1和-1的轴信号并验证实现。挑选不超过8个特征形成最小基线记录每个特征的物理含义。收束时域特征是带有物理含义的数据压缩。通过类别区分度、跨设备稳定性和MCU成本验证后再保留避免堆叠无效统计量。
返回列表