4. 波形数据准备

AWG 输出的波形质量,在上电之前就已经被“数据准备”环节决定了大半。无论后面 DAC 分辨率多高、模拟前端多干净,如果波形数据本身存在量化台阶、频率混叠或时间基准错位,最终在示波器上看到的仍是失真的信号。本节围绕波形数据从“想法”到“可下载样本”的完整链路,梳理四类核心手段:波形合成、数学函数生成、任意数据导入,以及插值与重采样。

一、核心原理:波形数据的三层结构

AWG 内部并不直接存储“波形”,而是存储一串按固定采样间隔排列的幅度样本。理解数据准备,先要分清三层:

  • 波形定义层:用数学表达式、分段折线或外部文件描述理想波形,是“意图”。
  • 样本序列层:按采样率 fs 对波形定义层离散化,得到 N 个 DAC 码值,是“数据”。
  • 播放时序层:样本以 1/fs 的节拍送入 DAC,配合触发、循环、序列控制,是“时间”。

数据准备的本质,就是把意图准确映射为数据,并保证数据在时间轴上不越界、不混叠、不丢点。下面这张图展示了从波形定义到最终播放的完整数据流与四类准备手段的介入位置。

波形数据准备链路:从波形定义到 DAC 播放 波形定义层 数学表达式 / 分段折线 外部文件 / 实测数据 样本序列层 N 点 DAC 码值 幅度量化 + 时间离散 播放时序层 采样率 fs / 触发 / 循环 序列与跳转控制 ① 波形合成 正弦/方波/三角/脉冲 分段拼接与包络调制 ② 数学函数生成 sin / chirp / 高斯 / 指数 公式直接采样为序列 ③ 任意数据导入 CSV / TXT / MAT / WAV 实测采集与仿真数据 ④ 插值与重采样 线性/样条插值 多相滤波重采样 关键约束:奈奎斯特条件 fs ≥ 2·fmax | 样本数 N 与循环长度匹配 | 幅度不超出 DAC 满量程 数据准备阶段的一次疏忽,会在模拟输出端被放大为混叠、台阶或截顶

二、方法流程:四类手段的适用边界

四类手段并非互斥,实际工程中常组合使用。选择依据是“波形是否能用公式描述”和“时间基准是否已知”。

手段 典型输入 适用场景 主要风险
波形合成 标准波形参数 雷达脉冲、通信调制、激励源 分段拼接处相位不连续
数学函数生成 公式与参数 chirp、高斯脉冲、扫频测试 采样率不足导致混叠
任意数据导入 CSV/MAT/WAV 回放实测、仿真验证 时间轴与 fs 不匹配
插值与重采样 低采样率序列 提升时间分辨率、对齐速率 插值引入过冲与振铃

三、数学函数生成与代码示例

数学函数生成是最可控的方式:给定公式和采样率,直接计算每个时间点的幅度。以线性调频(chirp)信号为例,起始频率 f0、终止频率 f1、脉宽 T,瞬时频率随时间线性变化:

import numpy as np

fs = 2.4e9          # 采样率 2.4 GSa/s
T  = 10e-6          # 脉宽 10 us
f0, f1 = 100e6, 400e6
N  = int(fs * T)
t  = np.arange(N) / fs

k  = (f1 - f0) / T
phase = 2*np.pi * (f0*t + 0.5*k*t**2)
wave  = np.sin(phase)

# 归一化到 DAC 满量程并量化
dac_bits = 14
peak = 2**(dac_bits-1) - 1
codes = np.round(wave * peak).astype(np.int16)
np.savetxt("chirp.csv", codes, fmt="%d")

这段代码的关键点有三处:相位用积分形式而非 sin(2πf(t)·t),避免瞬时频率定义错误;末尾做满量程归一化与量化,避免溢出截顶;输出为整数码值,直接对应 DAC 输入。

四、任意数据导入与插值重采样

当波形来自实测采集或第三方仿真时,导入环节最容易出问题的是“时间轴对齐”。假设导入的 CSV 只有幅度列,没有时间列,就必须显式声明原始采样率 fs_src。若 fs_src 低于 AWG 播放采样率 fs_dst,直接播放会把波形拉长,频率整体偏低。

此时需要重采样。常用做法是先做整数倍上采样(补零 + 低通滤波),再抽取到目标速率;对精度要求不高的场景,也可用线性或样条插值快速实现:

from scipy.signal import resample_poly

# 将 1 GSa/s 数据重采样到 2.4 GSa/s
# 2.4/1.0 = 12/5,上采样 12 倍,下采样 5 倍
y = resample_poly(x, up=12, down=5)

# 若只需线性插值(快速但精度有限)
t_src = np.arange(len(x)) / 1e9
t_dst = np.arange(0, t_src[-1], 1/2.4e9)
y_lin = np.interp(t_dst, t_src, x)
重采样优先使用多相滤波(如 resample_poly),它能在改变采样率的同时抑制镜像分量;线性插值只适合对带外杂散不敏感的低速场景。

五、误区与复盘

误区一:只看波形形状,不看采样率。 生成 400 MHz 正弦却用 500 MSa/s 播放,必然混叠成低频假信号。数据准备阶段必须先确认 fs ≥ 2·fmax,工程上通常留 2.5 倍以上余量。

误区二:导入数据不做时间轴校验。 CSV 的采样间隔与 AWG 设定不一致,会导致频率整体缩放。导入后应先用已知频率分量做一次回放验证。

误区三:插值阶数越高越好。 高阶样条在陡变沿附近会产生过冲和振铃,反而恶化波形。对脉冲类信号,线性插值或带限插值往往更稳妥。

复盘时建议建立一份“数据准备检查清单”:采样率是否满足奈奎斯特、样本数是否与循环长度整除、幅度是否留有余量、时间轴是否与 fs 一致、插值是否引入异常过冲。把这五项在下载前逐条确认,可以避免绝大多数波形失真问题。