{"id":28374088,"url":"https://github.com/maia-sdr/pm-remez","last_synced_at":"2026-01-18T00:32:36.990Z","repository":{"id":232353669,"uuid":"784127321","full_name":"maia-sdr/pm-remez","owner":"maia-sdr","description":"Parks-McClellan Remez FIR design algorithm","archived":false,"fork":false,"pushed_at":"2025-04-16T11:24:17.000Z","size":120,"stargazers_count":18,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-29T21:10:54.498Z","etag":null,"topics":["dsp","filter-design","fir-filter","parks-mcclellan","remez"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maia-sdr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-09T08:37:04.000Z","updated_at":"2025-04-16T11:24:17.000Z","dependencies_parsed_at":"2024-04-09T09:53:59.818Z","dependency_job_id":"5850e876-2280-44d2-b2de-39273208c22c","html_url":"https://github.com/maia-sdr/pm-remez","commit_stats":null,"previous_names":["maia-sdr/pm-remez"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/maia-sdr/pm-remez","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maia-sdr%2Fpm-remez","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maia-sdr%2Fpm-remez/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maia-sdr%2Fpm-remez/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maia-sdr%2Fpm-remez/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maia-sdr","download_url":"https://codeload.github.com/maia-sdr/pm-remez/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maia-sdr%2Fpm-remez/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261930607,"owners_count":23231909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dsp","filter-design","fir-filter","parks-mcclellan","remez"],"created_at":"2025-05-29T21:10:20.858Z","updated_at":"2026-01-16T16:04:41.075Z","avatar_url":"https://github.com/maia-sdr.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pm-remez: Parks-McClellan Remez FIR design algorithm\n\n[![Crates.io][crates-badge]][crates-url]\n[![Rust](https://github.com/maia-sdr/pm-remez/actions/workflows/rust.yml/badge.svg)](https://github.com/maia-sdr/pm-remez/actions/workflows/rust.yml)\n[![Rust Docs][docs-badge]][docs-url]\n[![Python](https://github.com/maia-sdr/pm-remez/actions/workflows/maturin.yml/badge.svg)](https://github.com/maia-sdr/pm-remez/actions/workflows/maturin.yml)\n[![Python Docs](https://readthedocs.org/projects/pm-remez/badge/?version=latest)](https://pm-remez.readthedocs.io/en/latest/?badge=latest)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[crates-badge]: https://img.shields.io/crates/v/pm-remez\n[crates-url]: https://crates.io/crates/pm-remez\n[docs-badge]: https://docs.rs/pm-remez/badge.svg\n[docs-url]: https://docs.rs/pm-remez\n\npm-remez is a modern Rust implementation of the Parks-McClellan Remez exchange\nalgorithm. It can be used as a Rust library and as a Python package via its\nPython bindings.\n\npm-remez supports the design of FIR filters with even symmetry and odd symmetry,\nand with an even number of taps and an odd number of taps, by reducing all these\ncases to the even symmetry odd number of taps case. The desired frequency\nresponse in each band, as well as the weights, can be defined as arbitrary\nfunctions. The library can use double-precision IEEE 754 floating-point numbers\nfor calculations, as well as other higher precision floating-point\nimplementations, such as\n[num-bigfloat](https://docs.rs/num-bigfloat/latest/num_bigfloat/). This can be\nused to solve numerically challenging problems that are difficult to solve using\ndouble-precision arithmetic.\n\nThe implementation draws ideas from\n[a paper by S.I. Filip](https://dl.acm.org/doi/10.1145/2904902)\nto make the algorithm robust against numerical errors. These ideas include the\nuse of Chebyshev proxy root finding to find the extrema of the weighted error\nfunction in the Remez exchange step.\n\n## Documentation\n\nThe documentation for the Rust crate is hosted in\n[docs.rs/pm-remez](https://docs.rs/pm-remez).\n\nThe documentation for the Python package is hosted in\n[pm-remez.readthedocs.io](https://pm-remez.readthedocs.io/).\n\nThe Python package documentation contains a series of examples that show how to\nuse pm-remez to design commonly used types of FIR filters. These illustrate the\ncapabilities of pm-remez and also serve as a filter design guide. The\ndocumentation of the Rust crate contains a few examples of the Rust API. The\nPython examples can also be written in Rust (and in fact this is done\n[as part of integration testing](tests/filter_designs.rs)).\n\n## Python package\n\nThe pm-remez Python package is [published in\nPyPI](https://pypi.org/project/pm-remez/). There are pre-built binary packages\nfor common architectures and operating systems. For these, the package can be\ninstalled by doing\n\n```\npip install pm-remez\n```\n\n## Building\n\nThe pm-remez crate uses [ndarray-linalg](https://docs.rs/ndarray-linalg/) to\nsolve eigenvalue problems. This in turn depends on LAPACK. The pm-remez crate\nhas several feature flags that are used to select the LAPACK backend. Exactly\none of these features needs to be enabled to build pm-remez. The feature flags\nare `openblas-static`, `openblas-system`, `netlib-static`, `netlib-system`,\n`intel-mkl-static` and `intel-mkl-system`. The `-static` versions of each flag\nbuild the LAPACK backend and link statically against it. The `-system` versions\nlink against a system-installed library (linking can be dynamic or static\ndepending on which type of library is installed). For example,\n```\ncargo build --release --features openblas-system\n```\nwill build against a system-installed OpenBLAS library.\n\nThe Python package is built using [maturin](https://docs.rs/ndarray-linalg/).\nIt can be built with\n```\nmaturin build --release\n```\nor\n```\npython -mbuild\n```\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0\n   ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license\n   ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaia-sdr%2Fpm-remez","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaia-sdr%2Fpm-remez","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaia-sdr%2Fpm-remez/lists"}