Skip to content

Scaling difference in impulse response size compared to scipy.signal #813

Description

@sawyerbfuller

Discussed in #747

Originally posted by fhchl June 29, 2022
I had some code that I wanted to port from using scipy.signal.StateSpace etc. to python-control. There seems to be some scaling difference between the two implementations. What am I overlooking?

import numpy as np
import control
import scipy.signal

# random state space matrices
t= np.linspace(0, 10, dtype=float)
ss = control.drss(3, 2, 1)
A, B, C, D = ss.A, ss.B, ss.C, ss.D
dt = t[1]

# compute impulse response with python-control
ss = control.ss(A, B, C, D, dt=dt)
t_control, h_control = control.impulse_response(ss, T=t)
plt.figure()
plt.plot(t_control, h_control[0, 0])
plt.plot(t_control, h_control[1, 0])

# compute impulse response with scipy.signal
ss_scipy = scipy.signal.StateSpace(A, B, C, D, dt=dt)
t_scipy, (h_scipy,) = scipy.signal.dimpulse(ss_scipy, t=t)
plt.figure()
plt.plot(t_scipy, h_scipy[:, 0])
plt.plot(t_scipy, h_scipy[:, 1])

plt.show()

Creates these two here.

output

output

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions