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

Python中如何给信号添加延时?信号上界生成问题求助

问题解决:修正带延时的信号上界生成逻辑

您好,这是我在Stack Overflow的第一个问题,请多包涵。我有一组类字典结构的时间戳与对应值的列表,需要基于这些值生成带延时的信号上界和下界。目前下界已经实现,但上界的生成一直有问题。

期望信号示例(简化版)

timeList=              [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
myGeneratedHigherBound=[0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]
signalDataList=        [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0]
myGeneratedLowerBound= [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0]

已实现的下界代码

####### 创建下界 ######
def CalcExpResultL(commandSignal):
    # 生成的结果列表
    dataListL = []
    # 时间戳列表
    timeListL=commandSignal[0]
    for i in range(len(commandSignal[0])):
        if (commandSignal[1][i] == 0 or (commandSignal[1][i] == 1 and commandSignal[1][i-25] == 0)):
            dataListL.append(500)
        elif (commandSignal[1][i] == 1 and not commandSignal[1][i+25] == 0):
            dataListL.append(2025)
        else:
            dataListL.append(500)

    return [timeListL,dataListL]

尝试实现的上界代码(存在问题)

####### 创建上界 ######
def CalcExpResultH(commandSignal):
    dataListH = []
    timeListH=commandSignal[0]
    length = len(commandSignal[0])-25
    
    for i in range(length):
        if (commandSignal[1][i] == 0 and not commandSignal[1][i+25] == 0):
            dataListH.append(540)
        elif(commandSignal[1][i] == 1 or (commandSignal[1][i] == 0 and commandSignal[1][i-25] ==1)):
            dataListH.append(2045)
        else:
            dataListH.append(540)
            
    # 解决索引越界问题的临时方案
    remainder = len(timeListH) - len(dataListH)
    for i in range(remainder):
        dataListH.append(540)

    return [timeListH,dataListH]

我试过各种条件组合,但都没成功——要么上界的前一段延时是对的,后一段出不来;要么反过来。目前实现的效果如图:
当前实现效果


问题分析与修正方案

你的上界代码主要存在两个问题:

  1. 索引越界未完全处理:使用i-25时,当i<25会访问负数索引,直接报错;原代码仅限制了i+25的范围,但忽略了i-25的边界情况。
  2. 条件逻辑覆盖不全:上界需要同时覆盖「信号上升沿提前25单位触发」和「信号下降沿延后25单位结束」的场景,原条件组合没有完整覆盖这两个逻辑。

修正后的上界生成代码:

####### 创建上界(修正版)######
def CalcExpResultH(commandSignal):
    dataListH = []
    timeListH, signal = commandSignal
    signal_len = len(signal)
    
    for i in range(signal_len):
        # 检查25单位后是否会变为1(处理索引超出范围的情况)
        future_trigger = False
        if i + 25 < signal_len:
            future_trigger = signal[i+25] == 1
        
        # 检查25单位前是否是1(处理索引为负数的情况)
        past_trigger = False
        if i - 25 >= 0:
            past_trigger = signal[i-25] == 1
        
        # 满足任一条件则设为上界高值2045
        if signal[i] == 1 or future_trigger or past_trigger:
            dataListH.append(2045)
        else:
            dataListH.append(540)

    return [timeListH, dataListH]

逻辑说明

  • 上升沿提前:当当前位置的25个单位后信号会变为1时,上界提前切换为高值;
  • 下降沿延后:当当前位置的25个单位前信号是1时,上界保持高值,延后切换为低值;
  • 边界处理:对i+25超出列表长度、i-25小于0的情况做了判断,避免索引越界错误;
  • 完整覆盖:只要当前信号是1、或满足提前触发、或满足延后结束的条件,上界就保持高值,否则为低值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:40:40