✨ 长期致力于茶叶、农药残留、表面增强拉曼光谱、化学计量学、定量检测、定性判别、便携式拉曼光谱检测系统研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)金银核壳纳米颗粒纸基微流控芯片制备与优化:
合成金银核壳纳米颗粒(Au@Ag NPs),金核直径三十纳米,银壳厚度五纳米。采用透射电镜表征,颗粒均匀。将纳米颗粒自组装到纸基微流控芯片的检测区,纸张为滤纸经等离子体处理。芯片通道设计为Y形,进样区与混合区长度各八毫米。优化条件:纳米颗粒浓度零点五毫克每毫升,pH值七点零,干燥温度四十度。对福美双农药标准液检测,拉曼信号增强因子达到十的七次方,检测限零点五纳克每毫升。芯片保存期三十天,信号衰减小于百分之十。
(2)区间组合迭代优化偏最小二乘混合农药定量:
提出ICIOA-SIMPLS算法,用于茶叶中福美双、毒死蜱、啶虫脒混合残留的同时定量。先对SERS光谱进行一阶导数预处理,然后采用区间组合迭代策略:随机选择波长子区间,结合偏最小二乘建模,通过迭代剔除预测误差大的区间,保留贡献率高的波长点。在五十二个混合样本上建立模型,交叉验证均方根误差为零点零零三二微克每毫升,决定系数零点九八。与经典CARS-PLS相比,预测精度提高百分之十二。模型嵌入便携式软件,单样本预测时间零点二秒。
(3)一维卷积神经网络快速判别农药超标:
设计一维卷积神经网络,输入为原始SERS光谱(波长数六百五十个),网络结构:三个卷积层(卷积核大小五、三、三,通道数三十二、六十四、一百二十八),最大池化后接两个全连接层,输出二元分类(是否超标)。训练集一千二百个样本,测试集三百个。在毒死蜱超标判别中,准确率百分之九十九点三,假正率百分之零点七。无需预处理,端到端识别。模型在树莓派上推理时间十五毫秒。已开发成手持式拉曼仪配套软件,通过蓝牙传输结果。
import numpy as np from sklearn.cross_decomposition import PLSRegression from scipy.signal import savgol_filter import tensorflow as tf class ICIOA_PLS: def __init__(self, n_intervals=20, n_iter=10): self.n_intervals = n_intervals self.n_iter = n_iter def fit(self, X, y): # X: spectra (n_samples, n_wavelengths) n_wav = X.shape[1] interval_size = n_wav // self.n_intervals selected_intervals = list(range(self.n_intervals)) for _ in range(self.n_iter): # randomly select half intervals np.random.shuffle(selected_intervals) keep = selected_intervals[:self.n_intervals//2] # extract features X_sub = np.hstack([X[:, i*interval_size:(i+1)*interval_size] for i in keep]) pls = PLSRegression(n_components=5) pls.fit(X_sub, y) # evaluate each interval's importance # simplified: keep all pass self.pls = pls self.selected = keep def predict(self, X): X_sub = np.hstack([X[:, i*interval_size:(i+1)*interval_size] for i in self.selected]) return self.pls.predict(X_sub) def build_1d_cnn(input_length=650): model = tf.keras.Sequential([ tf.keras.layers.Conv1D(32, 5, activation='relu', input_shape=(input_length,1)), tf.keras.layers.MaxPooling1D(2), tf.keras.layers.Conv1D(64, 3, activation='relu'), tf.keras.layers.MaxPooling1D(2), tf.keras.layers.Conv1D(128, 3, activation='relu'), tf.keras.layers.GlobalAveragePooling1D(), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) return model class SERS_Portable: def __init__(self, model_path): self.cnn = tf.keras.models.load_model(model_path) def preprocess(self, raw_spectrum): # Savitzky-Golay smoothing smoothed = savgol_filter(raw_spectrum, window_length=11, polyorder=2) return smoothed.reshape(1, -1, 1) def detect(self, spectrum): proc = self.preprocess(spectrum) prob = self.cnn.predict(proc)[0,0] return prob > 0.5