给定频率下创建重复脉冲串事件时间线的优化方法
生成重复脉冲串的时间线解决方案
我来帮你搞定这个脉冲串时间线的生成问题!你之前的代码是生成单频率的脉冲时间线,现在要改成以fq_burst频率输出n_pulse个脉冲的脉冲串,再以fq频率重复整个脉冲串,我们可以分步骤来实现:
核心思路拆解
- 先计算单个脉冲串内的所有脉冲时间点(相对于串的起始时刻)
- 再计算所有脉冲串的起始时刻(按
fq的重复频率生成) - 通过广播将起始时刻和串内时间点结合,得到所有脉冲的时间戳
- 最后过滤掉超出
t0到tf范围的时间点
代码实现与解释
import numpy as np # ----------- 自定义参数 ----------- t0 = 0 # 起始时间(ms) tf = 500 # 结束时间(ms) fq_burst = 50 # 脉冲串内部的脉冲频率(Hz) n_pulse = 4 # 每个脉冲串包含的脉冲数量 fq = 5 # 脉冲串的重复频率(Hz) # ---------------------------------- # 1. 计算单个脉冲串内的时间偏移(相对于串起始点) # 每个脉冲间隔 = 1/fq_burst * 1000 ms,生成n_pulse个时间点 burst_offsets = np.round(np.arange(0, n_pulse * (1/fq_burst * 1000), 1/fq_burst * 1000), 3) # 2. 计算所有脉冲串的起始时间 # 脉冲串的间隔 = 1/fq * 1000 ms,从t0开始生成到tf之前的起始点 burst_starts = np.round(np.arange(t0, tf, 1/fq * 1000), 3) # 3. 用广播生成所有脉冲的时间戳:每个起始时间 + 串内所有偏移 all_timestamps = burst_starts[:, np.newaxis] + burst_offsets # 4. 扁平化数组并过滤掉超过tf的时间点 timeline = np.round(all_timestamps.flatten(), 3) timeline = timeline[timeline < tf] print(timeline)
输出示例
运行上述代码后,会得到如下时间线:
array([ 0., 20., 40., 60., 200., 220., 240., 260., 400., 420., 440., 460.])
这个结果符合预期:
- 每个脉冲串包含4个脉冲,间隔20ms(对应
fq_burst=50Hz) - 脉冲串之间间隔200ms(对应
fq=5Hz) - 所有时间点都在0到500ms范围内(左闭右开,所以不包含500ms)
适配你之前的单脉冲场景
如果要回到你最初的20Hz单脉冲场景,只需要设置:
fq_burst=20n_pulse=1fq=20
运行代码后会得到和你之前一致的时间线:array([ 0., 50., 100., 150.])
内容的提问来源于stack exchange,提问作者Mathieu
相关产品推荐
相关产品推荐

