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.1.tar.gz (59.4 kB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.8+ Windows x86-64

pm_remez-0.1.1-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.1-cp38-abi3-macosx_11_0_arm64.whl (826.6 kB view details)

Uploaded CPython 3.8+ macOS 11.0+ ARM64

pm_remez-0.1.1-cp38-abi3-macosx_10_12_x86_64.whl (820.1 kB view details)

Uploaded CPython 3.8+ macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pm_remez-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2025c889913b08094ebf519f5251df101b704917d557990e536d0504aace9465
MD5 9d50c0348c01d3260fdea19b79aac918
BLAKE2b-256 f8a3877865aad1b9a82874d0d29420e1a71983fe064f08204d75148ca6b2fcaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pm_remez-0.1.1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f003f2d7d21564f8d4099f4bbaee5af23e7228e352dd737a0b900a33e8b017dc
MD5 b3869aaa23fa6ed75b7056c9c2bc0723
BLAKE2b-256 410cb52ae2987481b457f6fb96e949c855ad01742429c4406646bf835b5cf057

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pm_remez-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cfca052e1ba49f252020d4543ca2fa6a7662eefd3b135c7df1b13d4c562e83ea
MD5 276ab17daded037640de56c2c7b9f4e2
BLAKE2b-256 d0506ae538b04ee9b5f915d2ffe2671dd8762c0596d565a1fb75eb542d42c395

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pm_remez-0.1.1-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53fbaf00bc778f862c31df25159669028257ac9c6d60391198a9c994b25a8245
MD5 abea8a8f70c45b85a284463e83427932
BLAKE2b-256 cd4167f5406cb2361bb0d44291d7b9d92db7cbd6d571cf12ddccd6d7b12b66b1

See more details on using hashes here.

File details

Details for the file pm_remez-0.1.1-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pm_remez-0.1.1-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 90477df1121b5b4dd9eaee1e292f9f7d4a7c774ab66bd914a6b5b2563c05fad8
MD5 439ca567d42a20229334fc504e6bf5ea
BLAKE2b-256 c9f598ff39291a4bda2a269f831018da3316fde8bfcde8af671bcb828b33b5c3

See more details on using hashes here.

Supported by

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