scipy.signal.step和scipy.signal.lsim的输出不是我想要的,所以我一定是用错了。lsim的输出实际上相当接近,但振幅衰减了许多个数量级。我的问题是线性系统对于零输入不能是非零的吗?我的初始条件是1.65V (我正在模拟一个运算放大器电路),而在实际生活中,在阶跃发生之前,电路的长时间>>时间常数的输入是1.65V。
我已经绘制了所有波形,并放大了lsim本身的输出,以查看其具有大致准确的形状。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy import signal
time = np.linspace(0,1e-3, num=100)
fc = 2e3
tau = 1/(2*np.pi*fc)
gain = .7
step_amplitude=.4
initial = 1.65
input_step = [1.65 for i in range(20)] + [2 for i in range(80)]
ideal_ckt = signal.ZerosPolesGain([],[-3e3*2*np.pi],[gain])
t, ideal_step = signal.step(ideal_ckt, X0=[1.65],T= time)
t, output, x = signal.lsim(ideal_ckt, input_step, T=time)
should_be = step_amplitude*gain*(1-np.exp(-(time)/tau)) + initial
should_be[20:] = should_be[0:80]
should_be[0:20] = 1.65
fig, ax = plt.subplots()
ax.plot(time, input_step, label='input')
ax.plot(t, output, label='lsim')
ax.plot(time, ideal_step, label='signal.step')
ax.plot(time, should_be, label='should_be')
ax.set_xlabel('time')
ax.set_ylabel('Voltage')
ax.legend()
fig.show()我希望看到一个很好的RC式的一阶指数上升到初始值+输入阶跃幅度*增益的稳态值。我希望should_be、ideal_step和output的曲线看起来都一样。他们为什么不呢?

发布于 2019-08-16 07:31:07
系统应定义为:
ideal_ckt = signal.ZerosPolesGain([],[-p1*1],[gain*p1])由于文档描述表单的方式。这解释了大的关注度: 1/(s/p+1)是规范化的形式。但是scipy代码的形式是1/(s+p)。要从第一种形式转到第二种形式,您可以使用p/(s+p)结束
https://stackoverflow.com/questions/57029002
复制相似问题