资讯详情

资讯详情

OptiSystem仿真FMCW激光雷达:从原理到链路搭建全流程

做激光雷达的人这几年绕不开FMCW线性调频连续波这个词。传统ToF激光雷达靠发射脉冲、数回波时间差来测距而FMCW走的是另一条路子把激光频率按线性规律周期性扫描发射信号和回波信号在接收端做相干混频得到一个频率和距离直接挂钩的拍频信号。把毫米波雷达里已经跑通几十年的那套思路搬到光波段器件选型、链路预算、信号处理、系统仿真设计全部要重新来一遍。光学仿真软件OptiSystem是做这件事的好抓手它不用硬件就能把激光器、调制器、信道、混频、探测整条链路搭出来适合想验证方案、又不想一上来就买几万块光学器件的朋友。这篇博文我按自己的实操过程把线性调频连续波激光雷达的系统仿真设计思路、完整链路搭建、参数计算、排坑经验一次说透目标很明确让看完的人能在OptiSystem里自己跑通一个可复现的FMCW激光雷达模型。1. 先弄明白FMCW激光雷达到底在测什么1.1 从一次“拍频”说起FMCW的测距和测速原理我见过不少新手一上来就打开OptiSystem点组件结果摆了一堆器件完全不知道自己在仿真什么。我建议先把数学关系搞清楚哪怕就是一张纸、一支笔把发射频率和回波频率画出来后面链路搭建才有依据。FMCW的核心是让激光器输出频率随时间线性变化。假设扫频带宽为B扫频周期为T_c那么调频斜率就是S B / T_c。发射信号的瞬时频率可以写成f_T(t) f0 S·t t从0到T_c如果前方距离R处有一个目标光在该距离上来回一次需要时间τ 2R / cc是真空中光速约3×10^8 m/s。那么在接收端回波信号的瞬时频率相当于发射信号在t - τ时刻的频率f_R(t) f_T(t - τ) f0 S·(t - τ)把一个本振信号可以理解为发射信号的参考副本和回波信号一起送进探测器非线性混频后会产生一个差频f_b |f_T(t) - f_R(t)| S·τ (B / T_c) · (2R / c)也就是说拍频f_b和目标距离R成正比。测出了拍频距离就出来了。我做一个具体的数值举例B取1 GHzT_c取10 μsS就是1×10^14 Hz/s目标在30 m处往返时间τ 200 ns理论拍频就是20 MHz。这个频率落在常见光电探测器的带宽范围内工程上完全可以处理。如果目标还有径向速度多普勒效应会让回波的载频整体平移一个多普勒频率f_D 2v / λ。三角波调频时上扫频段的拍频变成f_R - f_D下扫频段的拍频变成f_R f_D把两个拍频联立起来就能把距离和速度解耦出来。也就是说FMCW天然具备单发单收同时测距测速的能力这是它相比ToF的一个优势也是我在仿真里重点要复现的内容。1.2 为什么必须用相干混频直接探测做不到的事很多人会问激光器发射功率、回波功率我全都可以在OptiSystem里测直接探测回波的强度行不行行是行但测到的只有“有没有目标、目标反射率多高”没有频率信息。距离是编码在回波和本振的频率差里的想要把这个信息提取出来就必须让两束光在探测器里发生“干涉”这在光学上叫相干探测。打个比方。你要比较两列在铁轨上同向行驶列车之间的距离变化最直接的办法不是分别读出两列车的时速再心算而是坐在其中一列上看另一列相对你的速度差。FMCW的混频正是这种“相对运动”观察法本振光就好比你自己坐的列车回波光就是对面那辆拍频就是两车之间的“相对速度差”。你不需要知道光具体是多少THz只需要测出相对频率变化这个变化足够慢光电探测器完全跟得上。这也是FMCW激光雷达一般被称为“相干激光雷达”的原因。在OptiSystem仿真里我会把整个相干结构显式地搭出来发射光、本振光、90度光混频器、平衡探测器一个都不能少。这样跑通之后每个部分的物理角色都能对应上后续换参数、加噪声也有据可查。1.3 为什么用OptiSystem做仿真光学系统仿真软件不止OptiSystem一家VPIphotonics、Lumerical也都有各自优势。但从“系统级验证FMCW激光雷达链路”这个场景来看OptiSystem是我用得最顺手的组件库覆盖了光源、调制器、光纤/自由空间信道、混频器、探测器、频谱分析仪等一整套光通信和光传感链路支持参数扫描能快速看距离、带宽、衰减对拍频的影响图形化界面调试起来直观不用一上来写大量脚本。OptiSystem是商业软件官方提供试用授权校园或企业用户按需申请许可。但这不是阻塞点本文讲的是通用建链方法你手上的版本只要基础库完整就能照思路搭出来。我身边也有人用免费开源的替代品做过类似仿真但组件不全很多模块需要自己写传输函数适合进阶玩家不适合第一次做系统设计的新手。所以这篇文章里我默认你在用OptiSystem标准版本版本差异会在个别组件名称上提醒你。2. 仿真链路怎么搭组件选型与参数设计2.1 整体链路架构发射、传输、混频、采集FMCW激光雷达的仿真链路我的设计思路是分四段发射端、信道段、混频段、采集处理段。发射端产生线性的调频光信号同时分出一小部分功率作为本振光信道段模拟光在自由空间或者大气里传播到目标再返回的过程核心是时延和衰减混频段用相干接收结构把本振光和回波光混在一起光电探测器把拍频电信号做出来采集处理段用示波器和频谱分析仪观察波形、测量拍频再换算成距离。整条链路看起来和光纤通信相干接收系统有些类似但有一个关键差别信道的时延不是光纤里固定几十公里的延迟而是目标距离决定的往返时延。仿真中我用两种方式模拟延迟第一种是直接给一个固定光延迟最简单直观第二种是“光纤长度换算”用一段几米到几十米的单模光纤来代替自由空间传播因为光纤折射率会带来等效时延。两种方式都可以但第二种要注意折射率换算我后面会在常见问题里专门讲。2.2 核心参数设计先算清楚再动手我见过很多仿真跑出来的波形一团糟原因不是组件选错而是参数之间互相矛盾。比如扫频带宽100 MHz却指望分辨两个距离差10 cm的目标这是物理上不可能的。下面这几个参数我建议在设计链路之前先算一遍。距离分辨率FMCW的理论距离分辨率等于δR c / (2B)。B越大分辨率越高。1 GHz扫频带宽对应约15 cm分辨率10 GHz带宽对应1.5 cm。如果你仿真里设两个目标目标距离差小于δR频谱上就分不出两个峰这不是软件问题是物理极限。拍频频段拍频f_b (B / T_c)·(2R / c)。在给定距离范围后扫频周期T_c越短、扫频带宽B越大拍频就越高。拍频带宽要和光电探测器带宽、后续数据采集采样率匹配。常见商用光电探测器带宽在几十MHz到几GHz我一般把拍频控制在几十MHz以内这样后续处理压力小。扫频线性度理想情况下频率随时间线性变化拍频是一个单频信号。如果激光器或者调制器有非线性拍频会展宽、产生额外谐波直接影响测距精度和分辨率。仿真第一版我用理想的线性调频先保证链路通后面再人为加非线性项来评估容差。我整理了一份我自己常用的起始参数表适合在OptiSystem里做第一版验证。你需要按实际目标距离和硬件条件调整但至少能把链路跑通。参数量值说明激光中心频率193.1 THz对应1550 nm窗口扫频带宽B1 GHz决定距离分辨率约15 cm扫频周期T_c10 μs决定拍频范围和测速刷新率调频斜率S1×10^14 Hz/s由B/T_c算得目标距离R30 m往返时延200 ns本振光功率0 dBm保证混频效率回波光功率-20 dBm模拟大气衰减和反射损耗探测器带宽100 MHz远大于理论拍频20 MHz数据采样率2 GHz满足拍频信号采样需求这组参数我是怎么配的先把拍频定在20 MHz附近既方便后续频谱分析仪观察又不会因为采样率太高把仿真内存拖爆。如果你要跑更远距离拍频会变高要么降低S要么提高采样率看你的目标定你的参数。2.3 组件选型的工程判断光源、调制器、探测器如何匹配OptiSystem组件库里光源、调制器、探测器型号很多我的选型原则是先用最简单、最稳定的组件不要一上来就被细节压死。发射端光源我用连续波激光器CW Laser这是最接近真实可调谐激光器的模型。CW Laser的线宽参数很关键理想仿真里可以设到100 kHz量级如果线宽设得太宽比如几GHz回波和本振的相干性会变差拍频的相位噪声会很大峰形会变宽。在仿真里你未必能即时看到噪声效果但换算成实际系统这代表接收灵敏度损失。相位调制器或光IQ调制器用来生成线性调频包络如果直接用“User Defined Optical Signal”定义光场就不需要单独放调制器了这个我在下一章详细展开。这点差别不是偷懒而是仿真目标的取舍我们当前要验证的是雷达测距链路不是调制器非线性标定。接收端我推荐用90度光混频器加平衡探测器。很多人为了省事用一个普通2×2耦合器和一个单端探测器也能看到拍频但会丢掉相位信息也无法区分镜像频率。单端探测的共模噪声还比较大尤其后面加了ASE噪声、探测器热噪声之后你会明显感受到信噪比差距。既然是在做系统仿真我建议一开始就按产品形态搭避免后面换了结构又得重新调参数。探测器带宽和响应度也要提前匹配。拍频是20 MHz带宽100 MHz的器件足够但如果你把带宽设置成1 GHz不会影响中心频率测量只是引入更多高频噪声。响应度一般设0.8 A/W这接近商用InGaAs探测器水平后续仿真信号幅度都基于这个值。3. 手把手在OptiSystem里搭一套FMCW激光雷达3.1 发射端用线性调频光场把“频率扫描”造出来进入OptiSystem之后我建议先新建一个项目把全局仿真参数设好。在Simulation面板里把时间窗口设为10 μs也就是一个完整扫频周期采样率设为2 GHz对应总共2万个采样点这个规模在普通笔记本上跑起来很轻松。发射端的核心是产生瞬时频率随时间线性变化的光信号。我最推荐的方式是用OptiSystem的“User Defined Optical Signal”组件直接在光场复包络中定义E(t) A·exp(j·π·K·t²)其中K就是前面调频斜率S B / T_c。这样得到的瞬时频率从0线性增加到B完美满足线性调频。实际在组件参数里你需要填中心频率、功率以及包络表达式。不同版本叫法略有差异有的版本叫“User Defined Optical Signal”有的在“Signal Generators”目录底下原理是一样的。如果你用的版本不支持直接定义光场复包络退而求其次可以用CW Laser搭配相位调制器。相位调制器的驱动电压必须随时间二次增长因为输出光的瞬时频率偏移正比于驱动电压的导数想要线性扫频驱动电压就得是时间的二次函数。这种方案的毛病是驱动电压幅度往往大得不物理真实验证光学器件可行性时反而误导人。所以我更建议仿真第一版直接在光场层面定义把注意力放在链路预算和信号处理上。发射机和本振的分光处理在发射端放一个光分束器Optical Splitter分光比设90:10。90%作为发射光经过信道打向目标10%作为本振光直接进混频器。这个分光和实际相干雷达里的本地振荡器分出一路是一致的比例也可以调整本振功率够用就行不需要太大。3.2 模拟自由空间信道时延、衰减和噪声信道这一段在OptiSystem里可以用光纤模型模拟也可以用自由空间链路模型。我个人的习惯是第一版用“光纤延迟线衰减器”组合因为控制起来最直观。目标在30 m处往返光程60 m真空中时延200 ns。用光纤模拟时注意光纤折射率n≈1.5同样长度的光纤时延是真空的1.5倍也就是300 ns。所以要得到200 ns时延光纤长度需要设为200 ns除以1.5再乘以光速也就是约40 m。实际我用20 m或者30 m也经常直接填看你想验证链路延时还是想抠精确值。自由空间信道组件如果版本支持可以直接填距离和衰减系数那就更省事。衰减部分我用一个光衰减器模拟大气损耗和目标反射。目标反射率不可能100%加上光束发散、大气衰减回波功率通常会比发射功率低几十dB。我把发射光功率定在10 dBm回波功率按-20 dBm算中间就差了30 dB这个衰减数值不是凭空拍的接近中等距离漫反射目标的经验回波损耗。如果没有目标反射你看到的就是直流或者功率极小频谱分析仪根本看不到峰。噪声我建议第一版先不加。很多人想一步到位直接往里塞ASE噪声、热噪声结果拍频峰淹没在噪声里又找不到原因。先把干净链路跑通让20 MHz峰清晰可见确认没问题后再在接收机前面加光噪声源或者给探测器加热噪声模型观察灵敏度劣化这才是科学的调试顺序。3.3 接收混频与光电检测把光频差“翻译”成电频差接收端的搭建决定了你能不能看到拍频。我在仿真里用的组件是90度光混频器Optical Hybrid它的作用是把本振光和信号光按特定相位关系组合输出I/Q两路相干信号。每一路进入平衡光电探测器探测器输出的电流中就包含了拍频信号。具体连法从光分束器出来那10%本振经过一个可调光衰减器功率控制在0 dBm左右从目标回来的回波光经过信道后功率约-20 dBm。把这两路接入90度光混频器的两个输入端口混频器输出I、I-、Q、Q-四路光信号分别送到两个平衡探测器得到I路和Q路电信号。I路和Q路在理想情况下是相位差90°的拍频信号用它们可以判断目标是靠近还是远离。如果没有90度光混频器用一个2×2耦合器加一个单端探测器也能看到20 MHz峰只是看不到正交信息。我最初调试时就是用这种简化方案确认链路无误后再换成正交结构这样排错容易很多。如果你在组件库里找不到Optical Hybrid检查一下是不是在“Coherent Receiver”相关的库目录里别在无源器件里找半天。平衡探测器的参数里响应度设0.8 A/W带宽设100 MHz。探测器输出连接到示波器Oscilloscope Visualizer和射频频谱分析仪RF Spectrum Analyzer。到这里整条链路就闭环了。3.4 拍频信号处理与目标距离解算运行仿真后第一件事不是看频谱而是先看时域波形。I路输出应该是一个频率稳定的正弦波频率大约在20 MHz。如果在示波器上看到的波形毛刺很多先降低采样率或者放大时间轴看单个周期确认细节。接着看射频频谱分析仪在20 MHz附近应该有一个明显的峰。这个峰的位置就是拍频f_b。用前面公式换算R c·T_c·f_b / (2B)代入f_b20 MHzT_c10 μsB1 GHz得到的理论值就是30 m。如果仿真谱峰在19.9或者20.1 MHz检查你的时延设置是否和理论值有偏差常见原因我后面会讲。如果做三角波上下扫频你会看到两个拍频峰分别对应上扫频和下扫频。目标静止时两个峰重合目标运动时两个峰错开距离和速度由两个拍频的联合解算得出。这次我讲最主要的单目标静止场景速度和距离解耦的问题放到扩展部分再说。3.5 参数扫描与分辨率验证链路跑通之后最值得做的一件事是用OptiSystem的参数扫描功能验证测距的线性度。把目标距离设置成扫描变量比如从10 m到100 m步进10 m观察拍频峰值的变化。理想情况下拍频应该严格随着距离线性增长拟合出来的直线斜率和理论S·2/c基本一致。这一步能帮你发现混频结构之外的各种固定时延也能让你对“拍频就是距离”建立直观感觉。分辨率验证可以这样操作在原来单目标链路上并列一条并联延迟路径两条路径的回波合成一个信号等效于两个距离相近的目标。当两个目标距离差远大于15 cm时RF谱上能看到两个峰当距离差不断减小到15 cm以内两个峰会逐渐融合成一个包络。这个实验用动手方式理解了著名的“带宽决定距离分辨率”结论。参数扫描时注意每个扫描点都跑完整仿真时间窗。如果发现低频端拍频峰很挤适当增大扫频带宽B分辨率就会提升。这个过程中你能直观感受到带宽这东西不是白给的每种设计选择背后都有数学和物理约束。4. 仿真里容易踩的坑我帮你整理好了4.1 拍频峰值不明显或者噪声底很高这是新手跑完第一版最经常遇到的状况。谱仪上有东西在闪但你说不清哪个是拍频峰。我按优先级给你排查思路。先看回波光功率。-20 dBm对光探测器来说足够但如果你的衰减设成-60 dB噪声底就把峰盖住了或者根本测不到。先检查接收端所有衰减器数值确保回波功率不低于-30 dBm本振功率在0 dBm上下。再看偏振。相干探测的本质是两束光的电场矢量叠加如果本振和回波偏振正交拍频会消失。OptiSystem默认可能没有考虑偏振完全失配但有些版本默认偏振态会复合这时你要加偏振控制器Polarization Controller在本振路径上旋转到频谱峰最大即可。这个操作在实机上叫“偏振对齐”在仿真里同样是必修课。最后看分析带宽和窗口。射频分析仪的分辨率带宽如果太大会把20 MHz峰摊平扫频周期太短DFT频率分辨率不够也可能看不出峰。一般把仿真时间窗口设置为完整扫频周期频率分辨率就有1/T_c的量级对20 MHz峰来说足够。4.2 测距结果和理论值对不上如果拍频峰看到了但算出来的距离偏大或者偏小我遇到过的主要原因有这几个。一是光纤延时换算出错。如果你用一段光纤模拟自由空间直接填了30 m长度心想30 m距离嘛正好实际上光纤折射率使光速变慢实际时延是真空的1.5倍算出来的距离会偏大50%。正确做法是填L R / n也就是20 m。如果你用自由空间信道组件没有这个问题。二是固定时延没有扣除。链路里混频器、探测器、连接线都会引入额外的固定时延在远距离时影响不明显但在近距离仿真中可能造成系统性偏差。解决方法是先跑一个距离为0或者已知距离的标定场景把固定拍频偏移测出来再在数据处理时扣除。三是把镜像峰当成了真实峰。单端探测结构无法区分本振在上边带还是下边带可能产生镜像频率。这就是我反复建议用90度混频加平衡探测的原因I/Q两路联合可以消除镜像。4.3 仿真运行慢、内存占用高的优化办法OptiSystem仿真跑得慢十有八九是采样点太多。全局采样率初始值往往很高光载波193 THz对应的奈奎斯特条件要的采样率是几百THz但我们在系统级仿真中用的是基带包络不需要那么高。把采样率降到2 GHz时间窗10 μs总共2万个采样点这个规模跑起来非常快。另一个常见做法是把不用的信号分析仪关掉尤其是那种每步都刷新全波形的示波器非常影响速度。参数扫描时先扫描到大概位置再精扫小范围不要一上来就几十个点全量跑。还有用光衰减器和光延迟器件的地方尽量用理想组件不要加载不必要的物理模型比如不考虑色散的光纤段就比完整模型快得多。如果内存还是不够可以把时间窗拆成多段先跑前几个小的扫频周期验证链路再逐步延长。做FMCW系统设计采样率和时间窗的全局设置要一上来就想清楚不然等到参数扫描时才发现每跑一次要十分钟会非常折磨。5. 仿真做完之后还能往哪走5.1 多目标场景从单峰到多峰单目标验证通过之后最自然的扩展就是多目标。你可以在信道段并联多个“衰减器延迟”的组合模拟不同距离、不同反射率的目标。多目标回波同时进入接收机频谱分析仪上会出现多个拍频峰每个峰对应一个目标距离。这里面有两件有趣的事。一是分辨率受限当两个目标距离差小于δR时两个峰融合成一个无法分辨。这逼着你思考“提高带宽”的真正工程代价。二是远近目标动态范围远处目标回波弱拍频峰低可能被近处强目标的旁瓣盖住你可以试着用窗函数降低旁瓣这其实就是雷达信号处理里最基本的窗函数设计思路。我在跑多目标时喜欢把其中一个目标设成10 m另一个设成60 m衰减分别设-15 dB和-30 dB模拟一个强近目标和一个弱远目标。这个场景最能激发你对接收动态范围和灵敏度预算的思考。5.2 调制非线性对测距精度的影响理想线性调频只存在于教科书和仿真第一版里。真实激光器的调频曲线往往存在非线性尤其电流调谐的半导体激光器频率随电流的响应不是纯直线。仿真中我可以把User Defined Optical Signal里的相位表达式从二次函数改成高次函数比如加一个三次项再跑一次链路。效果是拍频峰展宽、峰值降低严重时甚至分裂出伪峰。这解释了一个工程现象FMCW激光雷达对调频非线性非常敏感系统方案中经常需要加预失真电路或者用参考干涉仪实时测线性度再做数字域补偿。你在仿真里看到的那一点点非线性就足够理解为什么实际系统要比仿真复杂这么多。5.3 联合仿真与硬件实测的衔接思路OptiSystem做的还是“光链路仿真”真正要把FMCW激光雷达做成产品还需要信号处理算法和系统控制。拍频信号处理方向可以把OptiSystem导出的I/Q数据送到MATLAB做FFT、CFAR检测、距离解算和点云生成。甚至可以用MATLAB引擎在OptiSystem里做联合仿真实现参数闭环优化。如果后面有硬件平台我建议仿真和实测并行仿真用来做链路预算和系统容差分析实测用来校准衰减系数、噪声基底、响应度等实践参数。实测数据回来以后把非理想参数反哺回仿真模型这样一个“仿真指导实测、实测修正仿真”的闭环才是系统设计最稳的路径。我个人做FMCW雷达的体会是仿真最大的价值不是省掉实验经费而是能让你把每个参数的影响单独拆开看。拍频不明显了、测距偏了、谱峰裂开了每排除一个问题你对整个系统工作机制的理解都会深一层。所以别急着一次性把噪声、非线性、偏振、多目标全部堆上去一步一步来。先按本文搭通单目标理想链路确认20 MHz稳定出现再逐步加料。我用这个流程带过不少人几乎都能在一个晚上跑通核心链路第二天的精力就能放在真正需要深思的问题上。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →