如何使用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
相关产品推荐
相关产品推荐

