如何用Python绘制带自定义变量的非周期性方波脉冲串
非周期性类方波信号的Python实现
实现思路
不用scipy.signal.square(它仅生成周期性方波),我们手动构造非周期脉冲序列,所有核心参数都可灵活自定义:
- 逐个计算每个脉冲的时间区间
- 基于时间数组生成对应信号值
- 完全脱离周期限制,精准控制每个脉冲的位置与形态
完整代码示例
import numpy as np import matplotlib.pyplot as plt # 自定义参数 n_pulses = 3 # 脉冲数量n pulse_interval = 2 # 脉冲间隔p(脉冲结束到下一个脉冲开始的时间) pulse_width = 1 # 脉宽 amplitude = 5 # 脉冲幅度 offset = 1 # 信号偏移量(基线值) time_resolution = 0.01 # 时间分辨率,越小信号边缘越平滑 # 计算总时间长度 total_time = n_pulses * pulse_width + (n_pulses - 1) * pulse_interval # 生成时间数组 t = np.arange(0, total_time, time_resolution) # 初始化信号为基线偏移量 signal = np.full_like(t, offset) # 逐个设置每个脉冲的信号值 for i in range(n_pulses): pulse_start = i * (pulse_width + pulse_interval) pulse_end = pulse_start + pulse_width # 筛选时间数组中对应脉冲区间的索引 mask = (t >= pulse_start) & (t < pulse_end) signal[mask] = offset + amplitude # 绘制信号 plt.figure(figsize=(10, 4)) plt.plot(t, signal, linewidth=2) plt.xlabel('时间') plt.ylabel('信号幅度') plt.title('非周期性类方波信号') plt.grid(True, linestyle='--', alpha=0.7) plt.xlim(0, total_time) plt.ylim(offset - 0.5, offset + amplitude + 0.5) plt.show()
参数说明与调整
n_pulses:控制生成的脉冲总数,修改为任意正整数即可pulse_interval:两个脉冲之间的空闲时间,单位与时间轴一致pulse_width:单个脉冲的持续时长amplitude:脉冲相对于基线(offset)的高度,设为负数可生成负脉冲offset:无脉冲时的信号基线值time_resolution:时间轴的精细度,数值越小,脉冲边缘越平滑
关键逻辑解释
- 先计算总时间,确保覆盖所有脉冲和间隔的完整范围
- 初始化信号数组为基线偏移量,无脉冲区域直接保持基线水平
- 通过循环遍历每个脉冲,计算其时间区间,用布尔掩码筛选对应时间点,将信号值设为基线+幅度
- 绘图时设置合理的坐标轴范围,让信号形态展示更清晰
内容的提问来源于stack exchange,提问作者oskrjsosa
相关产品推荐
相关产品推荐

