
云深之无迹
纵是相见,亦如不见,潇湘泪雨,执念何苦。
1719篇原创内容
公众号
周末啦~写一个学术味道浓的东西,放松一下!
这是一篇Nature光上面的文章,首次展示了基于Kerr孤子微梳(Kerr soliton microcomb)的光电混合ADC系统,实现了320 GHz的采集带宽(对应640 GSa/s的采样率),创下了目前ADC的带宽记录。(我就知道,电到了尽头,别的领域才能发展)
本篇文章比较硬核,先通俗的说说思想捏~
当模拟信号的频率太高(如高达几百 GHz),传统电子 ADC 已经处理不了。所以这篇设计使用了:光学手段把超高速信号按频段切开 → 各段分别用电子 ADC 采样 → 再把数据拼接成原始信号
模拟信号无法直接进入光系统,所以先通过 Mach-Zehnder Modulator(MZM) 将电压波形映射为光强的变化,即“调制光信号”。
调制后的光场为:
其中 是模拟输入电压, 是半波电压。
利用微环谐振腔 + 非线性 Kerr 效应,将连续光源转化为多个离散频率的“光梳齿”,每个频率就像一个通道入口。
梳齿间隔 = 微环谐振腔自由光谱范围(FSR),例如 80 GHz;
总频率覆盖范围 = 数个梳齿 × FSR,可达数百 GHz。
用光滤波器选出每一个梳齿对应的信号段,只留下它感兴趣的那一片频谱。
对应论文中高阶窗口处理。
提取某一 Kerr 通道中心频率附近的信号(如第 个通道,中心频率 );控制边缘过渡带,减少切片之间拼接时的“缝隙”或“重叠泄漏”;尽量减少旁瓣泄漏,保持系统整体动态范围。
三种窗函数在 Kerr ADC 中用于频率分段提取与拼接时的效果比较
这里作者是搞了三个滤波器,最后是用了中间这个:超高斯窗(exp[-x⁴])
因为主瓣更集中;边缘陡峭,利于分段清晰提取;可在拼接区保留足够重叠,控制泄漏。
最后每一个频段由对应的探测器 + ADC 采样,不需要很快,因为信号已经被“压低带宽”;在数字域将每段频谱补偿相位与增益并拼接,形成完整频谱后 IFFT 得到时域信号。
:第 段频谱;
:增益与相位补偿;
:重建总频谱。
频域拼接前后比较
蓝线:20 GHz 正弦信号,代表真实模拟输入;
橙色虚线:Kerr ADC 拼接恢复的信号;波形几乎完美重合,说明“拼接后波形恢复良好”,符合设计初衷。
展示原始信号与重建信号之间的差值;最大误差在 以内,极小;且无明显拼接“缝合痕迹”,说明窗函数设计有效避免了频段边缘泄漏或失真。
蓝线:原始信号频谱,集中在 20 GHz;
橙线:拼接后频谱;两者几乎重合,仅在远离中心的频点出现轻微差异;说明 Kerr ADC 在频率重构方面保留了高保真度,窗函数拼接平滑有效。
Kerr ADC 的五步图解仿真流程图
输入为 20 GHz 正弦波;表示来自传感器或模拟前端的原始宽带电压信号;振荡周期短(频率高),代表系统需超高速采样。
利用 Mach-Zehnder 调制器(MZM)将模拟电信号调制到光载波上(此处用 100 GHz 表示);实现信号“转光”,为后续光域处理做准备。
使用集成频谱处理器 ISP1 对光信号进行按频率段划分;得到多个带有轻微重叠的子频段(如三段 100、180、250 GHz 处);每段可以视作局部窄带信号,便于低速 ADC 处理。
利用 Kerr 梳频率本振与每个子段进行相干检测;每个梳状频率分量相当于对不同子段的“钥匙”;实现精确提取每段的 I/Q 份量,且保持相位一致性。
将每个子频段分别低速采样(因带宽较窄);利用 DSP 对多个段进行频域拼接(消除重叠区,保持幅相一致性);最终重构出原始宽带信号,达到超高等效采样率。
其实这里就是通俗的解读完了,下面是比较学术的,按需观看。
整个系统可分为三个主要模块:
使用薄膜铌酸锂(TFLN)Mach-Zehnder调制器(MZM)将模拟电信号调制到光载波上;输入信号频率范围最高可达 300 GHz+;使用同一激光器生成的载波信号供给 MZM 和 Kerr 微梳(保证相位锁定)。
采用Kerr非线性硅氮化物(Si₃N₄)微腔生成高稳定 Kerr 微梳,频率间隔约为 40.025 GHz。
使用两个集成光谱处理器(ISP1 & ISP2)完成:
ISP1:提取调制信号的上边带并分成多个“光谱片段”;ISP2:分离频梳的各个 comb line,作为本地振荡器(LO);使用 M组IQ接收器对每一个片段进行相干探测,将光信号转换为电子信号。
每个IQ接收器的I/Q输出送入高速示波器(ADC);所有片段的数据进行“频谱拼接(spectral stitching)”,重构完整输入信号;每片段的带宽为约 80 GHz(2 × FSR),4个片段覆盖 320 GHz。
使用 4 个光谱切片(共 8 通道);Kerr comb 由 Si₃N₄ 微腔产生;每通道数据由 Keysight UXR 系列高速示波器采样(256 GSa/s);通过频谱拼接与系统校准,实现高精度信号重构。
啧啧,这实验真的是做不起一点
现在大概商用的极限就是这样,一直说有国产的,我也没有见过
项目 | 结果 |
|---|---|
采集带宽 | 320 GHz |
等效采样率 | 640 GSa/s |
ENOB(有效位数) | 2.6–3.3(频率相关) |
信号类型 | 30GBd 32QAM、40GBd QPSK、10GBd 16QAM |
BER | < 10⁻⁵ |
这东西理论部分也不难,就是算一些东西,本宝宝也都可视化了对应的步骤,有些不爱看公式的朋友有福啦:
输入模拟信号 经 EO(Electro-Optic)调制器调制为光信号 ,其频域表示为:
是输入模拟信号的傅里叶变换;
是调制器的频率响应,包含带宽衰减特性(如MZM的增益滚降);
然后,输入光信号被一个集成光谱处理器(ISP)按频率切分为多个“子带”:
其中:
是第 个子带的光学滤波窗口函数(Gaussian窗);每个子带对应一个独立的IQ接收通道,带宽为约 80 GHz。
image-20250713185149864
左图(时域):包含 24.4 GHz、233.4 GHz、264.4 GHz 三个频率分量的混合波;
右图(频域):显示对应频率的清晰频谱峰值。
Kerr微梳输出光谱为:
是梳中心频率;
是梳齿间隔;
是第 个梳齿的复幅值(包含相位噪声);
在每个通道内,LO 梳齿与信号片段进行相干混频,得到电信号:
其中 是接收光电探测链路的频率响应。
EO 调制器后光信号频谱
模拟了调制器频率响应的衰减(类似一阶低通),高频分量被略微衰减;再现了调制器对输入信号带宽的抑制效应。
由于不同通道的幅度/相位响应不一致,因此信号重构需引入系统标定因子:
:第 个子带的电信号频谱;、:通过预先标定得到的电-光、光-电系统传递函数;多通道的拼接在频域完成,需确保边界平滑,避免拼接伪影。
论文中使用参考信号(如线性调频LFM信号)和已知多阶QAM信号,对每一通道进行 幅度+相位标定。
Kerr 微梳切片与频域窗口
共有 4 个切片,每组上下图对应一个通道:
上图:窗口函数(高阶窗),每段中心频率依次向右偏移 80 GHz;
下图:窗口作用下的光信号频谱,展示每段所截获的频域成分;相邻窗口间存在适当重叠,便于频谱拼接。
所有切片拼接后的总频谱
所有通道在频域相加;可见重建后的频谱基本还原了原始信号的主峰分布,虽部分高频略微减弱。
Kerr微梳ADC模型的Python仿真
时域重构信号 + 频谱对比
左图:重建波形(橙虚线)与原始波形(蓝实线)几乎重合,说明切片拼接非常成功;
右图:频谱对比图表明主要频率成分完好重现。(上面的两个图都是,下面的好看一点)
系统在多个频点计算 有效位数 ENOB,标准公式为:
其中 SINAD 为信号与总噪声 + 失真比(dB),通过测量重构信号与理论信号之间的误差得到:
对应频率不同,系统的 MZM 响应、探测链路响应等不同,导致 ENOB 随频率下降(例如:低频段 ENOB ≈ 3.3,高频段 ≈ 2.6)。
论文使用了预先测得的参考响应 ,并采用逆滤波方式进行数字补偿:
对所有 个通道分别处理,再在时域或频域拼接(采用过采样 + 插值方法,消除拼接边界的接缝效应)。
代码在最后,想实现的自己去玩
有些人就要问了,人家那么贵的实验你就俩张破图,仿真的对吗?好问题!现在就继续来评估我的模型
每段重建误差(时域)
每个子图表示 Kerr 微梳某一切片在时域下与原始信号的误差;
观察结果:
切片 1(低频段)误差较小,边缘较干净;
切片 2~4 中误差逐渐增加,尤其是高频部分,可能受到 EO 滤波器衰减影响;所有片段误差主要集中在切片边缘区域,说明拼接位置可能存在幅值或相位失配。
拼接频带重叠区域频谱对比
每组图对展示相邻两片段在拼接频带内(±10 GHz)的幅度匹配情况;
观察:各对切片在拼接区的谱值略有差异;表明频谱拼接若未进行增益匹配或相位校准,可能造成边缘失真或泄漏。
接下来看看论文的美图!
基于光电联合信号处理引擎的集成频谱切片光电ADC
电到光调制(前端):
宽带模拟电信号首先通过一颗超宽带电-光 Mach-Zehnder 调制器(MZM)被调制成光信号;MZM由一个外腔激光器(ECL)提供载波光,中心频率为 ;这个 ECL 是由反射型半导体光放大器(RSOA)和Sagnac 环形反射器组成,其中集成了两对 Vernier 可调谐环形谐振腔(MRR1 和 MRR2)以及一个热调谐耦合器。
本振源产生(Kerr 频率梳):ECL 的一部分光输出送入一个基于高Q因子的Si₃N₄ 微环谐振腔(MRR3)的Kerr频率梳发生器(FCG),产生多个频率分量的 soliton 梳状本振信号;这些梳状频率将作为后续相干解调的局部振荡源(LO);另一部分光输出通过 SOA 或 EDWA 放大后送往 MZM 用于调制。
光电信号处理引擎:MZM 输出的光信号通过单模光纤(SMF)传送到集成光电信号处理引擎;在输入端,信号先被放大并送入第一个集成频谱处理(ISP1):提取高频边带 ;部分补偿 MZM 的电光响应;将宽带信号按频率切分为多个子段(spectral slices);第二个集成频谱处理器(ISP2)将 Kerr 频率梳切分为单独的、本振相位锁定的多个频率分量。
相干解调 + 低速采样:每个频谱片段与对应的 Kerr 梳 LO 进行相干检测,由一个包含 M 个IQ 解调器阵列(IQR1 ~ IQRM)实现;每个 IQ 分量通过一组 2M 个同步低速电子 ADC 进行数字化采样(即 I、Q 各用一个 ADC);所有电子 ADC 通过引线键合(EWB)连接至系统内部。
数字拼接与重建:所有切片信号通过数字信号处理器(DSP)在频域中拼接重建;得到完整的数字化模拟输入信号。
说明
标注 | 含义 | 说明 |
|---|---|---|
Ⓐ | 原始模拟信号 | 宽带模拟电信号(如10~200 GHz) |
Ⓑ | 光调制后信号 | 输入信号调制在光载波上 |
Ⓒ | 频谱切片输出 | 由 ISP1 切分为多个子频段,子带之间有小部分重叠(Overlap Region, OR)以保证拼接平滑 |
Ⓓ | Kerr 梳谱图 | 在 ISP2 中按色散选出本振频率,颜色编码与子频段对应 |
Ⓔ | 最终重建频谱 | 在 DSP 中拼接后的整体频谱,重现模拟输入信号 |
Kerr ADC 系统的实验验证原型
Kerr ADC 的离散实验实现
这是 Kerr ADC 的离散实验实现,以光纤 + 商用器件搭建;使用铌酸锂高速 MZM 进行模拟信号调制;使用 Kerr 梳(由 Si₃N₄ 微环产生)作为多色本振源;利用可调光滤波器进行光频切片;用 4 个 IQ 接收器检测,每个接收 I/Q 两路 → 共 8 路 BPD 输出;最终用 2 台 256 GSa/s 高速示波器读取数据;是对“光调制 + 光频分割 + 本振锁定 + 数字采样 + 重构”的完整验证。
Kerr 梳光谱与本振选择
实验中 Kerr 梳是稳定的孤子模式;实际检测使用 下边带信号(即信号调制在载波以下);频谱图中标出了被选为 LO 的 Kerr 频率分量;说明 Kerr 梳的实际使用需考虑 OCNR 等物理约束。
四通道光电系统传输函数 Hμ(f) 的测量
使用高精度参考光波测量每条通道的系统传递函数(频率响应);得到每条通道的幅频/相频特性;后续可用于 DSP 端的系统响应校正,实现频率域补偿。
校准后 Kerr ADC 的频率响应
显示 ADC 在整个频段上的有效采样能力;可见系统在 ~60 GHz 到 ~300 GHz 范围内具有较好响应线性;中间缺口是实验设备限制,非架构缺陷。
Kerr ADC 数字重建结果示例
实验演示了 Kerr ADC 可高质量重建 300 GHz 附近的波形;使用 sinc 插值与最小二乘拟合方法对采样点进行平滑;重建误差极低,验证了 Kerr ADC 的高保真、高速性能。
Kerr 频率梳谱线的模拟与选频过程
灰色竖线:完整的 Kerr 频率梳谱线(中心频率为 193.5 THz,梳齿间距为 40.025 GHz);
红色圆点:从中选取的 4 个本振(LO)频率,作为光电检测中的相干接收本振;
选频编号:分别标注为 f₁ ~ f₄,对应 Kerr ADC 中不同频段切片的本振。
在 Kerr ADC 系统中,频率梳起到多色本振源的作用:每个频率梳齿作为一个独立的 LO;对应接收端的一个子频段;最终各段信号在数字域拼接成完整宽带信号。
Kerr ADC 中各通道的光电链路传输函数
上图:幅度响应(Magnitude |Hμ(f)|)
每条曲线代表一个通道(共 4 通道);近似呈 高斯带通 形状,每个通道响应中心频率不同(对应频谱切片);带宽大致为 30 GHz,峰值归一化为 1;不同通道间存在轻微强度偏差,模拟实际器件非一致性。
下图:相位响应(Phase ∠Hμ(f))
每条曲线是通道对不同频率信号的相位响应;呈现 缓慢变化的非线性相位曲线,主要源于:MZM 的相位延迟;光纤色散;光电探测器的频率依赖响应;在 ADC 重建中需使用此相位响应进行补偿,确保拼接后信号相位连续。
本图近似复现论文 Fig. 2(c) 中提到的 ~Hμ(f):为 Kerr ADC 各通道的传输函数;来源于标定参考波形(ORW)测试;是后续 DSP 拼接与重建 的重要校准因子。
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import windows, butter, lfilter
from scipy.fft import fft, ifft, fftshift, ifftshift
# 参数设置
fs = 640e9 # 有效采样率 640 GSa/s
N = 2**14 # 采样点数
t = np.arange(N) / fs # 时间向量
f = np.fft.fftfreq(N, d=1/fs) # 频率向量
# 1. 生成模拟输入信号(多频调制信号)
input_signal = (
0.5 * np.cos(2 * np.pi * 24.4e9 * t) + # 24.4 GHz分量
0.3 * np.cos(2 * np.pi * 233.4e9 * t + 0.8) + # 233.4 GHz分量
0.2 * np.cos(2 * np.pi * 264.4e9 * t + 1.2) # 264.4 GHz分量
)
# 2. 模拟 EO 调制器响应(3 dB 频率为 300 GHz 的一阶低通)
def EO_filter(freq):
f3dB = 300e9
return 1 / np.sqrt(1 + (freq / f3dB)**2)
EO_response = EO_filter(np.abs(f))
optical_signal_freq = fft(input_signal) * EO_response # 光域调制后频谱
# 3. 划分 4 个 Kerr 微梳片段(中心间隔为 80 GHz)
num_slices = 4
slice_bw = 80e9
slices = []
frequencies = []
for i in range(num_slices):
f_center = (i + 0.5) * slice_bw
win = np.exp(-((f - f_center) / (slice_bw / 2))**4) # 超高阶窗函数(近似理想带通)
slice_freq = optical_signal_freq * win
slices.append(slice_freq)
frequencies.append(f_center)
# 4. OE 接收 + 模拟 I/Q 解调(只保留幅度信息模拟)
digitized_slices = []
for slice_freq in slices:
# 模拟 OE 接收器响应(此处设为理想,后面可添加噪声或滤波失真)
digitized_slices.append(slice_freq)
# 5. 数字补偿 + 拼接
reconstructed_freq = np.zeros_like(optical_signal_freq, dtype=complex)
for slice_freq in digitized_slices:
reconstructed_freq += slice_freq # 简化处理(实际需补偿相位并校准增益)
# 6. 反变换得到时域波形
reconstructed_signal = np.real(ifft(reconstructed_freq))
# 7. 可视化结果
plt.figure(figsize=(14, 6))
# 原始与重建信号(部分片段)
plt.subplot(1, 2, 1)
plt.plot(t[:1000] * 1e12, input_signal[:1000], label='Original')
plt.plot(t[:1000] * 1e12, reconstructed_signal[:1000], '--', label='Reconstructed')
plt.xlabel('Time (ps)')
plt.ylabel('Amplitude')
plt.title('Time Domain Signal (Partial)')
plt.legend()
plt.grid(True)
# 频谱对比
plt.subplot(1, 2, 2)
plt.plot(np.fft.fftshift(f) * 1e-9, 20*np.log10(np.abs(fftshift(fft(input_signal))) + 1e-12), label='Original')
plt.plot(np.fft.fftshift(f) * 1e-9, 20*np.log10(np.abs(fftshift(reconstructed_freq)) + 1e-12), '--', label='Reconstructed')
plt.xlabel('Frequency (GHz)')
plt.ylabel('Magnitude (dB)')
plt.title('Spectrum Comparison')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
import numpy as np
from scipy.fft import fft, ifft, fftshift
# 参数设置
fs = 640e9 # 有效采样率 640 GSa/s
N = 2**14 # 采样点数
t = np.arange(N) / fs # 时间向量
f = np.fft.fftfreq(N, d=1/fs) # 频率向量
# 原始模拟输入信号
input_signal = (
0.5 * np.cos(2 * np.pi * 24.4e9 * t) +
0.3 * np.cos(2 * np.pi * 233.4e9 * t + 0.8) +
0.2 * np.cos(2 * np.pi * 264.4e9 * t + 1.2)
)
# EO调制器频率响应
def EO_filter(freq):
f3dB = 300e9
return 1 / np.sqrt(1 + (freq / f3dB)**2)
EO_response = EO_filter(np.abs(f))
optical_signal_freq = fft(input_signal) * EO_response
# 图1:原始输入信号(时域 & 频域)
plt.figure(figsize=(14, 4))
plt.subplot(1, 2, 1)
plt.plot(t[:1000]*1e12, input_signal[:1000])
plt.title("原始模拟输入信号 (时域)")
plt.xlabel("时间 (ps)")
plt.ylabel("幅值")
plt.grid(True)
plt.subplot(1, 2, 2)
plt.plot(fftshift(f)*1e-9, 20*np.log10(np.abs(fftshift(fft(input_signal))) + 1e-12))
plt.title("原始模拟输入信号 (频域)")
plt.xlabel("频率 (GHz)")
plt.ylabel("幅度 (dB)")
plt.grid(True)
plt.tight_layout()
plt.show()
# 图2:EO调制后频谱
plt.figure(figsize=(7, 4))
plt.plot(fftshift(f)*1e-9, 20*np.log10(np.abs(fftshift(optical_signal_freq)) + 1e-12))
plt.title("EO调制器后的光信号频谱")
plt.xlabel("频率 (GHz)")
plt.ylabel("幅度 (dB)")
plt.grid(True)
plt.tight_layout()
plt.show()
# Kerr 微梳切片
num_slices = 4
slice_bw = 80e9
slices = []
frequencies = []
slice_windows = []
for i in range(num_slices):
f_center = (i + 0.5) * slice_bw
win = np.exp(-((f - f_center) / (slice_bw / 2))**4)
slice_freq = optical_signal_freq * win
slices.append(slice_freq)
frequencies.append(f_center)
slice_windows.append(win)
# 图3:展示每一 Kerr 微梳切片窗口及其作用后的频谱
plt.figure(figsize=(14, 10))
for i, (win, slice_freq) in enumerate(zip(slice_windows, slices)):
plt.subplot(4, 2, 2*i+1)
plt.plot(fftshift(f)*1e-9, fftshift(win))
plt.title(f"切片{i+1}的频域窗口函数")
plt.xlabel("频率 (GHz)")
plt.ylabel("权重")
plt.grid(True)
plt.subplot(4, 2, 2*i+2)
plt.plot(fftshift(f)*1e-9, 20*np.log10(np.abs(fftshift(slice_freq)) + 1e-12))
plt.title(f"切片{i+1}作用后的频谱")
plt.xlabel("频率 (GHz)")
plt.ylabel("幅度 (dB)")
plt.grid(True)
plt.tight_layout()
plt.show()
# 模拟 OE 接收后数字信号(假设无失真)
digitized_slices = slices.copy()
# 图4:数字域拼接所有切片频谱
reconstructed_freq = np.zeros_like(optical_signal_freq, dtype=complex)
for slice_freq in digitized_slices:
reconstructed_freq += slice_freq
plt.figure(figsize=(7, 4))
plt.plot(fftshift(f)*1e-9, 20*np.log10(np.abs(fftshift(reconstructed_freq)) + 1e-12))
plt.title("所有频谱切片拼接后的总频谱")
plt.xlabel("频率 (GHz)")
plt.ylabel("幅度 (dB)")
plt.grid(True)
plt.tight_layout()
plt.show()
# 图5:重建后的信号(时域)
reconstructed_signal = np.real(ifft(reconstructed_freq))
plt.figure(figsize=(14, 4))
plt.subplot(1, 2, 1)
plt.plot(t[:1000]*1e12, input_signal[:1000], label="原始")
plt.plot(t[:1000]*1e12, reconstructed_signal[:1000], '--', label="重建")
plt.title("重建后的信号 (时域片段)")
plt.xlabel("时间 (ps)")
plt.ylabel("幅值")
plt.legend()
plt.grid(True)
plt.subplot(1, 2, 2)
plt.plot(fftshift(f)*1e-9, 20*np.log10(np.abs(fftshift(fft(reconstructed_signal))) + 1e-12), label="重建")
plt.plot(fftshift(f)*1e-9, 20*np.log10(np.abs(fftshift(fft(input_signal))) + 1e-12), '--', label="原始")
plt.title("重建前后频谱对比")
plt.xlabel("频率 (GHz)")
plt.ylabel("幅度 (dB)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
https://www.nature.com/articles/s41377-025-01778-1.epdf?sharing_token=uOEN2o9v9ZZ8CpxV3ZNfJtRgN0jAjWel9jnR3ZoTv0NQWGG8pitqy0XyM7_LfUTkliHSTOffGIyep8j1TlpKID_QkH84rv500uQn9Hew0RQ6aegNsTlhkXe-M_b-6ASz3jEKVprTl0z5guTJDsaL8flB9M3Tn1Fo4tW1mUl5EaI%3D