You need to enable JavaScript to run this app. 如何使用Python生成11000点的正弦波与方波随机交替序列?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python生成11000点的正弦波与方波随机交替序列?

随机交替正弦波与方波序列生成实现

时间序列修正

你目前写的时间戳生成代码np.linspace(0, 11000, endpoint=False)默认仅生成50个采样点,若需要严格匹配11000个时间戳的要求,需要显式指定采样数量:
t = np.linspace(0, 11000, num=11000, endpoint=False)

核心实现逻辑

实现随机交替效果的核心思路是:

  • 将完整时间轴拆分为多个随机长度的连续片段
  • 为每个片段随机分配正弦波或方波的生成规则
  • 逐段计算信号数值后拼接为完整的11000点序列

分步实现代码

1. 导入依赖

import numpy as np

2. 生成分段规则

可根据需要调整单段信号的持续长度范围,控制波形切换的频率:

# 配置参数
total_points = 11000
min_seg_len = 50    # 单段信号最短持续采样数
max_seg_len = 300   # 单段信号最长持续采样数
# 生成时间轴
t = np.linspace(0, 11000, num=total_points, endpoint=False)
# 生成每一段的长度,直到凑满总采样数
seg_lengths = []
current_filled = 0
while current_filled < total_points:
    current_seg = np.random.randint(min_seg_len, max_seg_len)
    # 最后一段截断到剩余位置,避免超出总长度
    if current_filled + current_seg > total_points:
        current_seg = total_points - current_filled
    seg_lengths.append(current_seg)
    current_filled += current_seg
# 为每一段随机分配信号类型:0为方波,1为正弦波
seg_types = np.random.randint(0, 2, size=len(seg_lengths))

3. 逐段生成信号值

每一段的波形参数(振幅、频率、电平)均做随机化处理,避免不同段的波形参数完全一致,还原自然随机交替的效果:

signal = np.zeros(total_points)
cursor = 0  # 记录当前填充的序列位置
for seg_len, seg_type in zip(seg_lengths, seg_types):
    # 取当前段对应的时间范围
    t_segment = t[cursor : cursor + seg_len]
    if seg_type == 1:
        # 生成正弦波:随机配置频率、振幅、初相
        freq = np.random.uniform(0.005, 0.02)
        amp = np.random.uniform(0.5, 1.5)
        phase = np.random.uniform(0, 2 * np.pi)
        signal[cursor : cursor + seg_len] = amp * np.sin(2 * np.pi * freq * t_segment + phase)
    else:
        # 生成方波:随机配置高低电平、跳变频率
        high_level = np.random.uniform(0.8, 1.2)
        low_level = np.random.uniform(-1.2, -0.8)
        switch_freq = np.random.uniform(0.002, 0.01)
        square_base = np.sign(np.sin(2 * np.pi * switch_freq * t_segment))
        signal[cursor : cursor + seg_len] = np.where(square_base > 0, high_level, low_level)
    cursor += seg_len

参数调整说明

  • 若需要更频繁的波形切换,可调小min_seg_len和max_seg_len的数值
  • 若需要增大波形的振荡幅度,可调整正弦波的amp范围、方波的高低电平范围
  • 若需要改变波形的振荡密度,可调整正弦波的freq范围、方波的switch_freq范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 11:36:04