Python中传入函数的信号莫名出现噪声问题排查
问题分析与解答
问题描述
通过代码 t,X = genS(f,T,L) 生成无噪声干净信号X,绘图确认信号纯净。将X传入函数 bopS(X,R,T,I,fs) 后,未对X执行其他操作,但再次绘图发现X出现噪声。查看bopS函数代码(如下),并未显式修改X,请问原因是什么?
def bopS(s,R,T,I,fs): s2 = s s1 = s2 + np.random.normal(0,0.1*max(s2),len(s2)) d = (R+T)/(I*fs) s1 = np.roll(s1,d) return s1,d
核心原因
大概率是你在调用bopS时,误将函数返回的带噪声信号重新赋值给了变量X,比如写了这样的代码:
X, d = bopS(X, R, T, I, fs)
细节解释
函数bopS内部不会修改传入的原始X:
s2 = s只是创建了一个指向同一numpy数组的引用,但后续的s2 + np.random.normal(...)操作会生成一个新的numpy数组(numpy的算术运算符默认返回新数组,不会修改原数组);np.roll(s1,d)同样返回一个新数组,不会改动原始的s(即传入的X);- 函数最终返回的是新生成的带噪声数组
s1,而非修改后的原参数。
如果你的调用代码没有将返回值赋值给X,原始X绝对不会被改变。请检查调用bopS的代码行,确认是否存在覆盖X的操作。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

