MATLAB 代码基于 CNN-LSTM 混合神经网络的电池 SOC(State of Charge)预测:
一、主要功能
该代码实现了一个电池 SOC 预测模型,使用卷积神经网络(CNN)与长短期记忆网络(LSTM)结合的混合架构,对电池的电流、电压等输入特征进行建模,预测其 SOC 值。
二、算法步骤
数据导入与预处理
- 从 Excel 文件读取数据,并进行采样(每10行取1行)。
- 划分训练集(70%)和测试集(30%)。
- 对输入输出数据进行归一化(缩放到 [0,1] 区间)。
数据重构与格式转换
- 将数据重塑为 4D 格式以适应 CNN-LSTM 输入。
- 转换为
cell数组格式以适配trainNetwork函数。
构建 CNN-LSTM 网络
- 使用序列输入层 → 序列折叠 → CNN 层 → LSTM 层 → 全连接层 → 回归输出层。
- 包含卷积、批量归一化、激活、池化、Dropout、LSTM 等层。
模型训练与预测
- 使用 Adam 优化器训练 100 个 epoch。
- 对训练集和测试集进行预测。
结果反归一化与评估
- 将预测结果还原至原始尺度。
- 计算 RMSE、R²、MAE、MAPE、RPD 等多种评估指标。
可视化分析
- 绘制特征曲线、相关性热力图、3D 散点图、预测对比图、误差分布图等。
三、技术路线
- 数据处理:采样 → 归一化 → 序列化 → 格式转换
- 模型架构:CNN(特征提取) + LSTM(时序建模) + 全连接(回归输出)
- 训练策略:Adam 优化器 + 分段学习率 + Dropout 正则化
- 评估体系:多指标评估 + 误差统计分析 + 图形化展示
四、公式原理
1. 归一化公式:
Xnorm=X−XminXmax−Xmin X_{\text{norm}} = \frac{X - X_{\min}}{X_{\max} - X_{\min}}Xnorm=Xmax−XminX−Xmin
2. 评估指标:
- RMSE:
RMSE=1n∑i=1n(yi−y^i)2 RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}RMSE=n1i=1∑n(yi−y^i)2 - R²:
R2=1−∑(yi−y^i)2∑(yi−yˉ)2 R^2 = 1 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2}R2=1−∑(yi−yˉ)2∑(yi−y^i)2 - MAE:
MAE=1n∑∣yi−y^i∣ MAE = \frac{1}{n} \sum |y_i - \hat{y}_i|MAE=n1∑∣yi−y^i∣ - MAPE:
MAPE=100%n∑∣yi−y^iyi∣ MAPE = \frac{100\%}{n} \sum \left| \frac{y_i - \hat{y}_i}{y_i} \right|MAPE=n100%∑yiyi−y^i
五、参数设定
| 参数 | 设定值 | 说明 |
|---|---|---|
| 训练集比例 | 70% | 用于模型训练 |
| 测试集比例 | 30% | 用于模型验证 |
| 输入维度 | 2(电流、电压) | 特征数量 |
| 输出维度 | 1(SOC) | 预测目标 |
| CNN 滤波器数 | 32, 64 | 两个卷积层 |
| LSTM 隐藏单元数 | 50 | 时序建模能力 |
| Dropout 率 | 0.2 | 防止过拟合 |
| 学习率 | 初始 0.01,每 50 轮下降为 0.1 倍 | 优化器设置 |
| 训练轮数 | 100 | 最大 epoch 数 |
六、运行环境
- 软件环境:MATLAB(需支持 Deep Learning Toolbox)
- 硬件建议:支持 GPU 加速(非必需,但可提升训练速度)
- 数据格式:Excel 文件(.xlsx),包含电流、电压、SOC 列
七、应用场景
该模型适用于:
- 电动汽车电池管理系统(BMS)
- 储能系统 SOC 估计
- 电池健康状态监测
- 实验室电池数据建模与分析