
做量子密钥分发QKD系统的人迟早会在光路子系统上摔几跤。我当年第一次搭相位编码链路连续一周干涉可见度上不去最后排查下来居然是温度漂移把光纤臂长带偏了。所以这个系列的第二篇我打算把光路子系统单独拎出来聊透从光源、衰减、调制到不等臂干涉仪、单光子探测和同步把设计思路和实操细节一次讲清楚。这篇文章适合正在搭QKD原型机的学生、刚接触量子通信的工程师以及想搞明白“光子到底怎么编码和测量”的非光学专业朋友。我会用自己做过的链路做例子给出可以直接参考的设计参数、调试步骤和避坑经验。看完之后你应该能对一套实验室级QKD系统的光路结构有一个完整认识也知道该从哪里下手开始搭。1. 光路子系统整体架构从端到端先搭一个框架1.1 光路子系统在整个QKD系统里扮演什么角色QKD的本质是发送端Alice把密钥比特编码到单个光子的量子态上接收端Bob通过测量来提取这些比特。如果中间存在窃听者任何测量行为都会不可避免地扰动量子态两端通过比对误码率就能发现异常。而光路子系统就是负责“产生光子、编码量子态、传输、解码、探测”的所有光学硬件和光机结构的集合。从模块上看一套典型的实验室QKD光路包含这么几个部分光源模块通常是一台窄线宽脉冲激光器输出一定重复频率的光脉冲。编码模块通过强度调制器、相位调制器把密钥比特编码到光子的某个自由度上。衰减模块把宏观光强衰减到单光子量级让每个脉冲的平均光子数低于0.1。信道传输在实验室里就是一段标准单模光纤在工程场景下可能是几十公里甚至上百公里的光缆。解码/干涉模块Bob端的非平衡干涉仪用来把相位信息转化成强度信息。探测模块单光子探测器通常还要配合门控和同步电路。在动手设计之前先别急着选器件要先把整个链路的“损耗预算”和“时序关系”算明白。我见过不少同学上来就买一堆光学元件装起来之后发现计数率低到探测器根本起不了门控就是因为没有提前估算损耗也没有统一设计时序。1.2 编码方案怎么选偏振、相位还是时间相位编码方案是整个光路设计的核心决策。量子密钥分发最常见的三种编码方式各有优劣我列一张表方便对比编码方案基本原理优点缺点适合场景偏振编码用光子的偏振方向如水平/垂直、45°/135°表示比特实现直观调制器件简单普通光纤中偏振态随机漂移需要保偏光纤或实时补偿短距离、自由空间链路相位编码通过非平衡干涉仪引入相位差0/π编码对偏振扰动相对鲁棒技术成熟需要干涉仪稳定性好温度敏感光纤链路经典BB84协议时间相位编码用光子到达时间定义比特位用相位定义额外维度抗环境扰动能力强适合长距离系统结构复杂时序要求高长距离光纤QKD、商用系统我自己的经验是在实验室环境里单不等臂干涉仪加相位编码是最容易复现、也最能讲清楚原理的方案。它的调制逻辑直接对应BB84协议的双基选择调试时也方便用连续光逐级排查问题。偏振编码虽然看着简单但普通单模光纤里面的偏振态会被温度、应力随机改变不用保偏光纤的话干涉可见度会飘到你怀疑人生。而时间相位编码的抗扰性最好但探测器门控、多时间片解码的复杂度会成倍上升初期不建议碰。1.3 先做链路损耗预算再定器件参数一条光路的器件参数很大程度上是由损耗预算决定的。我建议先画一张表把每一段的预期损耗写下来再去反推光源功率和探测器灵敏度。举个例子假设我选1550nm波长设计链路如下激光器出纤功率0dBm经过编码和衰减模块总损耗约12dB调制器、耦合器、连接器传输一段2km单模光纤损耗约0.4dBBob端干涉仪和光纤跳线损耗约8dB最后到达探测器的光功率大概是0dBm - 12dB - 0.4dB - 8dB -20.4dBm。这个功率显然不是单光子水平是因为衰减模块还没有算进去。衰减模块的目的是把每个脉冲的平均光子数降到μ≈0.1左右。1550nm单光子的能量大约是1.28×10⁻¹⁹焦耳如果脉冲重复频率是1MHz那么平均光功率要达到P μ × hν × f ≈ 1.28×10⁻¹⁴瓦换算成dBm大约是-109dBm。也就是说从-20.4dBm再衰减掉将近90dB才能进入单光子量级。这个数值听起来很夸张实际操作也确实需要二级甚至三级衰减否则一个大功率衰减器很难同时保证精度和稳定性。结论就是损耗预算不是最后验证用的而是最开始定的。它决定了你需要几级衰减、探测器需要多少效率、同步光能不能从同一光源分出来。2. 光源、衰减与调制把单光子信号稳定地造出来2.1 光源选型为什么DFB激光器是起步首选对于相位编码QKD光源的核心要求是窄线宽、波长稳定、能输出高速脉冲。市场上常见的窄线宽激光器有DFB分布反馈激光器、外腔半导体激光器和光纤激光器。DFB激光器因为体积小、驱动简单、线宽能做到几百kHz到几MHz是实验室搭建QKD链路的性价比之选。为什么要在意线宽因为非平衡干涉仪的两臂之间存在一个时延差Δt同一光脉冲分成两路之后要经过不同长度的光纤再干涉。如果激光器的相干时间小于Δt两路光在第二个耦合器处叠加时已经不再相干干涉条纹就会消失。粗略估计线宽Δν要远小于1/Δt。比如时延差取5ns对应1/Δt是200MHz那么线宽只有远小于200MHz才能保证干涉清晰。常用DFB激光器的线宽通常在MHz量级完全够用。另外波长建议优先选1550nm。一个是这个波段在光纤里的损耗最低约0.2dB/km有利于后续扩展到长距离另一个是1550nm的InGaAs单光子探测器技术最成熟门控模式、暗计数等指标都能满足QKD需求。1310nm虽然色散更小但探测器选项要少很多。2.2 衰减链路怎么搭从毫瓦到单光子从宏观光强到单光子水平衰减不是“随便串几个衰减器”这么简单。我最初只用一个可调衰减器结果发现衰减量一大输出功率就不稳定插损波动对计数率影响极其明显。后来改成二级衰减结构先用一个6dB到10dB的光衰减器把功率粗调到安全范围再用一个高精度可调衰减器0到60dB做精确调整最后再加一个固定衰减器兜底确保探测器端绝对不会因为意外出现强光。衰减器选型要注意两点一个是回波损耗光纤连接器端面反射回来的光会干扰光源稳定性所以单模光纤链路里最好加隔离器另一个是精度和重复性实验中需要记录不同诱骗态强度衰减器至少要能稳定复现几个强度档位。关于“衰减到单光子水平”还一个问题就是衰减后的脉冲仍然服从相干态的泊松分布也就是说即使平均光子数μ0.1依然有概率出现含两个以上光子的脉冲。这就是QKD系统设计里必须考虑诱骗态协议的原因——通过随机发送不同强度的光脉冲来探测光子数分裂攻击。实验室初步搭建时可以先不管协议细节但硬件上一定要预留调节强度的能力。2.3 相位调制和强度调制偏置点与控制电压编码模块里相位调制器是核心。常用的铌酸锂LiNbO₃相位调制器通过外加电场改变晶体折射率从而改变光相位。驱动信号通常是几十伏量级的脉冲需要配合一个偏置控制器稳定工作点。这里有个很关键的实操点相位调制器的半波电压Vπ随温度会有漂移如果直接用固定电压驱动编码相位会偏掉。我刚搭系统时遇到过误码率突然从3%涨到10%排查很久才发现是因为实验室内空调温度变化导致调制器偏置点漂移。解决办法有两个一是给调制器装温控封装二是定期校准偏置电压用测试计数率最大/最小来反推相位零点。强度调制器在某些方案里也需要比如制备诱骗态时就要精确控制脉冲强度。但如果你只是在跑基础BB84强度调制可以先不做用固定衰减器也能凑合。不过一旦要验证更完整的协议强度调制器就是绕不开的模块建议在设计光路时就把它的插损预算预留进去。2.4 脉冲时序和电驱动信号怎么对齐光路子系统不光是光学器件电信号时序同样直接影响编码质量。光源的触发信号、相位调制器的驱动信号、衰减后的脉冲到达Bob端的时间这三者必须严格对应。我通常会用一个可编程延迟发生器来调对齐关系先用示波器接快速光电探测器看脉冲序列再逐级调整延迟值让调制窗口正好套住光脉冲的顶部。在实验记录里我还发现调制驱动信号的上升沿对相位编码质量影响很大。如果上升沿太慢光脉冲的一部分处于相位过渡区等于同时存在两个相位这会直接抬高误码率。所以驱动源的选择上不要只盯着电压幅度还要看压摆率V/ns。目前的商用脉冲源或者自制的雪崩晶体管驱动电路只要上升沿能做到1ns量级基本就不会成为系统瓶颈。3. 解码端核心不等臂干涉仪与相位编码的实现3.1 不等臂马赫-曾德尔干涉仪的工作原理相位编码的解码核心是一台非平衡马赫-曾德尔干涉仪。它由一个分束器、一条短臂、一条长臂和一个合束器组成。光脉冲进入后分成两路短臂一路先到合束器长臂一路后到于是在合束器输出端出现三个时间片短臂-短臂的早片、短臂-长臂与长臂-短臂的重合片、长臂-长臂的晚片。其中重合片是两路光同时到达叠加形成的相位差直接决定干涉结果是增强还是相消。如果Alice端也有一个完全相同的非平衡干涉仪情况会更直观。脉冲先经过Alice的干涉仪被劈成早、晚两个时间片传输到Bob的干涉仪后再一次被劈开。真正携带干涉信息的是那个“早-晚”和“晚-早”重合的时间片。Alice和Bob的相位调制度不同重合片输出强度就会不同Bob端据此解码出0或1。而BB84协议里的两个测量基实现方式就是Bob端随机选择在长臂或短臂上施加0或π/2的附加相位偏置。如果Bob的基矢和Alice一致重合片会呈现确定性的相长或相消如果基矢不一致结果随机探测到两个输出端口的概率各占一半。3.2 时延差怎么选5ns还是10ns不等臂干涉仪的关键参数是两臂的光程差也就是时延差Δt。这个值不能太小太小的话探测器的门控窗口和三个时间片会重叠根本没法定提取重合片也不能太大太大会超出激光器的相干时间干涉可见度下降。具体到计算你还需要考虑脉冲重复频率。如果重复频率是1MHz那么脉冲间隔是1000nsΔt取5ns到20ns都没有问题。如果重复频率提高到100MHz脉冲间隔只有10nsΔt就必须小于10ns否则不同脉冲的时间片会串扰。我常用的起步参数是重复频率1MHzΔt5ns。这样对应两臂光纤长度差大约1米光在光纤中的速度大约是2×10⁸m/s1米约5ns在实验台上摊开完全可行干涉可见度也容易保证。需要特别说明的是Δt5ns时三个时间片的间隔是5ns。如果Bob端单光子探测器的门宽是1ns就能比较干净地把重合片挑出来。如果门宽太大比如3ns以上早片和重合片会混合计数就会变得不可靠。所以探测器门控参数和干涉仪时延差必须联动设计。3.3 法拉第镜结构彻底告别偏振漂移普通单模光纤里的偏振漂移是相位编码系统最大的敌人之一。虽然相位编码比偏振编码抗扰但如果干涉仪两臂的光在合束点偏振方向不匹配干涉可见度还是会大打折扣。早期方案是用保偏光纤做干涉仪但保偏光纤价格高、熔接要求高还要注意连接器角度对准实验调试很痛苦。更聪明的做法是采用法拉第镜结构也就是所谓的“即插即用”方案。它的思想是Bob端发一个强光脉冲到AliceAlice用相位调制器调制后通过法拉第镜反射回来返回光路的偏振态会被自动补偿到与入射方向正交从而抵消光纤中的双折射扰动。这套方案的好处是信号光往返一趟往返的相位噪声和偏振变化会自然抵消干涉可见度相当稳定。如果你只是在实验桌上搭单程链路可以暂时不用法拉第镜但必须给干涉仪加温控或者放在减震隔离的光学平台上。我曾经在普通实验桌上搭过一次旁边有人走过干涉可见度能掉好几个百分点。换成光学平台并盖上遮光罩之后数据立刻稳定下来。3.4 干涉可见度的测量方法干涉可见度是衡量解码光路质量的核心指标计算公式是V (Imax - Imin) / (Imax Imin)。测量方法很直接不衰减到单光子水平先用连续光或宏脉冲光送入系统用快速光电探测器接收Bob端重合时间片的强度。然后缓慢改变Bob的相位偏置看输出强度在最大值和最小值之间变化据此计算出可见度。做这一步调试时强光下能看到非常直观的正弦干涉曲线。如果曲线对比度不够先检查偏振如果曲线有随机跳变考虑机械稳定性和温度漂移如果根本找不到正弦变化多半是时间片没有对准或者干涉仪两臂的光程差超出了光源的相干长度。我一般要求可见度做到95%以上再继续做单光子实验否则后续误码率很难压下来。4. 探测器、同步与整条链路的联调4.1 单光子探测器选型SPAD和SNSPD怎么取舍1550nm波段最常用的单光子探测器是InGaAs/InP雪崩光电二极管SPAD工作在盖革模式下增益极高单个光子就能触发一次雪崩脉冲。它的优点是体积小、价格可控、不需要超低温系统用热电制冷就能把工作温度降到-30℃左右缺点是存在死时间、后脉冲概率暗计数也比超导探测器高一个量级。如果预算和实验室条件允许超导纳米线单光子探测器SNSPD是另一个选择。它的时间抖动更小、暗计数率可以做到几十Hz以下几乎不拖累系统误码率但需要一套低温制冷系统光耦合也更麻烦。对于入门级的“设计与实现”项目SPAD完全够用重点是学会合理设置门控窗口和死时间参数。挑选SPAD时有几个指标要重点看探测效率通常在10%到25%越高越好。暗计数率在门控模式下用“每门暗计数概率”表示比如1×10⁻⁵对应1MHz门频约10Hz。后脉冲概率一般几%到十几%需要通过足够长的死时间压制。时间抖动影响时间片区分越小越好。4.2 同步方案让Bob知道光子什么时候来单光子探测器不可能一直开着等待光子那样暗计数和噪声会把信号完全淹没。实际方案是“门控探测”只在光子预期到达的极短时间窗口内打开探测器。这就要求Bob必须通过一个同步信号确切知道Alice发出的每个光脉冲什么时候到达。最简单的同步方式是电同步用一根电缆把Alice的触发信号送到Bob。实验室里几百米到几公里的距离问题不大但距离一旦拉长电信号的损耗和延迟就不太行了。更实用的方案是光同步从同一时钟源分出一路强同步光比如1310nm在Bob端用高速PIN管恢复出电触发信号。同步光和信号光可以用波分复用器合/分避免互相干扰。我在调试时踩过一个坑同步光电探测器的输出延迟会随光功率变化而实验过程中光功率会因连接器微移产生波动导致同步信号抖动间接推高误码率。后来我把同步光功率调得较高并给它加了一级限幅放大抖动才稳定下来。初学者搭环境时可以先给同步探测留出一路示波器观测口方便随时看时序波形。4.3 链路联调从连续光到单光子逐级切换整条链路的联调顺序我建议按下面的思路来用连续光测试每个模块的插损和波形。用脉冲光跑通整个光路在Bob端用快速探测器扫时间确认三个时间片的位置和幅度。不加衰减测干涉可见度把相位偏置和时序调到位。加入衰减用单光子探测器替换快速探测器开始看计数。调整门控窗口把重合时间片的计数率和暗计数比值调到最优。最后才接入量子密钥分发协议软件进行基矢筛选和误码率统计。这个顺序的核心逻辑是每一级都在上一级参数全部正常之后再往下走。我见过有人一上来就接单光子探测器结果连光路通没通都不知道。先用强光确认干涉、再用弱光确认计数一步一步来问题定位会快很多。4.4 链路损耗和计数率的对应关系单光子实验阶段你一定会算一件事理论上应该每秒看到多少个计数和实际计数器上的数差多少。以1MHz重复频率、μ0.1、Bob端干涉仪通过率约0.3、探测器效率15%为例有效探测概率大约是0.1×0.3×0.150.0045也就是每1000个脉冲有4.5个计数换算到1MHz就是4500个计数/秒。经过基矢匹配和重合时间片筛选之后有效计数还会进一步减半。如果实测计数率和理论估算差太多先别怀疑协议用强光分段测插损找到损耗异常点才是关键。我会在干涉仪前后、衰减模块前后都留一个插拔的光纤跳线方便随时用光功率计逐段测量这样排查起来非常省时间。5. 调试中的常见问题与排查技巧实录5.1 干涉可见度上不去的四类原因如果你发现干涉曲线对比度低不要急着调相位调制器先按顺序检查偏振失配两路光在合束点偏振不一致。检查方法是在合束器前加偏振控制器看可见度是否随偏振变化。如果是法拉第镜结构直接看反射链路偏振补偿是否正常。时间片重叠重合片和早/晚片没有完全分开探测器或示波器看到的是混合信号。检查时延差确认两臂光纤长度差与设计值一致。光源相干性不足激光器线宽太宽两臂光不能完全相消。可以尝试换成窄线宽激光器或者缩短时延差。机械/温度漂移干涉仪两臂光纤受振动或温度影响发生微小形变相位随机漂移。这通常表现为可见度读数缓慢波动解决手段是温控封装和隔振平台。5.2 计数率异常偏低多半是时序问题单光子计数率低不是探测器坏了而是门控窗口没和光子对上。我的排查套路是把整个系统恢复到“强光脉冲模式”用快速光电探测器看Bob端的时间波形确定重合片到达探测器的时间点然后切换到单光子探测器用延迟发生器一个一个扫描门控延迟值观察计数率变化找到最优点。常见误区是只调延迟不调门宽。门宽太宽会让后脉冲和暗计数混进来太窄又会错过光子信号。我通常在1ns到3ns之间来回试选择计数率/暗计数比值最大的门宽而不是单纯追求计数率最大。5.3 误码率偏高压不下来的几个隐藏因素QKD误码率高了第一反应可能是干涉可见度不好但如果可见度已经调到95%以上问题往往出在更隐蔽的环节相位调制器的驱动电压失真检查脉冲平台的平坦度如果有过冲或者振铃光子就可能被编码成错误相位。暗计数占比过高每1MHz门频只有几十个暗计数时影响不大但如果光源衰减过多、有效计数率太低暗计数占比就会飙升误码率自然上去。后脉冲干扰死时间设置太短上一个光子的雪崩脉冲残留到下一个门控窗口产生虚假计数。把死时间调到几十纳秒量级再看误码率。时间片串扰如果Bob端干涉仪的时延差和探测器的门宽设计不匹配早片和重合片会在时间上部分重叠。这种问题仅凭计数率看不出来需要做时间相关性测量才能发现。5.4 我用顺手的几件调试工具最后分享几个我常年放在实验台上的东西都是不起眼但能救命的光功率计加上一个可插拔的FC/APC跳线用来逐段测插损。一个快速光电探测器带宽2GHz以上配合示波器看脉冲波形和时间片。一个可编程延迟发生器用来微调所有触发信号。标签纸和记号笔给每一根光纤和同轴线做标记。这个看似废话但光路调乱之后没有标签简直寸步难行。量子密钥分发系统的设计与实现看起来是个高深的课题但落到光路子系统上其实就是把“光的产生、编码、衰减、干涉、探测”五个环节一个个抠稳定。哪一环飘了整条链路的误码率就会诚实地反映出来。国内外做QKD的组多真正能稳定跑出漂亮误码率的系统无一不是在光路稳定性上下了死功夫。希望这篇拆解能让你少走点弯路。