✨ 长期致力于红外气体检测、直接激光吸收光谱技术、波长调制光谱技术、自适应滤波器、数字锁相放大器、甲烷传感器研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1数字正交锁相放大器与低功耗电路设计基于TMS320F28335 DSP集成双通道16位ADCAD7606和直接数字频率合成芯片AD9834。锁相放大器参考频率为调制频率的2倍f10kHz数字相干解调通过CORDIC算法实现正交混频。优化电源树采用TPS5430降压转换效率92%总功耗降至1.8W。在积分时间2秒时中红外甲烷检测系统激光中心波长3.3μm的检测灵敏度达到13ppbv。使用2.5m光程的多反射气室标定曲线线性度R²0.9997。动态范围0-2000ppmv响应时间T904秒。与传统模拟锁相放大器相比体积缩小60%成本降低45%。2递归最小二乘自适应滤波抑制电域噪声激光器驱动电流中含有1/f噪声表现为基线漂移。添加一路电域反馈通道采集驱动电流噪声作为RLS滤波器的参考输入。RLS参数遗忘因子λ0.998滤波器阶数32。仿真显示当信噪比为10dB时滤波后信噪比提升至21dB。气体实验室内环境下无RLS时检测灵敏度79ppbv积分时间6s加入RLS后改善至44ppbv。在添加人工电噪声幅度0.1V频率50Hz时灵敏度从158ppbv降至55ppbv抑制效果明显。该滤波器在FPGA中实现资源占用LUT 3200个工作频率50MHz。3最小均方自适应滤波抑制慢变噪声针对波长调制光谱中的温漂和光路漂移频率扫描频率设计双光路结构参考光路通过密封气室已知浓度测量光路通过采样气室。参考信号用于LMS自适应滤波步长μ0.02阶数64。在1.9秒积分时间下检测灵敏度从25ppbv提高到16ppbv。慢变漂移抑制因子达到3.2。现场连续运行48小时基线漂移小于3ppbv优于未滤波时的18ppbv。将传感器部署于煤矿巷道甲烷浓度报警阈值0.5%VOL响应时间2秒无误报。与催化燃烧传感器对比激光传感器寿命提高4倍无需频繁校准。import numpy as np from scipy.signal import lfilter class DigitalLockIn: def __init__(self, fs20000, f_ref10000): self.fs fs self.f_ref f_ref self.nco_phase 0.0 def demodulate(self, signal): t np.arange(len(signal)) / self.fs ref_i np.cos(2*np.pi*self.f_ref*2*t) # 2f解调 ref_q np.sin(2*np.pi*self.f_ref*2*t) I np.mean(signal * ref_i) Q np.mean(signal * ref_q) amplitude np.sqrt(I**2 Q**2) return amplitude class RLSFilter: def __init__(self, order32, lamb0.998): self.order order self.lamb lamb self.P np.eye(order) * 1000.0 self.w np.zeros(order) def update(self, x, d): # x: reference, d: desired x np.array(x).flatten() k self.P x / (self.lamb x self.P x) e d - self.w x self.w self.w k * e self.P (self.P - np.outer(k, x self.P)) / self.lamb return e class LMSFilter: def __init__(self, order64, mu0.02): self.order order self.mu mu self.w np.zeros(order) self.buffer np.zeros(order) def filter(self, x, d): self.buffer[1:] self.buffer[:-1] self.buffer[0] x y self.w self.buffer e d - y self.w self.mu * e * self.buffer return e # 测试锁相 fs20000 sig np.sin(2*np.pi*20000*np.arange(1000)/fs) 0.1*np.random.randn(1000) lockin DigitalLockIn(fsfs, f_ref10000) amp lockin.demodulate(sig) print(f锁相输出幅度 {amp:.4f}) # RLS测试 rls RLSFilter() ref_noise np.random.randn(500) desired 0.5*ref_noise 0.1*np.random.randn(500) for i in range(len(ref_noise)): e rls.update(ref_noise[i], desired[i]) print(fRLS最终误差方差 {np.var(e):.5f}) # LMS测试 lms LMSFilter() for i in range(500): e lms.filter(ref_noise[i], desired[i]) print(fLMS最终误差 {np.abs(e):.4f})