WaveFormEye使用流程
自制软件 WaveFormEye 使用流程
从畸变波形到均衡恢复
这款软件到底在解决什么问题
高速链路测试里,我们拿到的往往不是“理想数字信号”,而是一条已经被信道损耗、带宽限制、码间干扰、抖动和噪声污染过的实测波形。
WaveFormEye 的核心目标,就是把这条实测波形重新拉回到一个可分析、可验证、可恢复的状态。它围绕下面这条主线展开:
原始波形 -> 眼图分析 -> 码型对齐 -> 脉冲响应提取 -> AMI 均衡 -> BER 验证
如果用一句更通俗的话概括,这个软件做的是:
“从接收到的畸变波形中,恢复出更接近理想判决状态的信号,并量化它到底恢复得怎么样。”
软件适合什么场景
这个项目是一个基于 PySide6 + Qt Widgets + Matplotlib + NumPy/SciPy 的桌面信号分析工具,适合以下场景:
- 查看示波器导出的两列波形数据
- 对
NRZ或PAM4波形绘制眼图 - 从训练码型和实测波形中完成相位对齐
- 提取通道的脉冲响应、冲激响应和频响
- 调用
IBIS-AMI模型对波形进行均衡 - 对均衡结果做判决、对齐和
BER验证
在项目实现里,主窗口是“波形数据查看器”,其上层功能入口非常直接:
绘制眼图波形码型对齐器提取脉冲响应波形均衡
这四个按钮,基本构成了日常使用的完整工作流。
正式开始前,需要准备哪些文件
在开始使用之前,建议准备好以下输入:
1. 原始波形文件
通常为示波器导出的两列文本数据,项目支持常见的 txt/csv 格式。
这类文件至少需要包含时间列和电压列。
2. 训练码型文件
这一步主要用于“波形码型对齐”和“脉冲响应提取”。
如果你要从实测波形反推出通道特性,必须知道参考码型。
3. AMI 模型文件
如果要做均衡,还需要准备接收端 RX AMI 模型;
如果要启用发送端训练,还需要可选的 TX AMI 模型。
通常会成对出现:
.ami- 对应的
.dll
4. 项目目录
软件支持项目化保存。建议每个测试场景建立一个单独项目,方便保存:
- 波形文件
- 码型文件
- 脉冲响应参数
- AMI 模型
- 导出结果
这样后续重复分析和复盘都会轻松很多。
整体使用流程总览
如果你是第一次用,推荐按下面这个顺序操作:
- 在主窗口加载原始波形,确认时间范围、码率、调制方式和重采样参数。
- 先画眼图,快速判断当前链路质量,找到大致的判决状态。
- 打开“波形码型对齐器”,把实测波形和训练码型对齐,导出对齐后的周期码型。
- 打开“提取脉冲响应”,利用实测波形和对齐码型拟合出通道的脉冲响应。
- 打开“波形均衡”,加载上一步生成的
.npz参数文件和AMI模型,对波形做均衡。 - 查看均衡后的眼图、参数输出和日志,再执行判决解码与
BER验证。
这套流程里,每一步都不是孤立的,而是前一步给后一步提供输入。
第一步:加载波形并完成基础设置
启动软件后,先进入主窗口“波形数据查看器”。
这里建议先做四件事:
1. 选择波形文件
点击 浏览,导入原始波形。软件会自动解析时间轴、电压轴,并在主画布中显示时域波形。
2. 设置码率和调制方式
主窗口里会根据你输入的 Bit Rate 和当前调制方式自动换算符号率。
NRZ对应2电平PAM4对应4电平
这一步非常关键,因为后面的眼图分析、重采样、对齐、脉冲提取和均衡,全都依赖符号率。
3. 设置重采样 SPS
软件支持将原始波形重采样到目标 SPS。这个参数会直接影响后续眼图精度和脉冲响应提取效果。
通常建议:
- 快速观察可以先用较小
SPS - 准备进入脉冲响应和均衡阶段时,尽量使用更稳定的目标
SPS
4. 检查时间窗口
你可以在主窗口设置查看区间,只分析波形中的一段时间窗口。如果原始波形很长,这一步能显著减少无关内容的干扰。
第二步:先画眼图,快速判断波形状态
完成基础设置后,点击 绘制眼图。
这一步的意义不是“画张图看看”,而是快速回答下面几个问题:
- 当前眼图到底有没有张开
- 最佳判决时间大概在哪
- 判决阈值是否容易分离
- 链路当前更像是受噪声影响,还是受
ISI影响
眼图界面里重点看什么
软件会同时给出叠线眼图和统计眼图。两种表现形式不同,但本质都在描述同一件事:周期内不同波形轨迹的重叠和分布。
可以重点关注这些指标:
Tmid:最佳判决时间附近的位置Vmid:判决阈值- 眼高
- 眼宽
- 电平间距
- 轮廓和
Bathtub相关结果
这一步的实际作用
眼图分析一方面能给出最直观的质量判断,另一方面也为后续“判决”和“BER 估计”提供基础。
如果在这个阶段就发现眼图完全闭合、信号接近不可判决,那后面的码型对齐和均衡就更有必要了。
若眼图睁开,信号较为理想,可以直接根据眼图进行判决恢复
第三步:用“波形码型对齐器”找到真实相位
当你已经有参考训练码型时,下一步就是点击 波形码型对齐器。
这一步是整个流程里非常关键、但也最容易被低估的一步。
为什么必须先做码型对齐
因为实测波形通常并不知道:
- 它从参考码型的哪个符号开始
- 一共覆盖了多少周期
- 当前这段波形和理想码型之间到底偏了多少相位
如果不先把这些关系搞清楚,后面做脉冲响应提取时,参考序列和实际波形就对应不上,拟合结果会明显失真。
在界面里怎么操作
进入对齐器后,依次填写:
码型文件波形文件符号率 (GHz)每符号采样数插值方式信号类型
然后点击 运行对齐。
软件会做两件事:
- 检测参考码型的周期信息。
- 通过相关性分析找到实测波形在参考码型中的最佳起始位置。
对齐完成后可以得到什么
对齐结果通常会告诉你:
- 检测到的周期长度
- 最佳相位
- 使用了多少波形样本
- 相关性对齐结果
更重要的是,你可以进一步导出:
导出单周期符号导出对齐码型
其中“对齐后的码型”是下一步提取脉冲响应时最关键的输入之一。
可以看到波形并非从码型首位开始采集,而是从码型中的某个位置开始,不断循环。
第四步:提取脉冲响应,恢复通道特征
完成码型对齐之后,点击主窗口里的 提取脉冲响应。
这个步骤的核心思想是:
已知实测波形和参考码型,假设通道可以近似看成线性系统,那么就可以通过拟合的方法,求出一个最能解释当前实测数据的脉冲响应。
为什么这一阶段这么重要
因为后面的 AMI_Init 不是直接吃原始波形,而是依赖通道的冲激响应或脉冲响应来建立模型内部状态。
换句话说:
- 码型对齐回答的是“波形和参考序列怎么对应”
- 脉冲响应提取回答的是“这个通道本身长什么样”
在界面里需要输入什么
在“提取脉冲响应”窗口中,通常要准备:
- 波形文件
- 对齐后的码型文件
- 符号率
- 目标
SPS - 调制方式
- 插值方式
如果你已经从主窗口进入,这些参数很多会被自动带入。
运行后会看到哪些结果
软件会展示并支持导出以下内容:
- 拟合脉冲响应
- 冲激响应
- 通道频响
- 波形拟合结果
SNDR
这些结果共同描述了信道的线性等效特征。
为什么建议导出 .npz
项目会把脉冲响应相关结果保存为参数文件,后续均衡阶段可以直接加载。这也是项目内“提取脉冲响应 -> 波形均衡”能够顺畅串起来的关键。
第五步:加载 AMI 模型,对波形做均衡
有了脉冲响应参数文件之后,就可以点击 波形均衡 进入最核心的一步。
这一阶段的目标很直接:
把“已经提取出的真实通道特征”交给 IBIS-AMI 模型,让模型完成均衡,再回头验证均衡到底有没有把信号救回来。
先理解两类输入
均衡界面至少需要三类输入:
- 原始波形文件
- 脉冲响应参数文件
RX AMI路径
如果需要发射端训练,还可以额外启用:
启用TX训练TX AMI路径
软件内部实际上做了什么
项目的均衡流程大致如下:
- 读取
.npz中的脉冲响应、符号率、SPS和参考码型。 - 解析
.ami文件和对应的dll。 - 用脉冲响应调用
AMI_Init,让模型建立均衡状态。 - 把原始波形重采样到模型所需的
ami_sps。 - 按块调用
AMI_GetWave,得到均衡后的时域波形。 - 重新绘制均衡后眼图,并进一步做判决和
BER计算。
这也是为什么均衡不是一个“单按钮黑盒”,而是依赖上游脉冲响应质量的原因。
参数设置建议
界面里除了路径输入,还可以通过 AMI 设置 进入参数对话框。
这里通常用于覆写模型参数,比如:
- 调制等级
CTLE/VGA相关开关- 自适应参数
FFE tapsBlock sizeIgnoreBits
如果你正在做不同均衡策略的对比,这一步非常有价值。
为什么日志也值得认真看
均衡窗口不只是显示结果图,还会输出运行日志。
这些日志对于判断下面几件事非常重要:
AMI_Init是否真正成功- 自适应参数有没有收敛
GetWave处理是否正常- 当前模型有没有输出有效的均衡参数
如果只盯图而不看日志,很多问题会很难定位。
可以看到AMI内部在不断对参数进行调整,从而获取最佳FOM
第六步:看均衡结果时,不要只看“波形变了没有”
很多人第一次看均衡结果,会习惯先问一句:“波形是不是变好看了?”
但工程上更有意义的判断标准其实有三类:
1. 均衡前后眼图对比
这是最直观的指标。
重点看:
- 眼高有没有增大
- 眼宽有没有拉开
- 判决区域是不是更稳定
- 多电平之间的分离是不是更清楚
2. AMI 输出参数
均衡完成后,界面会展示模型输出参数和抽头信息。
这些参数能帮助我们判断:
- 模型是否真正参与了均衡
- 当前最优参数是否合理
TX/RX的训练是否生效
3. 均衡日志中的收敛过程
如果日志里能看到自适应参数的迭代过程,就能更明确地知道模型是在“工作”,还是只是“走了一遍流程”。
第七步:执行判决解码和 BER 验证
如果只是看到均衡后眼图更开,其实还不能完全说明链路真的更好了。
最终还需要回到最硬的指标上:BER。
这时点击:
判决解码导出判决结果
这一阶段内部做了什么
项目会复用“均衡后统计眼图”里的判决时刻和阈值,然后:
- 在判决时刻对均衡后波形做插值采样。
- 根据阈值把采样点判成
NRZ或PAM4符号。 - 估计当前判决序列与参考码型之间的整体延迟。
- 在一个周期内做相位搜索,找到误码最少的对齐方式。
- 输出最终
BER、误码数、对齐相位和比较符号数。
为什么这一步很重要
因为有时候眼图“看起来更开”,但判决和对齐后未必真的能得到更低的误码率。所以真正闭环的验证逻辑应该是:
均衡后眼图改善 + BER 下降
而不是只看图形观感。
实际使用时的几个经验建议
1. 不要跳过码型对齐
很多后续误差,其实不是均衡算法不好,而是前面的参考序列根本没对齐。
2. 眼图分析适合做“快速诊断”,但不等于最终验证
眼图能帮你快速发现问题,但最终是否恢复成功,还是要看判决和 BER。
3. 脉冲响应质量决定均衡上限
如果提取出来的脉冲响应本身不可信,那么 AMI 模型再强,结果也会失真。
4. 日志是调试均衡最重要的信息源之一
特别是在 AMI_Init、参数自适应和 GetWave 阶段,日志往往比图形更早暴露问题。
5. 建议全程使用项目化保存
项目模式会自动组织:
waveform/pattern/pulse_params/ami_models/exports/results/
这样不管是复现分析、整理报告还是写博客,都会省很多时间。
一个最常用的标准操作范式
如果把上面的流程压缩成一套最实用的“日常操作模板”,可以总结成下面这几步:
- 新建项目,导入原始波形。
- 设置码率、调制方式和重采样
SPS。 - 点击
绘制眼图,先判断链路当前质量。 - 点击
波形码型对齐器,导出对齐码型。 - 点击
提取脉冲响应,生成脉冲响应参数文件。 - 点击
波形均衡,加载.npz和RX AMI模型。 - 根据需要打开
AMI 设置或启用TX 训练。 - 执行均衡,查看日志、参数和均衡后眼图。
- 点击
判决解码,检查最终BER。 - 导出波形、判决结果和关键图表,用于报告或博客整理。
结语
WaveFormEye 的价值,不只是把示波器波形“画出来”,而是把高速链路分析里几个关键环节真正串成了一条工程闭环:
- 先看波形
- 再看眼图
- 再做对齐
- 再提取通道
- 再做均衡
- 最后用
BER验证
这条链路把“观察现象”和“恢复信号”连接到了一起,也让分析过程从经验判断,逐步走向可解释、可复现、可量化。
如果你正在做高速链路调试、均衡验证或者信号完整性实验,这套流程会非常适合作为一份培训材料,或者一套团队内部标准操作指南。







