恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
一维数据分类实战:从CWRU轴承到HRRP与心电信号的完整流程
首页
资讯中心
/
一维数据分类实战:从CWRU轴承到HRRP与心电信号的完整流程
一维数据分类实战:从CWRU轴承到HRRP与心电信号的完整流程
发布时间:2026/10/19 10:38:52
一维数据分类是个挺有意思的活儿这几年我收到的私信里问得最多的就是滚动轴承故障检测拿CWRU凯斯西储大学那套公开数据做实验其次就是雷达HRRP飞机信号识别、心电信号多分类这类场景。这几个方向看似八竿子打不着但拿到手里你会发现它们底层全是一维时序/序列数据处理的套路高度相通。这篇文章我就拿这三个典型场景做骨架把一维数据分类从数据处理到模型训练再到工程部署的完整链路掰开揉碎讲清楚。先说清楚写这篇文章的定位如果你刚接触一维数据分类不知道从哪下手或者已经用深度学习跑通了几个Demo但总觉得哪里不对这篇文章就是给你准备的。我尽量不堆公式重点讲清楚每一步为什么这么做踩过哪些坑换一个数据集、换一类信号时哪些经验可以直接搬过去。1. 三个典型场景的共同点为什么它们能用一套办法处理很多人一听到“CWRU轴承数据”“HRRP雷达信号”“心电信号”会觉得这是三个八竿子打不着的领域其实从数据处理角度讲它们本质上是同一类问题拿到一条一维序列做预处理切成样本送入分类模型输出类别标签。先说CWRU凯斯西储大学滚动轴承数据集。这是轴承故障诊断领域最常用的公开基准数据集由驱动端轴承在不同负载、不同故障直径下采集的振动加速度信号组成。正常轴承是一类内圈故障、外圈故障、滚动体故障各按损伤直径分了几个档位加起来通常是10个类别左右。这类数据的核心特点是故障信号有周期性冲击成分但现场噪声很大而且健康状态下的振动信号也有随机波动所以单看时域波形很难直接分类。再看HRRP飞机信号。高分辨距离像High Resolution Range Profile是雷达目标识别里的一种特征它把一个展宽目标在雷达径向上的散射点分布投影成一串幅度序列。不同机型、不同姿态角下HRRP的形态差异很大但同一架飞机在不同姿态下的HRRP又变化剧烈这就带来了“姿态敏感性”问题。传统的做法是提取统计特征后送入分类器现在更多人直接拿一维CNN、LSTM或Transformer去端到端学习。心电信号多分类就更好理解了。标准心电ECG导联采集出来就是一条电压随时间变化的曲线临床上要区分正常窦性心律和各种心律失常比如室早、房早、房颤、束支传导阻滞等。难点在于个体差异大、类别极度不平衡正常样本远多于异常样本、每拍形态易受噪声和基线漂移干扰。这三个场景放到一起看处理流程高度一致原始一维序列 - 去噪/归一化/分段 - 构造样本集 - 设计一维分类模型 - 训练、调参、评估 - 部署。所以我的建议是不管你现在做的是哪个方向先把“通用一维分类流水线”搭好然后针对具体信号的特点去做定制化调整。这篇文章后面几节就拿三个场景交叉举例让你看完能对号入座。2. 数据预处理这条流水线决定了模型上限2.1 去噪别一上来就滤波先搞清楚噪声长什么样我见过太多初学者拿到CWRU数据第一步就上一个带通滤波器恨不得把所有非故障频段都砍掉。这么做不是不行但很容易把有效信息一起滤没了。轴承故障信号的冲击成分往往分布在较宽的频带上如果滤波器通带设置不当早期微弱故障反而会被滤掉。我的习惯是先做一段“观察性分析”把原始信号拉出来看时域波形同时做FFT看频谱然后再决定要不要滤波。CWRU数据本身采集质量较高很多研究直接不做滤波也能分类但实际工业现场的信号就没这么干净了这时可以用小波阈值去噪或经验模态分解EMD做预处理把环境噪声和结构共振成分分离掉。对HRRP信号来说去噪通常要处理的是幅值归一化和背景杂波抑制方法上可以类比。对心电信号则更多使用带通滤波比如0.5Hz-45Hz去除基线漂移和工频干扰。2.2 归一化一类信号对应一套正确姿势一维数据分类里最容易出问题的是归一化。归一化方式很多——最大最小归一化、Z-score标准化、按样本归一化、按全局统计归一化——每种的适用场景都不一样。对CWRU轴承数据我是按样本做最大最小归一化。如果一个样本是一个固定长度的时间窗比如1024个采样点那么就按这个窗内的最大值和最小值把整段数据映射到[-1,1]或[0,1]。这样做的好处是保留了同一段信号内部的相对起伏而故障冲击恰恰体现在相对起伏上。对心电信号通常先做Z-score标准化也就是减去均值再除以标准差尤其当你要对一整段长时程记录做分析时按整段统计量归一化能抑制个体间的幅值差异。但注意如果做逐拍分类你最好按“拍”归一化而不是按整段否则不同病人的心跳幅值差异会被抹平模型反而更难泛化。对HRRP信号归一化更讲究。HRRP的幅度受雷达距离、目标尺寸、雷达系统增益等影响通常要做幅度归一化来消除这些外部因素。很多人直接对整条HRRP序列做L2范数归一化除以向量的欧几里得范数这在公开实验里很常见。但如果涉及目标强度信息用就得先想清楚是否要保留强度特征因为L2归一化会把强度信息完全抹掉。2.3 分段与数据增强样本量不够重叠切窗来凑一维信号分类很少用整条长序列做输入一般是切段。切段有两个原则一是每段要足够长能包含至少几个完整的事件周期二是类别标签要可靠。比如CWRU数据振动信号是包含故障冲击的连续波形你可以用重叠滑窗切出大量样本通常窗口长度取1024或2048个采样点步长取窗口的四分之一到二分之一这样既能扩增样本又能保持相邻窗口之间的时序连续性。对心电信号切窗有一个额外麻烦一个窗口里可能包含多个心跳类别标签怎么定标准的做法是先做R峰检测然后以每个R峰为中心截取固定长度的心拍窗口这样每个窗口对应一个明确的心拍类别。如果某些异常类别样本太少可以对少数类做合成过采样SMOTE或者用时序变形增强——比如小幅时间缩放、加噪声、幅值抖动。HRRP数据增强就更关键了因为姿态角变化导致同一目标的HRRP差异极大。经典的增强手段是“角域插值”在邻近姿态角对应的HRRP之间做插值生成中间角度的样本。此外添加乘性噪声和随机像元置零也常用于模拟不同雷达工作状态下的变化。2.4 这三类信号预处理参数参考信号类型采样率/规模推荐窗口长度归一化方式主要噪声来源CWRU轴承振动12kHz/48kHz可选1024或2048点样本内最大最小归一化环境振动、结构共振HRRP距离像序列长度通常256~1024全序列或固定子窗L2范数归一化或功率归一化杂波、姿态敏感心电信号采样率125~1000Hz不等以R峰为中心截取400ms~1s按拍Z-score或全局Z-score肌电、基线漂移、工频3. CWRU轴承故障检测实战从原始数据到多分类模型3.1 数据组织别在训练集里混进“同源样本”CWRU数据一个长期被忽视的问题就是数据泄露。官网提供的采集工况包含不同负载0HP、1HP、2HP、3HP每个负载下的故障数据来自同一批实验轴承的同一段连续采集。如果你直接用滑窗切样本然后按样本随机划分训练集和测试集那么训练集和测试集里可能混着来自同一连续信号的窗口模型记忆的是“同一段波形的不同片段”而不是真正的故障模式导致验证准确率高得离谱实际部署却完全不行。我处理CWRU数据的标准方式是先按“故障类型故障直径负载”分组再做分组划分确保同一个原始信号段的所有窗口都只在训练集或只在测试集出现。更严格的划分是按不同负载做训练/测试分离比如在0HP、1HP、2HP负载上训练在3HP负载上测试这样可以检验模型对未知工况的泛化能力。实测下来很多人报告“99%准确率”的CWRU模型一旦做跨负载测试准确率会掉到85%~92%这个区间这才是真实水平。3.2 特征输入原始信号直接送进去可以先做包络谱CWRU轴承故障检测有两条技术路线一条是直接在原始振动信号上训练一维CNN另一条是提取特征后再分类。我个人的倾向是如果计算资源允许、数据量充足直接上原始信号配合一维卷积可以学到丰富特征如果样本少、想快速验证流程那就先做包络谱分析把时域信号通过Hilbert变换求包络再做FFT得到包络谱以包络谱作为输入特征。举个例子针对内圈故障滚动体通过内圈缺陷时会激起高频共振直接看原始波形很难稳定捕获但包络谱里故障特征频率比如BPFI内圈故障特征频率处的峰值会明显突出。当然做分类时不需要手工算这些频率把包络谱整段送入一维CNN让模型自己学往往效果更稳。3.3 一维CNN模型结构参考我常用的基础结构输入层长度1024的一维序列单通道第一卷积块Conv1D(64, kernel_size3, stride1) ReLU MaxPool1D(2)第二卷积块Conv1D(128, kernel_size3) ReLU MaxPool1D(2)第三卷积块Conv1D(256, kernel_size3) ReLU GlobalAveragePooling1D全连接层256个神经元 Dropout(0.5)输出层Softmax类别数对应故障类别总数这个结构在CWRU 10分类任务上分组划分后准确率大概在94%~97%加一点训练技巧能到98%。相比炫酷的Transformer一维CNN在中小样本量下更稳训练更快也不太容易过拟合。3.4 训练细节与调参心法训练时我用Adam优化器初始学习率1e-3配合ReduceLROnPlateau策略验证集损失连续5个epoch不下降就降为原来的1/5。Batch size取64。为防止过拟合除Dropout外我还加了早停early stopping监视验证集损失patience设为10个epoch。一个容易被忽略的点是损失函数。CWRU数据各类别样本量大体均衡用交叉熵没毛病。但如果你的实际生产数据类别不平衡建议换加权交叉熵或Focal Loss。把CWRU当“算法练手”可以但真正上线时类别不平衡才是常态这一点先有认知后面换任何数据集都会受益。4. HRRP飞机信号识别姿态敏感性是最大的坑4.1 HRRP数据的特点同一架飞机换个角度就换张脸HRRP本质是目标散射点在雷达视线方向上的投影。目标相对于雷达的姿态角变化哪怕只变几度散射中心的叠加方式都会明显变化因此HRRP序列的形态对姿态角极其敏感。这也是HRRP识别比CWRU轴承识别难一个数量级的核心原因。解决姿态敏感性问题主流有三个思路一是分帧处理把姿态域划分为多个角域每个角域单独建模测试时先判断姿态角落在哪个帧再选择对应模型二是设计姿态不变的特征比如提取HRRP的模、强度谱、中心矩等统计量这类特征对姿态变化相对鲁棒三是用深度网络做端到端学习让网络自己去适应姿态变化前提是训练数据要覆盖足够的姿态角度范围。4.2 预处理细节幅值归一化和距离对齐HRRP序列送到模型之前最少要处理两件事幅度归一化和距离对齐。幅度归一化上面提过通常用L2范数归一化。实际操作中我还会先做一次“去均值”因为HRRP中可能存在直流分量去均值后归一化更稳定。距离对齐指的是HRRP序列的起点并不一定对应目标的真实起始位置不同样本之间可能存在距离偏移。如果直接拿未对齐的序列训练卷积网络卷积核会学到“偏移不变”的伪特征效果打折扣。常用的对齐方法是基于相关性的包络对齐——计算当前HRRP与参考HRRP的互相关用峰值位置做平移补偿。这个步骤很不起眼但对识别准确率的提升非常明显。4.3 利用复值HRRP还是实值HRRP很多HRRP研究直接使用幅值序列即丢弃相位信息。但相位中包含目标散射点的径向相对位置信息在低信噪比条件下对识别有帮助。如果数据是复值HRRP可以考虑双通道输入实部虚部交给网络或者转化为幅度相位两个通道。我在实验中试过信噪比正常时幅度特征已经够用信噪比偏低时加入相位通道能带来3~5个百分点的提升。4.4 模型对比CNN、LSTM还是TransformerHRRP序列长度通常几百点目标类别数少三五类、最多十几类样本总量不大。这样的场景下我优先选一维CNN兼顾性能和计算效率。LSTM能建模序列依赖但在分类任务上优势不突出。Transformer需要较多数据HRRP这种千级样本的规模下容易过拟合不太建议一上来就用大模型。如果非要试Transformer可以用“卷积块全局注意力”的轻量结构先用两层一维卷积做局部特征提取把序列长度压缩再过一个自注意力层最后接分类头。这样既缓解了数据不足的问题又能利用注意力捕捉非局部依赖。5. 心电信号多分类从R峰检测到类别不平衡实战5.1 心电数据不是“切段就能喂”先做心拍定位心电信号分类的第一步不是直接切窗而是做心拍定位。常规做法是Pan-Tompkins算法做R波检测找到每个QRS波群的位置然后以R峰为中心向前取约200ms、向后取约400ms截出一个心拍。采样率如果是360Hz那一个心拍大约200个采样点如果采样率是500Hz那就是约300个点。截出的每个心拍都对应一个标注。公开数据集比如常见的MIT-BIH心律失常数据自带注释可以映射成类别标签。我自己会把类别归并成几大类正常N、室上性异常S、室性异常V、融合波F、未知类Q因为原始标注有几十种细类直接做几十分类既难又不符合实际需求。5.2 类别不平衡别让“正常类”一家独大心电数据最典型的问题是正常样本数量远大于异常样本。我遇到的一次实验中正常心拍有7万多条而室性早搏只有不到5000条比例接近15:1。如果直接交叉熵训练模型只要全预测成正常类就能拿到93%以上的准确率但完全没有诊断价值。处理不平衡的思路有几个一是对异常类做重采样上采样或合成样本二是对正常类做下采样控制比例在2:1到5:1之间三是修改损失函数给少数类更高的权重或者用Focal Loss降低易分类样本的权重让模型把注意力放在难分的异常上四是评估指标别只看准确率重点看F1分数、特异度、敏感度尤其是少数类的召回率。5.3 一个心拍不够时可以引入上下文窗口单心拍分类虽然简单但会丢失相邻心跳之间的节奏信息。某些心律失常比如房颤本身就体现在RR间期不规律上只单看一个心拍很难判断。所以进阶做法是“单拍特征上下文特征”拼接每个样本不仅包括目标心拍的波形还附带前几个心拍的RR间期、相邻心拍的形态差异形成一个融合特征向量再分类。实测下来这种设计比纯单拍模型在多类心律失常分类上稳很多。5.4 心电信号迁移学习的可能性如果你在一个大型心电数据集上训练了一个多分类模型可以把它当作特征提取器冻结前几层只微调最后的分类层迁移到另一个小数据集上。这种方法非常适合标注样本稀缺的场景。我在小样本心电数据上试过迁移学习比从零训练准确率高10%以上。注意微调时学习率要调低比如1e-4避免破坏已经学到的通用心拍特征。6. 分类模型选型同一套模型三个场景的适配边界6.1 一维CNN所有场景的“万金油”但超参要跟着信号走一维CNN在CWRU轴承、HRRP、心电三个场景都能用但卷积核尺寸和网络深度要根据序列特点调整。CWRU振动信号采样率高局部冲击持续几个到几十个采样点小卷积核3或5就够了心电QRS波形的宽度通常100ms左右按采样率360Hz算大概36个点卷积核选9或15能更好覆盖单个波形但不至于跨太多拍HRRP的散射中心宽度较窄卷积核3就够了。一个通用调参技巧先用小网络快速跑通流程确认数据划分和评测逻辑正确再逐步加宽、加深网络。许多人一上来堆参数量跑了半天发现是数据泄露导致的高分白费力气。6.2 时序模型的取舍LSTM适合HRRP不适合轴承LSTM在HRRP识别中有一点用武之地因为有学者认为HRRP序列的散射点分布存在姿态演化上的序列依赖关系LSTM能够建模这种姿态变化。但轴承振动信号是周期性冲击卷积网络完全能搞定用LSTM反而是画蛇添足。我的习惯是除非你明确知道信号里存在长距离依赖关系值得建模否则优先用卷积把时序模型留给那些“顺序本身有意义”的数据。6.3 轻量化设计边缘设备上的一维分类现在不少场景要求模型部署在嵌入式设备上CWRU轴承检测的在线监测、可穿戴心电设备的拍分类都对模型的参数量和推理速度有要求。轻量化设计通常有三板斧深度可分离卷积替代标准卷积、全局平均池化替代全连接、量化到INT8或FP16。我用过一个极简模型参数量不到200K在CWRU跨负载测试上准确率还有90%左右部署到树莓派之类设备上完全够用。7. 实验评估与落地经验准确率高不一定是好模型7.1 正确划分训练/验证/测试集是“1”其余都是“0”做一维数据分类我会花最多时间在数据划分上。除了前面说的CWRU按工况分组划分外心电数据还要注意同一个病人的心拍不能同时出现在训练集和测试集中否则模型学过该病人的波形测试就会虚高。HRRP也类似相邻姿态角的样本不能跨越划分边界否则模型可能靠角域连续性“蒙对”。7.2 评估指标别只看准确率混淆矩阵才是真相多分类场景下准确率容易被多数类主导。我每次训练完成都会先看混淆矩阵。以CWRU为例如果“滚动体故障”被大量误判成“内圈故障”说明这两类特征本来就相似需要检查数据标签、重新设计特征而不是盲目调模型。心电分类更是如此敏感度对异常的检出率和特异度正常被误判为异常的比例要同时看。比如室性早搏检测的目标是别漏检宁可多报一点也要把这类高危异常抓住。具体阈值可以根据业务场景微调模型输出的概率分数在此处发挥作用。7.3 部署时别忘了“流式处理”很多人离线实验做得很漂亮一到现场部署就出问题。核心原因在于离线实验是整段信号切窗后批量分类部署时是边采边分类的流式场景。以轴承检测为例你需要设计滑动窗口队列每来一个采样点更新窗口每隔固定间隔输出一次分类结果并做一定的时间平滑比如连续3次都判为故障才报警避免单次误判触发误报警。心电设备也一样不可能等积累完整文件再分析必须实时检测R峰、实时切拍、实时分类还要处理脱落、饱和等异常数据。我在部署阶段踩过的坑是离线数据预处理里的滤波函数用到了filtfilt零相位双向滤波在线流式处理中无法直接使用否则会引入延迟。解决方案是换成同参数的因果滤波并做延迟补偿。这种细节书本上不会写。7.4 数据漂移现场数据永远比公开数据集“脏”公开数据集质量高、标注准但现场数据有传感器老化、安装位置偏移、工况突变等引入的分布漂移。CWRU数据模型迁移到实际产线会掉点这是必然的。应对办法是上线前做少量目标域数据微调部署后持续监控预测置信度分布一旦大批量样本的低置信度比例升高触发重新收集数据、重新训练的流程。8. 附一维数据分类完整流程速查清单整个流程做下来无论你最后做哪个方向都可以对照这张清单自查数据理解先看原始波形、采样率、通道数、类别分布别急着建模。数据划分按“来源”分组划分保证训练集和测试集不共享同一数据段或同一对象。预处理去噪、归一化、切段/检测事件、对齐HRRP尤其需要。数据增强按信号特点增广样本量注意不能改变信号的核心生理/物理意义。模型选型中小样本优先一维CNN有明确序列依赖再用LSTM/注意力。训练监控验证集F1值优先不用单看准确率。评估分析混淆矩阵定位具体混淆对反向指导特征设计。部署适配流式处理逻辑、模型轻量化、阈值调优、漂移监控。一维数据分类这个领域数据质量、数据划分和评估逻辑的重要性远大于模型架构本身。我在CWRU、HRRP、心电这三个差异巨大的场景里反复验证过同一个结论把流水线基建做扎实换什么信号来都稳。反过来模型再花哨划分一漏、评估一偏全部等于零。如果你正在研究其中一个方向建议先拿CWRU把流程跑通再迁移到其他信号上这套方法论通用性极强。