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

如何用Python生成固定时长的随机方波信号?

生成固定电平持续时长的随机方波信号

问题需求

需要生成每个电平固定持续5分钟的随机方波信号,振幅在0到1之间随机,到达时长后切换新振幅;同时叠加正弦波动并将值限制在0-1范围内,使用NumPy和Matplotlib实现仿真与可视化。现有代码无法保证电平时长固定,需修正。

原代码问题分析

原代码的核心问题在于:

  • 错误使用i % (square_duration + 1) == 0的判断逻辑,搭配随机的square_change变量,导致电平持续时间随机,无法固定为5分钟
  • 循环内逻辑冗余混乱,没有严格按照固定时长填充电平值

修改后的实现代码

import numpy as np
import matplotlib.pyplot as plt

# 参数定义
min_value = 0.0
max_value = 1.0
square_duration = 5 * 60  # 每个电平持续5分钟(秒)
max_sim = 1 * 60 * 60     # 总仿真时长1小时(秒)

# 计算总共有多少个完整电平段
num_segments = max_sim // square_duration
# 处理总时长不能被5分钟整除的剩余样本
remaining_samples = max_sim % square_duration

# 生成每个电平段的随机振幅
segment_values = np.random.uniform(min_value, max_value, size=num_segments)
# 若有剩余样本,用最后一个电平值填充
if remaining_samples > 0:
    segment_values = np.append(segment_values, segment_values[-1])

# 生成方波信号:重复每个电平值对应次数,截断到总仿真时长
pl = np.repeat(segment_values, square_duration)[:max_sim]

# 叠加正弦波动
pl += np.sin(np.arange(max_sim) / max_sim * 2 * np.pi) * 0.15

# 将值限制在0-1范围内
pl = np.clip(pl, min_value, max_value)

# 可视化
plt.figure(figsize=(12, 6))
plt.plot(np.arange(max_sim), pl)
plt.xlabel('时间(秒)')
plt.ylabel('振幅')
plt.title('固定5分钟电平时长的随机方波(叠加正弦波动)')
plt.grid(True)
plt.show()

代码说明

  • 固定电平时长:通过np.repeat直接将每个随机生成的振幅重复square_duration次,确保每个电平严格持续5分钟
  • 剩余样本处理:如果总仿真时长不是5分钟的整数倍,用最后一个电平值填充剩余样本,避免信号截断
  • 高效生成:使用NumPy向量化操作替代循环,逻辑更清晰且运行效率更高
  • 波动与限幅:按需求叠加正弦波动后,用np.clip确保所有值严格落在0-1区间内

内容的提问来源于stack exchange,提问作者K. Rincon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:18:21