Source code for deltasigma._l1norm
# -*- coding: utf-8 -*-
# _l1norm.py
# Module providing the l1norm function
# Copyright 2013 Giuseppe Venturini
# This file is part of python-deltasigma.
#
# python-deltasigma is a 1:1 Python replacement of Richard Schreier's
# MATLAB delta sigma toolbox (aka "delsigma"), upon which it is heavily based.
# The delta sigma toolbox is (c) 2009, Richard Schreier.
#
# python-deltasigma is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# LICENSE file for the licensing terms.
"""Module providing the l1norm() function
"""
from __future__ import division
from warnings import warn
import numpy as np
from scipy.signal import dimpulse, lti
from ._utils import _get_zpk, _is_A_B_C_D, _is_num_den, _is_zpk
[docs]def l1norm(H):
"""Compute the l1-norm of a z-domain transfer function.
The norm is evaluated over the first 100 samples.
**Parameters:**
H : sequence or lti object
Any supported LTI representation is accepted.
**Returns:**
l1normH : float
The L1 norm of ``H``.
.. note:
LTI objects are translated to ZPK tuples, with possible
rounding errors.
"""
if _is_zpk(H):
z, p, k = H
HP = (z, p, k, 1.)
elif _is_num_den(H):
num, den = H
HP = (num, den, 1.)
elif _is_A_B_C_D(H):
A, B, C, D = H
HP = (A, B, C, D, 1.)
elif isinstance(H, lti):
warn('l1norm() got an LTI object, translated to zpk form, rounding errors possible.')
z, p, k = _get_zpk(H)
HP = (z, p, k, 1.)
_, y = dimpulse(HP, t=np.arange(100))
return np.sum(np.abs(y[0]))