WaveFormX:把"我想要这样一段波形"变成一个 CSV
起因
很多仪器(比如我用的联讯 S3012H)接受用 CSV 描述的电压波形——一列时间、一列电压,仪器照着一个点一个点地输出。
问题是,这个 CSV 经常得自己算。想要"延迟 1 秒后,打 5 个 0.5V、宽度 10ms、间隔 50ms 的脉冲,其余时间保持 0V",就得按采样率把每一个点的电压都算出来、排好、存成文件。改一个参数,整张表重算。算错一个点,波形就不对。
所以我做了 WaveFormX:把"我想要怎样一段波形"这件事,变成在界面上选模式、填几个数、看一眼预览、点导出。

四种波形模式
我把常用的激励波形抽象成了四种模式,覆盖了我做实验时几乎所有的需求:
i-t(恒定电压)。最简单的一种——整段时间保持一个固定电压。给定采样率、电压、时长就行。
恒定脉冲。延迟一段时间后,按"宽度–间隔–数量"打出一串等幅矩形脉冲,其余时间回到基础电压。适合做固定刺激。
可变频率脉冲。不想手动算脉宽和间隔时用它:给个频率和占空比,程序自己算周期、自己拆成高低电平,生成周期性方波。
STEP(多级阶梯脉冲)。最灵活的一种——可以设好几"种"不同强度的脉冲,每种若干个,按顺序打出来,还能整套重复循环。比如"2V×3 个 + 4V×2 个,重复两轮",一行行配好就生成了。
不只是生成,还能"看见"
光生成不够,填错了得当场看出来。所以右边有一块实时波形预览:参数一改,波形长什么样立刻画出来,确认没问题再导出,省得拿到仪器上才发现搞错了。
导出的文件名也会按参数自动拼好,像 step-1000ps-0.5v-10.0s-1cyc-4types.csv 这样——光看文件名就知道这是什么波形,一组实验下来几十个文件也不会乱。
关于"通用"
虽然是照着 S3012H 的需求做的,但它生成的就是标准的 Time, Voltage 两列 CSV——任何能读 CSV 波形的设备都能用。换台仪器,工具照样使。
技术上
界面用 PySide6,实时预览用 pyqtgraph(画起来很快、缩放流畅),波形计算用 numpy。
我特意把它做成了分层 + 可扩展的结构:界面、视图模型、波形生成核心分开;每种波形模式是一个独立的 generator,通过一个注册表挂上去。这样以后想加第五种、第六种波形,只要写一个新的 generator 注册进去,界面会自动多出对应的参数项,不用动主程序。参数校验用 pydantic,填了不合法的值会被提前拦下来。
一点感想
这又是一个"把重复体力活变成点几下"的小工具,但这次我更在意它的骨架——不是堆功能,而是让它好扩展、好维护。一个工具能不能长久用下去,往往就看这个。