Skip to main content

Parks-McClellan Remez FIR design algorithm

Project description

pm-remez: Parks-McClellan Remez FIR design algorithm

Crates.io Rust Rust Docs Python Python Docs License License: MIT

pm-remez is a modern Rust implementation of the Parks-McClellan Remez exchange algorithm. It can be used as a Rust library and as a Python package via its Python bindings.

pm-remez supports the design of FIR filters with even symmetry and odd symmetry, and with an even number of taps and an odd number of taps, by reducing all these cases to the even symmetry odd number of taps case. The desired frequency response in each band, as well as the weights, can be defined as arbitrary functions. The library can use double-precision IEEE 754 floating-point numbers for calculations, as well as other higher precision floating-point implementations, such as num-bigfloat. This can be used to solve numerically challenging problems that are difficult to solve using double-precision arithmetic.

The implementation draws ideas from a paper by S.I. Filip to make the algorithm robust against numerical errors. These ideas include the use of Chebyshev proxy root finding to find the extrema of the weighted error function in the Remez exchange step.

Documentation

The documentation for the Rust crate is hosted in docs.rs/pm-remez.

The documentation for the Python package is hosted in pm-remez.readthedocs.io.

The Python package documentation contains a series of examples that show how to use pm-remez to design commonly used types of FIR filters. These illustrate the capabilities of pm-remez and also serve as a filter design guide. The documentation of the Rust crate contains a few examples of the Rust API. The Python examples can also be written in Rust (and in fact this is done as part of integration testing).

Python package

The pm-remez Python package is published in PyPI. There are pre-built binary packages for common architectures and operating systems. For these, the package can be installed by doing

pip install pm-remez

Building

The pm-remez crate uses ndarray-linalg to solve eigenvalue problems. This in turn depends on LAPACK. The pm-remez crate has several feature flags that are used to select the LAPACK backend. Exactly one of these features needs to be enabled to build pm-remez. The feature flags are openblas-static, openblas-system, netlib-static, netlib-system, intel-mkl-static and intel-mkl-system. The -static versions of each flag build the LAPACK backend and link statically against it. The -system versions link against a system-installed library (linking can be dynamic or static depending on which type of library is installed). For example,

cargo build --release --features openblas-system

will build against a system-installed OpenBLAS library.

The Python package is built using maturin. It can be built with

maturin build --release

or

python -mbuild

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Project details


Download files

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

Source Distribution

pm_remez-0.1.7.tar.gz (62.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pm_remez-0.1.7-cp38-abi3-win_amd64.whl (16.6 MB view details)

Uploaded CPython 3.8+Windows x86-64

pm_remez-0.1.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

pm_remez-0.1.7-cp38-abi3-macosx_11_0_arm64.whl (854.3 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file pm_remez-0.1.7.tar.gz.

File metadata

  • Download URL: pm_remez-0.1.7.tar.gz
  • Upload date:
  • Size: 62.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.3

File hashes

Hashes for pm_remez-0.1.7.tar.gz
Algorithm Hash digest
SHA256 c2d45a027d21b4be05677d7b51949ef2c68b96767aab921cd89cdf1c670ae557
MD5 b91ecfadbb52e5a5db9b5aed0c392b4c
BLAKE2b-256 0fa622299f28b054b8af79ae1495e86ecde1b418f034c3f5f165ab92cc120647

See more details on using hashes here.

File details

Details for the file pm_remez-0.1.7-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: pm_remez-0.1.7-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 16.6 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.3

File hashes

Hashes for pm_remez-0.1.7-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 282e111df7f84579d389ea5a508304e2990d8874a375f3ff319b4a2b914ad6c2
MD5 ce66e424cf1f1768b09855a253fb0828
BLAKE2b-256 a75e1cd031910b6e6e5f9cc6f9b6cd25c4f925d11c56d21e9439dcfa3b24abc5

See more details on using hashes here.

File details

Details for the file pm_remez-0.1.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pm_remez-0.1.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1e097e742a6f9d4da0b2822343ba78f011878933a5247889cd535122b8b4514
MD5 59713744676da5c4beecffc58dfdb177
BLAKE2b-256 c3bebc914d225a054ff0547b33e02168ba2fcfdd2a76b6a44843c20cdc1e57c9

See more details on using hashes here.

File details

Details for the file pm_remez-0.1.7-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pm_remez-0.1.7-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d2f46dfe7a0181f04adfa48d226dc6ca21f1c4202fad6e8d487874fa1d9ff75
MD5 c98d87267b3d0da810fb2f1984f7a6e5
BLAKE2b-256 89a3e295c193006eda4436c1a6deae70cbec06e63ab6b7e478260ea5d6d9ce8f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page