如何定义返回单个数值而非数组的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
相关产品推荐
相关产品推荐

