碳纤维增强树脂基复合材料(CFRP)的疲劳故障诊断,这几年一直是结构健康监测领域的热点。但我发现一个很有意思的现象:很多研究把重心压在算法上,拼命调模型、堆网络结构,结果一到实际数据上就露馅。原因很简单——疲劳诊断的根基不在模型,而在数据。载荷谱怎么来的、传感器怎么布的、损伤真值怎么标定的,这些环节稍微粗糙一点,后面算法做得再漂亮都是空中楼阁。
我参与过某跨平台结构的强度验证项目,也帮某实验室处理过一堆CFRP疲劳试验数据,最大的感慨就是:机器学习解决CFRP疲劳诊断问题,七成精力要花在数据获取和特征构造上,真正跑模型的时间反而不多。这篇就把整套思路拆开讲,重点放在标题里最容易被忽略的那一环——数据来源,连带把后续的特征处理、模型选型、实战踩坑一并说清楚。内容主要面向刚切入这个方向的研究生、工程师,也适合那些想把自己单位的疲劳试验数据盘活、搞点在线诊断功能的从业者。
1. 整体思路:为什么CFRP疲劳诊断要搭上机器学习
1.1 传统方法的瓶颈在哪里
CFRP的疲劳损伤和金属有本质区别。金属疲劳是裂纹萌生、扩展、失稳,规律相对清晰;CFRP是多种损伤模式耦合——基体开裂、纤维断裂、界面脱粘、分层扩展,而且这些损伤往往是隐蔽的,表面看不出明显变化,等肉眼可见时已经临近失效。
传统上,CFRP疲劳监测主要靠两类手段:一是依赖无损检测设备,比如超声C扫、X射线CT,精度高但设备贵、耗时长,不可能在线实时监测;二是靠声发射、应变等传感信号做人工判读,这非常依赖人的经验——同样是声发射信号突增,可能是纤维束断裂的前兆,也可能只是试件与夹具之间的摩擦噪声,新手和老手判读结果可能天差地别。
机器学习的价值就在这里:它可以把多源传感器信号自动映射到损伤状态,不用人盯着波形猜,而且能做到准实时甚至在线诊断。但前提是——喂进去的数据必须包含足够丰富的损伤响应信息。这就是为什么数据来源是整个项目的第一块基石,也是第一道槛。
1.2 一个典型的机器学习诊断管线
一套完整的CFRP疲劳故障诊断方案,大致可以拆成五个环节:
- 疲劳试验设计与数据采集:确定载荷谱、试件形式、传感器方案,采集原始信号。
- 数据预处理与特征工程:降噪、对齐、滑窗切分、特征提取。
- 数据集构建与标注:把数据切成样本,绑定损伤状态标签。
- 模型训练与验证:选分类或回归模型,评估诊断精度。
- 部署与在线诊断:把训练好的模型封装成可实时调用的诊断服务。
这里面的第1和第3步,恰恰是大多数文章一笔带过、但实际最耗时耗力的部分。尤其是标注环节。很多人以为标签就是"循环次数",直接拿疲劳寿命的百分比当标签,这在工程上是很有问题的。
1.3 数据来源在整个方案中的位置
回到标题里的"1、数据来源"。它不只是"数据从哪来"这么简单,它还决定了:
- 你能做分类(正常/损伤/失效)还是回归(预测剩余寿命);
- 特征该往哪个方向构造,比如有没有声发射信号、有没有应变场数据;
- 模型的泛化能力上限——数据覆盖的载荷水平、铺层角度、试件批次越单一,模型到新工况下就越容易失灵。
所以,在做任何模型选型之前,先把数据来源吃透,这是整个项目最值得花时间的地方。
2. 数据来源详解:一份可靠的CFRP疲劳数据是怎么攒出来的
2.1 疲劳试验平台的搭建逻辑
CFRP疲劳数据的源头,一定是疲劳试验机。最常见的是电液伺服疲劳试验系统,做拉-拉循环加载。典型的参数设置是:
- 加载波形:正弦波为主;
- 载荷比R(最小载荷与最大载荷之比):常见设置为0.1,这样试件始终处于拉伸状态,避免压缩工况下CFRP试件过早发生端部压溃;
- 加载频率:5–10 Hz为主。频率太高的话,粘弹性树脂基体会发热,试验结果会偏离真实疲劳行为;
- 载荷水平:通常取试件静强度的60%–85%之间设计几档。取太高试样很快断裂,采集不到多少早期损伤信息;取太低几百万次循环都不坏,试验周期拖不起。
具体到试件,标准做法是做成哑铃形或矩形板,两端粘贴加强片(玻璃纤维复合材料或者铝片),避免夹持区域应力集中导致断在夹具里。注意,如果断在加强片区域,这根试件的数据基本就废了——不是材料本身的疲劳行为,是装夹问题。
我见过一个项目,连续三根试件都断在夹持段,后来发现是加强片粘贴角度偏了,胶层厚度不均匀。这种问题对数据质量是致命打击,因为你会把"装夹缺陷导致的提前失效"误当成"材料在给定载荷水平下的真实寿命",后续建模全被带偏。
2.2 多源传感器布点与信号类型
单靠疲劳试验机的载荷和位移数据,能做粗粒度的寿命预测,但做不了细粒度的损伤状态识别。所以还要加传感器。实际工程中用得最多的是这几种:
声发射传感器:贴在试件表面,捕捉材料内部微损伤释放的弹性波。基体开裂、纤维断裂、界面脱粘这些损伤模式发出的声发射信号在幅值、频率、能量上都有差异。基体开裂通常是低幅值、低能量的连续型信号;纤维断裂是突发型高幅值信号,能量大、持续时间短。声发射是CFRP疲劳诊断里信息最丰富的一路信号。
应变片或者引伸计:测局部应变。疲劳加载过程中,刚度下降会表现为应变响应变化,可以用来跟踪损伤积累。
红外热像仪:疲劳过程中损伤区域会产热,热像图能反映损伤的位置和扩展趋势。这个设备贵,通常只在小样本的机理研究中使用,批量疲劳试验用不起。
传感器布点位置很讲究。声发射传感器一般贴在试件中部、距离根部有一定距离的位置;贴太近了,夹持区的摩擦噪声会淹没真实损伤信号。应变片则要贴在预判的损伤高发区——对正交铺层试件来说,通常是自由边附近。
2.3 损伤状态真值的标定手段
这是数据来源里最容易被忽视、也最关键的一道工序。机器学习需要标签,标签必须来自某种"能看见损伤真实状态"的手段。
常用的标定手段包括:
- 刚度降法:每循环一定次数就停机做一次准静态加载,测当前刚度,与初始刚度相比。工程上常以刚度下降10%–15%作为"显著损伤"的标志。这个方法便宜,但不能精细分辨损伤模式。
- 超声C扫与X射线CT:可以看见内部分层、孔隙、裂纹的空间分布。精度高,但设备贵、检测慢,只能在预设的循环节点停机检测。
- 扫描电镜断口分析:试件断裂后看断口,反推损伤演化过程。只能事后做,循环中间不能打断试验。
- 声发射实时特征:在线的声发射能量突增、事件数突增等,本身就是损伤状态的间接表征,可以用来自监督式标注。
实操中,最常用的组合方案是:在若干预设循环数节点(比如寿命的20%、40%、60%、80%)停机,做一次刚度测试和超声检测,把当时的损伤状态记录下来,然后把这个信息与前面采集到的时间序列信号对齐,生成带标签样本。
这里有个非常实际的细节:停机检测期间,传感器信号是断档的。等重新开机加载,信号的统计特征通常会发生突变——因为载荷重新施加的瞬态冲击、温度场变化都会干扰信号。做数据集时要特别小心,不要把停机重启后的瞬态段直接标成"损伤状态信号"。我处理数据时会把每次重启后的前几百个循环标记为"过渡段",单独剔掉,不进入训练集。
2.4 数据记录规范与元信息管理
数据来源的另一层含义,是要把数据采集的过程管理好。我经历过最崩溃的场面:某批次试验做完了,盘里的数据文件命名乱七八糟,有的文件只有载荷通道,有的文件传感器通道顺序和别的批次不一样,连采样率都不同——这种数据根本无法直接用于机器学习,只能花大量时间做对齐和清洗。
建议从一开始就定好数据记录规范:
- 每个试件一个独立目录;
- 文件名包含试件编号、载荷水平、循环数段信息,比如
CFRP-L01-60UFS-200K-cycle-04.csv; - 元数据单独存一份记录,包括铺层顺序、树脂体系、固化工艺参数、试件尺寸、试验环境温湿度、传感器型号与灵敏度系数、采样率、滤波器设置;
- 原始信号和特征文件分开存储,原始信号只读存档,所有处理结果单独存放。
这些元信息在后期的模型泛化分析里价值巨大。比如某批次试件的孔隙率偏高,模型的诊断准确率明显下降,如果没有工艺参数记录,你很难定位到原因。
2.5 关于公开数据集的现状
现实是残酷的:CFRP疲劳数据集的公开资源非常少。因为疲劳试验成本高、周期长,能做大量试验的机构通常不愿把数据公开。网上能找到的少量数据集,往往存在以下问题:
- 试件几何和铺层单一,不能覆盖多种工况;
- 传感器配置与你的测试平台不一致,迁移学习效果不稳定;
- 数据标注信息不完整,缺少失效模式对照。
所以这个方向的现状是:想认真做,基本只能靠自己的试验数据。如果还没条件做疲劳试验,可以考虑先用公开金属疲劳数据集或复合材料静态加载数据练手,把整个分析管线跑通,等数据到位了再迁移过来。这个"练手"阶段,重点在于把代码流程和特征提取框架打磨好,而不是追求模型精度。
3. 特征工程与数据集构建:把原始波形变成机器能学的样本
3.1 信号级预处理
传感器采集到的原始信号不能直接用,得先过几道预处理。
第一道是降噪。声发射信号尤其明显,工频干扰、电磁干扰、机械振动噪声都混在里面。常用的手段是带通滤波,声发射传感器本身的响应频段通常集中在100 kHz–1 MHz,可以在这个范围内做带通滤波;应变和位移通道是低频信号,用低通滤波就行,截止频率一般在几赫兹到几十赫兹,避免把高频噪声当特征。
第二道是去异常。试验过程中偶尔会出现传感器脱落、信号饱和、线缆松动等问题,产生超出正常范围的异常片段。这些片段如果不剔除,会严重干扰后续的统计特征计算。建议用一个简单的阈值规则:信号幅值超过设定值的片段直接丢弃,或者标记为无效段。
第三道是对齐。多通道信号之间可能存在相位延迟,尤其是声发射多通道定位时,各通道到达时间差会影响后续特征提取。批量处理时,可以用互相关函数估算延迟量并做对齐补偿。
3.2 时域、频域与时频特征
预处理完,就要把信号范成特征。特征分为三类,各有各的用处。
时域特征简单直观,包括均方根值、峰值、峰峰值、峭度、波形因子等。其中峭度对CFRP疲劳诊断特别有价值——基体开裂和纤维断裂都是突发性事件,会使信号分布出现明显的尖峰,峭度值会显著上升。所以峭度可以作为早期损伤的敏感指标。
频域特征用傅里叶变换把时域信号变到频域,提取主频、频谱质心、特定频段能量占比等。CFRP不同损伤模式的声发射信号频率分布有差异:基体开裂信号的能量多在低频段,纤维断裂信号则高频成分更丰富。通过分频段统计能量占比,可以间接判断当前主导的损伤模式。
时频特征用短时傅里叶变换或小波包分解,把信号的频率成分随时间的变化刻画出来。疲劳损伤是一个渐进的演化过程,时频特征能捕捉到"某频段能量随时间逐步增强"这样的趋势信息,这对预测剩余寿命特别有用。
从实操角度看,可以设计一个滑动窗口,窗口长度覆盖若干个循环周期,步长设为窗口的一半,不断滑动计算以上特征。窗口太短则统计不稳定,窗口太长则损伤演化信息被平均掉。我常用的窗口是覆盖50–100个加载循环,对5 Hz的加载频率来说就是10–20秒的数据段,信息量够,时间分辨率也不会太粗。
3.3 标签策略:分类还是回归
标签策略决定建模方向,得提前想清楚。
如果目标是"判断当前处于正常、损伤孕育、损伤扩展还是临近失效哪个阶段",那就是四分类问题。分类的标签可以在停机检测节点设置,比如刚度下降小于3%为正常,3%–8%为损伤孕育,8%–15%为损伤扩展,超过15%为临近失效。注意,这个划分标准不是固定的,必须结合具体材料体系和铺层工艺调整。
如果目标是"预测剩余疲劳寿命",那就是回归问题。回归的标签通常是:当前循环数除以该试件最终断裂循环数,得到一个0到1之间的数值,越接近1越接近失效。但这里有个大坑——训练时你已经知道这根试件最终断在哪,这属于"事后信息"。实际在线诊断时,你不知道剩余寿命是多少。所以回归模型的评估更严谨的做法是采用"留一试件法":训练时不包含该试件的未来信息,假装它还在服役,一步步预测,看预测误差如何累积。
在实际工程中,我更推荐先做分类任务。原因很简单:分类结果的解释成本低,运维人员一看"进入损伤扩展阶段"就知道该安排停机检查了,而"剩余寿命还有43.7%"这种数字反而难以采信。分类器跑顺了,再考虑加回归分支去预测剩余寿命。
3.4 样本切分与数据泄漏的坑
做时间序列机器学习,最忌讳的就是数据泄漏。如果随机地把同一个试件的数据切到训练集和测试集,模型其实已经见过这个试件的大部分信息,测试精度会虚高,一到新试件上就崩盘。
正确做法是按试件切分:一个试件的所有数据要么全在训练集,要么全在测试集。更严格的做法是"留一试件交叉验证",每轮拿一个试件当测试集,其余训练,最后汇总评估指标。这样评测出来的精度才是未来真实部署时的水平。
还有一个更隐蔽的泄漏:特征计算时用了未来信息。比如用整个文件的所有数据计算全局均值和标准差来做归一化,这就把未来信息偷渡进了当前样本。正确的做法是只统计训练集上的均值方差,存下来,以后对待测数据也用它来归一化。
另外,相邻窗口的特征是高度自相关的——同一个试件相邻的两个窗口,特征值几乎一样。这会带来什么后果?训练集里这些高度相似的样本会让模型过拟合得更快,评估指标也表现得过于乐观。缓解办法是在切分时把窗口之间拉开间隔,比如每隔若干个窗口才采样一个样本。
4. 模型选型与训练调参的实战经验
4.1 从传统模型到深度模型的适用场景
CFRP疲劳故障诊断的模型选型,不要一上来就上深度网络。先分清自己的数据量。
如果数据量在几百到几千个样本级别,随机森林、梯度提升树、支持向量机往往就够了。这类模型的优势是:对特征尺度不敏感、训练快、可解释性强,而且在小样本上不容易过拟合。随机森林还能输出特征重要性,帮你看哪些特征对诊断贡献最大——这个信息本身对理解损伤机理就有价值。
如果数据量大(几万样本以上)、还想做端到端学习,这时候1D卷积神经网络可以自动从原始波形里提取特征,省去手工特征工程。但代价是训练时间长、可解释性差,而且对数据质量要求更高。LSTM这类循环网络适合处理长程依赖,比如剩余寿命预测。不过实际效果往往不如"手工特征+梯度提升树"的组合来得稳——因为疲劳信号的时间依赖更多是趋势性的,手工构造的趋势特征已经能覆盖大部分信息。
4.2 一个可行的分类建模基线
我在实际项目中,第一次跑通CFRP疲劳诊断用的不是深度学习,而是随机森林。流程如下:
- 对每个循环窗口提取上述三类特征,构成特征向量;
- 按试件划分训练集和测试集(严格避免同一试件跨集合);
- 对特征做标准化,缺失值用中位数填充;
- 训练随机森林分类器,类别不平衡的话调整
class_weight。
基线模型的测试精度通常能做到85%以上,对四分类任务来说,这个数字已经具备工程参考价值了。之后再用深度模型去挑战90%以上的精度才有意义。这么做最大的好处是,万一后面深度模型效果不理想,你手里有一个可靠的基线兜底。
4.3 评估指标的取舍
CFRP疲劳诊断中,类别不平衡问题非常严重。因为试件的大部分寿命期间处于"正常"或"损伤孕育"阶段,临近失效阶段占比很小。如果只看准确率,哪怕模型把所有样本都判成正常,准确率也能到70%以上,但这个模型毫无用处。
必须看混淆矩阵、查准率、召回率和F1分数。对"临近失效"这类少数类,召回率尤其重要——漏报一次,可能就错过了最佳的停机检查窗口。实操时,可以画每条试件的预测状态随时间变化曲线,人工观察状态是否按时间顺序渐进演化。如果预测状态在时间轴上频繁跳变、来回振荡,说明模型不稳定,就算整体精度高,部署价值也要打个折扣。
4.4 调参过程中的几个实用技巧
第一,类别不平衡时,优先用balanced类别权重,不要急着过采样或欠采样。CFRP疲劳数据的时间自相关太强,直接对少数类做SMOTE这类合成采样,很容易生成出违背时间顺序的虚假样本,反而降低模型的物理可信度。
第二,特征筛选要用在模型训练之前。先用随机森林跑一遍特征重要性,把重要性接近零的特征剔掉;或者用相关性分析把高度共线的特征合并。这一步能明显提升模型的稳定性和训练速度。
第三,一定要监控"跨试件泛化误差"而非"同试件误差"。训练时多打印出逐试件的混淆矩阵,你就会发现模型在某些试件上表现极差——通常是那个试件的铺层质量或试验环境有特殊问题。这是宝贵的质量反馈信息。
5. 常见问题与排查技巧实录
5.1 传感器信号同步异常
多通道声发射采集经常出现各通道时间戳不一致的问题。现象是:同一损伤事件,各通道的到达时间差与理论值明显不符,后续的特征提取错位。
排查方法是:用铅笔芯折断做标准声发射源,在试件表面制造一个人工弹性波,看各通道的响应时间差是否落在预期范围。如果偏差过大,检查触发设置、采样时钟同步参数。这类问题必须在试验开工前排除掉,否则整个批次的数据同步性都不可靠。
5.2 载荷谱波动引起的特征漂移
疲劳试验机的载荷控制并不完美,实际施加的载荷幅值会有小幅波动。载荷一大,声发射能量整体变大,你可能会误判为"损伤加剧"。
解决思路是给特征加归一化条件。比如计算声发射能量特征时,同时记录当前实际载荷幅值,用能量除以载荷幅值的平方来标准化,消除载荷波动的影响。这个技巧在变幅载荷试验里尤其重要。
5.3 停机重启后的信号瞬态
前面提过,每次停机重启后,信号会出现一段幅值和能量都偏高的瞬态段。如果直接把这段数据当正常数据送进模型,有些试件会让模型的误报率显著上升。
我的处理办法是:在试验日志里手动记录每次停机重启的时间戳,在数据清洗时自动把重启后前200个循环标记为"瞬态段"并从训练和测试数据中剔除。同时在部署阶段,在线诊断系统也要加入"启动抑制"逻辑,刚开机的一段时间内不输出诊断结果。
5.4 小样本与试件个体差异
疲劳试验数据来之不易,每个试件成本不菲。做模型验证时样本量不足怎么办?
首先要意识到,试件个体差异是真实存在的。即使是同一批次的CFRP,孔隙率、纤维体积分数、固化度也存在细微差异,这会导致疲劳寿命分散性很大。所以模型的目标不是把每个试件的每个细节都拟合到位,而是学到跨试件通用的损伤演化规律。从这个角度说,增广数据的思路值得考虑——用变分自编码器或生成对抗网络生成与真实试件数据分布相似的伪样本。但正如前面所说,生成数据要小心保持时间顺序和物理规律,否则只是让模型学会了"看似合理的假数据",一到真试件上照样失效。
我更推荐的一个策略是迁移学习:先在有较多数据的同族材料(比如玻璃纤维复合材料)试验数据上预训练,再在少量CFRP数据上微调。这样既能利用已有数据中的损伤演化共性规律,又能保留CFRP特有的信号特征。这个思路在实际项目中验证下来,效果比单纯小样本训练要好不少。
5.5 数据集构建阶段的常见问题速查
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 测试精度高,换新试件精度暴跌 | 数据泄漏,同一试件跨训练/测试集 | 按试件切分,检查代码切分逻辑 |
| 模型把所有样本判为同一类 | 类别不平衡未处理 | 设置类别权重,检查少数类样本分布 |
| 预测状态频繁跳变 | 特征过于敏感,窗口太短 | 增大窗口长度,增加趋势类平滑特征 |
| 声发射信号全是高频噪声 | 传感器耦合不良,或滤波参数不当 | 检查传感器与试件表面耦合,复查带通滤波设置 |
| 某试件所有样本预测异常 | 试件装夹或粘贴有问题 | 查看该试件试验日志,检查加载曲线 |
6. 实操流程复盘与部署建议
6.1 从原始数据到可用模型的标准流程
再说一遍整套实操流程,这次是时间线视角,方便直接照着安排项目:
第1周:明确试验方案。定铺层、定载荷水平、定传感器布点、定停机检测节点、定数据记录规范。这个阶段叫"试验设计",表面上看跟机器学习没关系,实际上决定了后面所有环节的上限。
第2-4周:疲劳试验执行。每根试件从装夹、预载、正式加载到断裂,全程记录。中间按预设节点停机,做刚度测试和无损检测,更新标签信息。
第5-6周:数据处理与特征提取。统一文件格式、清洗异常段、生成滑窗特征、构建数据集。
第7周:基线模型训练。跑随机森林分类器,输出混淆矩阵和特征重要性,看哪个环节的数据质量有问题。
第8周以后:迭代优化。根据基线结果调整特征、补做试验、尝试深度学习模型、评估部署方案。
这套流程走下来,项目该踩的坑基本都踩过了,剩下的就是逐步打磨。
6.2 在线部署需要注意的差异
实验室里的离线诊断和现场在线诊断,是两个不同的问题。离线有完整的时间序列,在线却只有截至当前时刻的流式数据。部署时要注意:
特征计算窗口内数据不完整时,用前向填充或缓冲机制,不要报错或者输出空预测;模型输出的概率值要加滞后平滑,防止单点误判;诊断结果要与当前循环数、载荷水平一起展示,方便现场人员结合工况综合判断;模型更新要用定期重训练机制,比如每新增若干根试件数据后,用增量学习更新参数。
我自己在做部署时还加了一条规则:如果模型连续输出了"临近失效"状态,即使没有达到报警阈值,也会触发黄色预警并要求人工复核。因为CFRP临近失效的代价太高,宁可虚惊一场,也不能漏掉真实风险。
我个人在实操中的体会是,这类项目真正拉开差距的,往往不是谁的模型更精巧,而是谁的试验数据更规范、谁对数据里的物理含义理解更深。机器学习的模型结构总是那几个,但CFRP损伤信号里的微秒级波动、停机重启后的瞬态特征、不同铺层工艺带来的个体差异,才是真正需要靠经验积累去识别的东西。做完一整个流程,你会发现最宝贵的产出不只是那个能跑的分类器,还有一套被验证过、可复现、能持续积累的数据采集与处理规范。这套规范,才是换一个材料体系、换一种工况之后还能继续复用的真正资产。
最后再分享一个实战中发现的小技巧:在做特征记录时,把试件的静强度、刚度、纤维体积分数这类"工艺状态特征"也作为元特征拼进模型输入端。CFRP试件的疲劳行为对这些参数高度敏感,把这几个数值加进去,模型跨试件的泛化能力往往能提升一截。很多人只盯着信号特征,忽略了这几列不起眼的工艺参数,其实它们才是泛化能力的隐藏加分项。