# Source code for deltasigma._zinc

# -*- coding: utf-8 -*-
# _zinc.py
# The zinc 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.
"""This module provides the zinc() function which calculates the magnitude
response of a cascade of comb filters.
"""
import numpy as np
[docs]def zinc(f, m=64, n=1):
"""Calculate the magnitude response of a cascade of ``n`` ``m``-th order comb filters.
The magnitude of the filter response is calculated mathematically as:
.. math::
\\left|H(f)\\right| = \\left|\\frac{\\mathrm{sinc}(m f)}{\\mathrm{sinc}(f)}\\right|^n
**Parameters:**
f : ndarray
The frequencies at which the magnitude response is evaluated.
m : int, optional
The order of the comb filters.
n : int, optional
The number of comb filters in the cascade.
**Returns:**
HM : ndarray
The magnitude of the frequency response of the cascade filter.
"""
return np.fabs(np.sinc(m * f) / np.sinc(f)) ** n