基于表面增强拉曼和近红外光谱技术的微藻油脂检测及种类鉴别软件设计【附代码】
✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1基于77 nm聚苯乙烯模板的银纳米增强基底制备与拉曼光谱预处理流程采用气液界面自组装法在单晶硅片上制备紧密排列的聚苯乙烯胶体晶体模板然后通过磁控溅射在模板上沉积厚度为60 nm的银膜移除模板后获得呈六方排列的三角形银纳米岛阵列基底。利用该基底采集斜生栅藻、小球藻等120个微藻样本的拉曼光谱激光波长为785 nm积分时间10 s。原始光谱首先经过自适应迭代重加权惩罚最小二乘基线校正其中λ参数取对数空间搜索最优值104.5迭代循环直到峰面积变化小于0.5%为止。随后进行多元散射校正以消除粒径差异带来的散射效应再使用谱图小波阈值去噪小波基为db8分解层数为4阈值选取规则为基于Stein无偏风险估计的自适应软阈值。预处理后的光谱在1095 cm⁻¹、1265 cm⁻¹和1652 cm⁻¹等处呈现清晰的不饱和脂肪酸特征峰信噪比从原始光谱的35.1 dB提升至78.3 dB为后续定量分析提供了高质量数据。2融合混沌映射与莱维飞行的改进灰狼算法优化BP神经网络油脂预测模型构建三层BP神经网络以竞争性自适应重加权采样和连续投影算法联合筛选出的22个特征波数作为输入输出为油脂含量。为克服BP网络易陷入局部极小和初始权值敏感问题采用改进灰狼算法进行全局优化。改进之处有三其一采用Cubic混沌映射生成初始种群使个体均匀分布在搜索空间边界内其二在灰狼位置更新公式中引入基于当前迭代次数的动态权重α狼的权重按余弦函数从0.5衰减至0.2β和δ狼权重相应增加保证后期局部精搜其三当最优个体停滞超过10代时对所有狼执行莱维飞行的随机扰动步长由Gamma分布生成扰动幅度随迭代逐步缩小。适应度函数为训练集和验证集的均方误差加权和训练300代后基于改进灰狼优化的BP模型预测集决定系数Rp²达到0.965均方根误差RMSEP为3.11 mg/g相对标准偏差RSD为4.1%相较于标准BP和GWO-BP分别提高了0.089和0.031证明该模型对微藻油脂含量快速预测具有高准确度和良好稳定性。3近红外光谱的格拉姆角场图像转换与SqueezeNet-LSTM混合模型藻种鉴别将四种微藻的浸入式近红外光谱900-1700 nm通过滑动窗口分段和Savitzky-Golay一阶导数平滑预处理后利用Gramian Angular Summation Field方法将一维光谱序列映射为二维图像。具体通过极坐标编码将每个光谱点的幅值映射为余弦角并计算不同时间步之间的余弦和形成GASF图像图像尺寸设为64×64。混合模型骨架为轻量级SqueezeNet v1.1将Fire模块中的3×3和1×1卷积结合后与双层LSTM串联LSTM的隐藏层维度为256用于捕捉图像横向频域依赖关系。分类器采用焦点损失函数替代交叉熵Gamma参数设为2.0缓解类别不平衡。在包含斜生栅藻、小球藻、螺旋藻和杜氏盐藻各60个样本的数据集上采用五折交叉验证GASF-SqueezeNet-LSTM的平均分类准确率达到99.2%召回率与精确率均超过98.8%显著优于直接使用CNN和一维卷积网络的对照模型且单样本推断时间在GPU上仅为4.3 ms完全满足实时在线检测需求。整套模型已集成至MATLAB App Designer开发的光谱快速分析软件中提供一键数据导入、预处理、特征挑选、建模与分类报告生成功能。import numpy as np import pandas as pd from scipy.signal import savgol_filter from sklearn.preprocessing import MinMaxScaler # 自适应迭代重加权惩罚最小二乘基线校正 def airPLS(x, lambda_1e4, order2, max_iter20): m len(x); w np.ones(m) D np.diff(np.eye(m), order, axis0) DTD lambda_ * D.T D for _ in range(max_iter): W np.diag(w) z np.linalg.solve(W DTD, w * x) d x - z dn d[d 0] if len(dn) 0: break std np.std(dn) if len(dn) 1 else 0.001 w_next np.zeros_like(x) w_next[d 0] 0 w_next[d 0] np.exp(d[d0] / (2 * std)) if np.linalg.norm(w - w_next) 1e-6: break w w_next return z # Gramian Angular Summation Field 转换 def gasf(series, normalizeTrue): if normalize: scaler MinMaxScaler(feature_range(-1, 1)) series scaler.fit_transform(series.reshape(-1,1)).flatten() phi np.arccos(series) gasf_img np.cos(np.add.outer(phi, phi)) return gasf_img # 改进灰狼优化位置更新 (核心部分) def update_positions_gwo(pop, alpha, beta, delta, a): dim alpha.shape[0]; pop_size pop.shape[0] for i in range(pop_size): r1, r2 np.random.rand(dim), np.random.rand(dim) A1 2*a*r1 - a; C1 2*r2 D_alpha np.abs(C1*alpha - pop[i]) X1 alpha - A1*D_alpha # beta和delta类似计算 r3, r4 np.random.rand(dim), np.random.rand(dim) A2 2*a*r3 - a; C2 2*r4 D_beta np.abs(C2*beta - pop[i]); X2 beta - A2*D_beta r5, r6 np.random.rand(dim), np.random.rand(dim) A3 2*a*r5 - a; C3 2*r6 D_delta np.abs(C3*delta - pop[i]); X3 delta - A3*D_delta # 动态权重 w_alpha, w_beta, w_delta 0.5-0.3*np.cos(np.pi*a[0]/2), 0.3, 0.2 pop[i] w_alpha*X1 w_beta*X2 w_delta*X3 # 莱维扰动 (简化) if np.random.rand() 0.1: levy np.random.standard_cauchy(dim) * 0.01 pop[i] levy return np.clip(pop, -1, 1)如有问题可以直接沟通