nengolib.signal.l1_norm

nengolib.signal.l1_norm(sys, rtol=1e-06, max_length=262144)[source]

Computes the L1-norm of a linear system within a relative tolerance.

The L1-norm of a (BIBO stable) linear system is the integral of the absolute value of its impulse response. For unstable systems this will be infinite. The L1-norm is important because it bounds the worst-case output of the system for arbitrary inputs within [-1, 1]. In fact, this worst-case output is achieved by reversing the input which alternates between -1 and 1 during the intervals where the impulse response is negative or positive, respectively (in the limit as T -> infinity).

Algorithm adapted from [1] following the methods of [2]. This works by iteratively refining lower and upper bounds using progressively longer simulations and smaller timesteps. The lower bound is given by the absolute values of the discretized response. The upper bound is given by refining the time-step intervals where zero-crossings may have occurred.

Parameters:
sys : linear_system_like

Linear system representation.

rtol : float, optional

Desired error (relative tolerance). Smaller tolerances require more compute time. Defaults to 1e-6.

max_length : integer, optional

Maximum number of time-steps to simulate the system’s impulse response. The simulation time-step is varied by the algorithm. Defaults to 2**18.

Returns:
norm : float

L1-norm of the output.

See also

L1Norm, state_norm()

Notes

The algorithm will terminate after either rtol tolerance is met, or max_length simulation steps are required — whichever occurs first.

References

[1]http://www.mathworks.com/matlabcentral/fileexchange/41587-system-l1-norm/content/l1norm.m J.F. Whidborne (April 28, 1995).
[2]Rutland, Neil K., and Paul G. Lane. “Computing the 1-norm of the impulse response of linear time-invariant systems.” Systems & control letters 26.3 (1995): 211-221.