← 文章

WaveFormX:把"我想要这样一段波形"变成一个 CSV

2025-08-10 · 项目 · 4 min · #Python #PySide6 #波形 #工具

起因

很多仪器(比如我用的联讯 S3012H)接受用 CSV 描述的电压波形——一列时间、一列电压,仪器照着一个点一个点地输出。

问题是,这个 CSV 经常得自己算。想要"延迟 1 秒后,打 5 个 0.5V、宽度 10ms、间隔 50ms 的脉冲,其余时间保持 0V",就得按采样率把每一个点的电压都算出来、排好、存成文件。改一个参数,整张表重算。算错一个点,波形就不对。

所以我做了 WaveFormX:把"我想要怎样一段波形"这件事,变成在界面上选模式、填几个数、看一眼预览、点导出

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,填了不合法的值会被提前拦下来。

一点感想

这又是一个"把重复体力活变成点几下"的小工具,但这次我更在意它的骨架——不是堆功能,而是让它好扩展、好维护。一个工具能不能长久用下去,往往就看这个。

#Python#PySide6#波形#工具