You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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:时间轴的精细度,数值越小,脉冲边缘越平滑

关键逻辑解释

  1. 先计算总时间,确保覆盖所有脉冲和间隔的完整范围
  2. 初始化信号数组为基线偏移量,无脉冲区域直接保持基线水平
  3. 通过循环遍历每个脉冲,计算其时间区间,用布尔掩码筛选对应时间点,将信号值设为基线+幅度
  4. 绘图时设置合理的坐标轴范围,让信号形态展示更清晰

内容的提问来源于stack exchange,提问作者oskrjsosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:41:07