Skip to main content

Python Based Delta-Sigma modulator design tools

Project description

This is a Python/Scipy toolbox for the design and simulation of ΔΣ Modulators, with emphasis on digital modulators.

Currently, it focuses on tools for the design of the modulator NTF. It also includes a fast simulator for digital modulators. Furthermore, it includes a Python/Scipy port of some functions from the DELSIG toolbox by R. Schreier.

The code includes an original NTF design technique fully described in the papers:

  • Sergio Callegari, Federico Bizzarri “Output Filter Aware Optimization of the Noise Shaping Properties of ΔΣ Modulators via Semi-Definite Programming”, IEEE Transactions on Circuits and systems - Part I: Regular Papers, Vol. 60, N. 9, pp. 2352-2365. Sept. 2013. DOI: 10.1109/TCSI.2013.2239091. Pre-print available on ArXiv.
  • Sergio Callegari, Federico Bizzarri “Noise Weighting in the Design of ΔΣ Modulators (with a Psychoacoustic Coder as an Example),” IEEE Transactions on Circuits and Systems - Part II: Express Briefs, Vol. 60, N. 11, pp. 756-760. Nov. 2013. DOI: 10.1109/TCSII.2013.2281892. Pre-print available on ArXiv.

If you find the code useful, please cite these papers in your work.

The code is available on the Python Package Index, also known as Pypi, in at the Pypi PYDSM page.

The pre-built documentation is also available in a dedicated PyDSM documentation page on Pypi.


Version of PyDSM is likely going to be the last version supporting Python 2

PyDSM is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

See file COPYING for further details.

Part of this code, limited to the delsig module, is ported from the DELSIG toolbox copyright by R. Schreier and licensed under the BSD license, as specified in the corresponding files.

Distribution temporarily includes a patched version of the CVXPY package by Tomas Tinoco de Rubira, that is currently discontinued, being replaced by the CVXPY package by Steven Diamond and Eric Chu and Stephen Boyd that provices more functionality and a different API. This code is copyright by Tomas Tinoco de Rubira and licensed under the GPLv3+, as specified in the corresponding files.

PyDSM 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 GNU General Public License for more details.

  • Fix compatibility with cvxpy 1.0.x
  • Fix compatibilit with PICOS 1.2.0
  • Fix compatibility with matplotlib 3
  • Fix compatibility with sphinx 2.2.0 (html docs only)
  • Minor bugfixes
  • Fix compatibility with most recent cvxpy
  • Minor bugfixes
  • Python 3 compatibility!
  • Bugfixes
  • Fix crashes due to incorrect management of parameters in deprecated functions
  • Switch to new version numbering scheme also in view of PEP 440
  • Install as zipped package
  • Modify management of optional parameters in some functions. Note that this implies a minor API breakage.
  • Implement new hybrid NTF design method
  • Slightly improve accuracy of weighted NTF design functions
  • Improve quantization_noise_gain function
  • Improve html documentation
  • Let multiple modelers be selected in functions using convex optimization (cvxpy, cvxpy_old and picos are supported)
  • Implement some more functions in delsig module (axisLabels, rms)
  • Many small fixes
  • Switch to setuptools for building
  • Improve testing framework
  • Better management of optional parameters in some functions
  • API cleanups (a best effort has been put in retaining back-compatibility. Some back compatibility functions are deprecated and will be removed)
  • Code style improvements
  • Fix setup script for compatibility with MacOs
  • Provide getting started guide for MacOs
  • Minor fixes in documentation
  • Ready setup script for distribution
  • Implement partitionABCD in delsig module
  • Make delsig module PEP8 compliant
  • Some minor improvements to utility functions
  • Apply some fixes to the modulator simulator
  • Make building for 64 bit windows possible
  • Implement clans NTF design method
  • Implement minmax NTF design method (only single band LP, so far)
  • Include a local version of the discontinued cvxpy package by Tomas Tinoco de Ribera. This is a temporary measure
  • Fix a typo in the fast DSM simulator (only affecting case where modulator structure is passed in ABCD form)
  • Add example from ICECS 2013 paper
  • Enhance quantization_weighted_noise_gain function
  • Fix some licensing issues
  • Prevent synthesizeNTF failure if there are no zeros to optimize
  • Improve some docstrings
  • Remove some spurious imports
  • Fix normalization in quantization_noise_gain functions
  • Add NTF design method based on a noise weighting function
  • Provide a new module with standard audio weighting functions
  • Provide a new module with ISO 226 equal loudness contours
  • Provide a new module with NTF design methods for psychoacoustically optimal modulators for audio signals
  • Fix a regression in ds_optzeros introduced with version 0.7.3 and preventing some example code from running
  • Add new examples from a recently published TCAS-II paper
  • Use 'ba' specifier for requiring filters in numerator/denominator form
  • Make evalTF function more robust against complex overflow
  • Bug fixes
  • Apply fixes introduced in DELSIG 7.4
  • Make port of DELSIG functions more consistent with DELSIG
  • Provide better documentation to some functions
  • Bug fixes
  • Make codebase compatible with scipy 0.12.0
  • Make delsig module contain its reference delsig version
  • Minor fixes to the documentation
  • Fix computation of impulse response of filters that are already in FIR form.
  • Avoid direct access to numpy array data in Cython code. This is in preparation for future releases of numpy where direct access to array data is already deprecated.
  • Implement the synthesizeChebyshevNTF NTF design strategy from DELSIG.
  • Dropped dependency on ATLAS on Windows. Now using the blas functions made available via scipy. The linux version still uses ATLAS that has a little performance advantage.
  • Much simpler installation on Windows
  • API changes: renamed synthezize_ntf_from_filter_ir into synthezize_ntf_from_filter_imp; swapped param order in q0_from_filter_imp_response.
  • Fixed passing of options to synthesize_ntf_from_q0 and synthesize_ntf_from_filter_imp
  • Add project logo to the project source
  • Ship html documentation separately from main code
  • Add sample code to replicate the results in an ICECS 2012 paper
First released version

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pydsm, version
Filename, size File type Python version Upload date Hashes
Filename, size (552.6 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page