一、基础概念区分
Keysight N79xxA / N89xxA 列表模式(LIST)步进时序抖动分为两类采集统计:
LIST 自身步进触发时序抖动(列表每一步切换真实时间偏差)
ARB 波形序列时序抖动(ARB 分段步进时序,指令体系同源) 仪器无单条JITTER?直读总抖动,依靠时序测量缓存 + 统计读取两套 SCPI 链路获取:最小 / 最大 / 均值 / 标准差抖动。
前置开启时序捕获(必须先使能时序采样)
scpi
*CLS
! 开启LIST时序误差采集,捕获每一步实际切换时刻
SOURce:LIST:TIMing:CAPTure ON
! 关闭:SOUR:LIST:TIM:CAPT OFF
SOUR:LIST:TIM:CAPT?
开启后,每一次 LIST 完整运行,仪器自动缓存所有步骤的设定步进时间与实际执行步进时间差值(抖动 Δt)。
二、读取全部步进原始抖动差值数组
1. 查询列表总步数
scpi
SOUR:LIST:COUNt?
返回 N = 列表总步数,对应 N 个抖动采样点。
2. 批量读取每一步抖动原始值(单位:秒)
scpi
! 读取全部0~终点索引的时序抖动差值
SOURce:LIST:TIMing:JITTer:DATA? 0.MAX
返回逗号分隔浮点数组:Δt0.Δt1.Δt2...Δtn Δt = 实际切换时间 − 编程设定 Step 时间
正数:实际切换慢于设定时间
负数:实际切换快于设定时间
3. 读取设定基准步进时间数组(用于核对基准)
scpi
SOUR:LIST:TIMe:DATA? 0.MAX
返回每一步编程设置的标准时长。
三、仪器内置一键统计参数(均值、最大、最小、标准差)
新版固件(≥6.02 N79/N89)内置统计计算指令,无需上位机运算:
scpi
! 抖动平均值
SOUR:LIST:TIM:JITTer:MEAN?
! 最大正向抖动(最慢偏差)
SOUR:LIST:TIM:JITTer:MAX?
! 最小抖动(负向,最快偏差)
SOUR:LIST:TIM:JITTer:MIN?
! 抖动标准差(离散度,衡量稳定度)
SOUR:LIST:TIM:JITTer:STDdev?
四、ARB 序列模式等效步进抖动查询(ARB 分段列表)
若使用 ARB 分段阶梯输出而非原生 LIST 指令,切换 ARB 时序采集指令:
scpi
! 开启ARB时序捕获
SOUR:ARB:TIM:CAPT ON
! ARB抖动原始数据
SOUR:ARB:TIM:JIT:DATA? 0.MAX
! ARB统计量
SOUR:ARB:TIM:JIT:MEAN?
SOUR:ARB:TIM:JIT:MAX?
SOUR:ARB:TIM:JIT:MIN?
SOUR:ARB:TIM:JIT:STD?
五、完整标准操作流程(可直接复制下发)
scpi
*RST;*CLS
! 1 清空上一轮时序缓存
SOUR:LIST:TIM:CLEar
! 2 开启时序抖动捕获
SOUR:LIST:TIM:CAPT ON
! 3 运行一次完整列表
SOUR:LIST:RUN
*WAI ! 阻塞等待列表全部执行完毕
! 4 读取统计参数
PRINT "平均抖动:";SOUR:LIST:TIM:JIT:MEAN?
PRINT "最大抖动:";SOUR:LIST:TIM:JIT:MAX?
PRINT "最小抖动:";SOUR:LIST:TIM:JIT:MIN?
PRINT "抖动标准差:";SOUR:LIST:TIM:JIT:STD?
! 可选:导出全部原始抖动数组上位机二次分析
SOUR:LIST:TIM:JIT:DATA? 0.MAX
六、关键配套控制指令
清空时序缓存(每次测试前必须清空,防止旧数据干扰)
scpi
SOUR:LIST:TIM:CLEar
设置时序采集分辨率(高精度微调)
scpi
! 单位s,越小采集精度越高,缓存占用越大
SOUR:LIST:TIM:RESolution 1e-6
SOUR:LIST:TIM:RES?
关闭时序捕获减少仪器负载
scpi
SOUR:LIST:TIM:CAPT OFF
七、机型固件兼容边界
N79xxA / N89xxA(固件≥6.02):完整支持 MEAN/MAX/MIN/STD 内置统计
固件低于 6.02:无内置统计指令,仅可读取DATA?原始抖动数组,均值 / 标准差必须上位机 Python/LabVIEW 自行计算
E36100 BT 小型双向源:LIST 时序采集功能阉割,无 TIM:JITTER 整套指令,只能外部示波器测时序抖动
N6705B:仅基础 LIST,无内置时序抖动捕获子系统
八、低固件无内置统计时上位机 Python 计算示例
python
运行
import pyvisa, numpy as np
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP::IP::INSTR")
# 读取原始抖动数组
jitter_raw = list(map(float, inst.query("SOUR:LIST:TIM:JIT:DATA? 0.MAX").split(',')))
# numpy一键统计
jit_mean = np.mean(jitter_raw)
jit_max = np.max(jitter_raw)
jit_min = np.min(jitter_raw)
jit_std = np.std(jitter_raw, ddof=1)
print(f"均值抖动:{jit_mean:.9f} s")
print(f"最大:{jit_max:.9f} s 最小:{jit_min:.9f} s")
print(f"标准差:{jit_std:.9f} s")
inst.close()
九、常见报错含义
-113 Undefined header:固件过低,不支持 TIM:JITTER 子系统
-222 Data out of range:还未运行 LIST 就查询抖动缓存,无采样数据
-214 Trigger ignored:CAPT 未开启,无时序捕获记录
补充:同步触发外部时钟减小抖动
若抖动偏大,可外部 10MHz 参考时钟同步,SCPI 配置:
scpi
SYST:REF:CLOCK EXT
SYST:REF:CLOCK?