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

如何定义返回单个数值而非数组的Python方波函数?

实现单个值输出的方波函数

自定义方波函数

直接写一个接收单个时间参数的函数,逻辑和scipy.signal.square完全对齐,返回对应时间点的方波值:

import numpy as np

def square_wave(t, freq=5, duty=0.5):
    omega = 2 * np.pi * freq
    # 计算当前时间点在周期内的相位(归一到0~2π区间)
    phase = np.mod(omega * t, 2 * np.pi)
    # 按占空比返回高/低电平(和scipy的square输出一致:1为高,-1为低)
    return 1.0 if phase < 2 * np.pi * duty else -1.0

修改你的代码

把原来错误的数组索引SQ[Sum]替换成函数调用,同时补全代码里未定义的变量(示例值可根据你的需求调整):

from scipy import signal as sig
import numpy as np
import math

# 补全缺失的变量(根据实际场景调整)
size = 1000
TP = 1/5  # 5Hz信号的周期
t_F = TP * 0.5  # 高电平持续时间(50%占空比)
d = 1.0

def square_wave(t, freq=5, duty=0.5):
    omega = 2 * np.pi * freq
    phase = np.mod(omega * t, 2 * np.pi)
    return 1.0 if phase < 2 * np.pi * duty else -1.0

t = np.linspace(0, 1, 1000)
x = np.full(size, 0.0)
Sum = 0.0  # 初始化累计值

for i, c in enumerate(t):
    if (c % TP) <= t_F:
        Sum += np.random.normal(0, 1) * math.sqrt(d)
    else:
        # 调用自定义函数获取当前时间点的方波值
        Sum += np.random.normal(0, 1) * math.sqrt(d) + square_wave(c)
    x[i] = Sum

说明

这个自定义函数不需要提前生成整个方波数组,给单个时间点就能直接返回对应电平,彻底解决你原来的浮点数索引数组的错误。函数的默认参数(5Hz、50%占空比)和你代码里的sig.square(2 * np.pi * 5 * t)完全匹配,输出结果和原数组对应位置的值一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:13:40