Waveform¶
from cascaqit import Waveform
Waveform ¶
Waveform(
waveform_ir: WaveformIR,
_value_templates: tuple[AnalogWaveformValue, ...]
| None = None,
)
声明模拟控制的时间变化。通常从 constant()、linear() 或分段构造方法开始;直接构造 Waveform(waveform_ir) 适用于已有 IR 的情况。构造方法返回新波形,bind() 和 concat() 也不会修改原波形。
时间以 us 表示,幅值的单位由 value_unit 指定,默认 rad/us;相位波形应使用 rad。数值必须有限,布尔值不能充当幅值。Parameter 或表达式的单位必须与波形一致。波形构造不等于目标校验通过:持续时间、采样时间和目标幅值限制仍需在程序校验时检查。
构造波形¶
constant ¶
constant(
value: AnalogWaveformValue,
*,
duration: float,
waveform_id: str = "waveform",
value_unit: str = "rad/us",
) -> Waveform
在整个 duration 内保持 value。幅值可为数值、参数或表达式。返回 Waveform;不符合数值类型、有限性或单位要求时抛出 TypeError 或 ValueError。
linear ¶
linear(
start: AnalogWaveformValue,
stop: AnalogWaveformValue,
*,
duration: float,
waveform_id: str = "waveform",
value_unit: str = "rad/us",
) -> Waveform
在 duration 内从 start 线性变化到 stop。两端可带参数,绑定后才得到数值波形。
piecewise_linear ¶
piecewise_linear(
*,
times: Sequence[float],
values: Sequence[AnalogWaveformValue],
waveform_id: str = "waveform",
value_unit: str = "rad/us",
) -> Waveform
用等长的 times 与 values 声明折线,相邻点之间线性插值。最终时间决定总时长。时间应从零开始并严格递增;空时间序列或长度不一致立即抛出 ValueError,其余时间约束应通过程序校验确认。
piecewise_constant ¶
piecewise_constant(
*,
times: Sequence[float],
values: Sequence[AnalogWaveformValue],
waveform_id: str = "waveform",
value_unit: str = "rad/us",
) -> Waveform
用 times 与 values 声明阶梯波形,两者等长。每个区间采用左端点的值;当前求值实现把分界时刻归入左侧区间,因此在最后时刻仍取前一个值,超过最后时刻才返回最后一个值。它与“区间数个值、边界数个时间”的输入约定不同。最终时间决定总时长,空时间或长度不一致抛出 ValueError。
interpolated ¶
interpolated(
*,
times: Sequence[float],
values: Sequence[AnalogWaveformValue],
waveform_id: str = "waveform",
value_unit: str = "rad/us",
) -> Waveform
用形状保持的 PCHIP 插值连接采样点。至少需要两个有限时间点,从 0.0 开始并严格递增;非法时间立即抛出 ValueError。times 与 values 等长,幅值可以带参数。PCHIP 控制过冲,但不能代替目标的带宽或变化率校验。
parameter ¶
parameter(
name: str,
*,
duration: float,
waveform_id: str = "waveform",
value_unit: str = "rad/us",
scale: float = 1.0,
offset: float = 0.0,
) -> Waveform
创建常数波形,其值为 scale * 参数值 + offset。参数按 name 引用,持续时间由 duration 指定。推荐新程序先通过 AHSProgram.parameter() 声明参数,再传给 constant();按名称引用的表达式也需要匹配程序声明和单位。
绑定与组合¶
用名称到数值的映射求值,返回独立波形。具体参数的默认值和边界由其声明处理。程序通常应调用 AHSProgram.bind(),让全部波形和空间权重使用同一组值。
concat ¶
concat(
*others: Waveform,
waveform_id: str | None = None,
max_points: int = 1024,
) -> Waveform
把当前波形与至少一个后续波形串接,返回新波形,总时长为各段之和。各段必须具有相同单位和兼容类型:常数/阶梯为一类,线性/折线为另一类。线性段在连接处必须连续;符号端点按表达式是否相同判断。
不支持 PCHIP 段串接,因为重新拟合会改变原曲线。按名称引用的旧式常数表达式需先绑定。max_points 为 2–1024 的整数,限制输出采样点数;无后续段、类型不兼容、连接点不连续或超限会产生错误。
返回数值 WaveformIR 的独立副本。未绑定时抛出 ProgramValidationError,不会用占位值导出。
参数检查¶
所有幅值均已数值化时返回 True。
判断波形是否保存按名称引用的规范表达式。它与“是否还含任何符号值”不同;检查能否导出应使用 is_bound。
返回引用的参数名称元组,名称去重。普通参数模板按名称排序;规范表达式使用其依赖顺序。
validate_parameter_references ¶
validate_parameter_references(
declarations: Mapping[str, Parameter],
) -> None
用 declarations 检查参数归属、名称和单位,成功返回 None。直接传入的 Parameter 必须就是当前程序拥有的声明对象;表达式依赖必须能在声明映射中找到。不匹配时抛出 ProgramValidationError。此方法不检查物理波形是否符合目标限制。