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.
Warning
Version 0.14.0.0 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.
Changelog
- 0.14.0.0
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
- 0.13.0.1
Fix compatibility with most recent cvxpy
Minor bugfixes
- 0.13.0.0
Python 3 compatibility!
Bugfixes
- 0.12.0.1
Fix crashes due to incorrect management of parameters in deprecated functions
- 0.12.0.0
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
- 0.11.0
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
- 0.10.1
Fix setup script for compatibility with MacOs
Provide getting started guide for MacOs
Minor fixes in documentation
- 0.10.0
Ready setup script for distribution
Implement partitionABCD in delsig module
Make delsig module PEP8 compliant
Some minor improvements to utility functions
- 0.9.1
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)
- 0.9.0
Include a local version of the discontinued cvxpy package by Tomas Tinoco de Ribera. This is a temporary measure
- 0.8.3
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
- 0.8.2
Fix some licensing issues
- 0.8.1
Prevent synthesizeNTF failure if there are no zeros to optimize
Improve some docstrings
Remove some spurious imports
Fix normalization in quantization_noise_gain functions
- 0.8.0
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
- 0.7.3
Apply fixes introduced in DELSIG 7.4
Make port of DELSIG functions more consistent with DELSIG
Provide better documentation to some functions
Bug fixes
- 0.7.2
Make codebase compatible with scipy 0.12.0
Make delsig module contain its reference delsig version
Minor fixes to the documentation
- 0.7.1
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.
- 0.7.0
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
- 0.6.1
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
- 0.6.0
First released version