1 个不稳定版本
0.1.0 | 2024年4月9日 |
---|
#748 在 算法 中
用于 maia-httpd
120KB
1.5K SLoC
pm-remez: Parks-McClellan Remez FIR设计算法
pm-remez 是 Parks-McClellan Remez 交换算法的现代 Rust 实现。它可以作为一个 Rust 库,也可以通过其 Python 绑定作为 Python 包使用。
pm-remez 支持设计具有偶对称和奇对称的 FIR 滤波器,具有偶数抽头和奇数抽头,通过将这些情况都归为偶对称奇数抽头的情况。每个频带中所需的频率响应以及权重可以定义为任意函数。库可以使用双精度 IEEE 754 浮点数进行计算,也可以使用其他更高精度的浮点实现,例如 num-bigfloat。这可以用来解决难以使用双精度算术解决的数值挑战性问题。
该实现借鉴了 S.I. Filip 的一篇论文 中的思想,使算法对数值误差具有鲁棒性。这些想法包括在 Remez 交换步骤中使用切比雪夫代理根查找来找到加权误差函数的极值。
文档
Rust 库的文档托管在 docs.rs/pm-remez。
Python 包的文档托管在 pm-remez.readthedocs.io。
Python 包的文档包含一系列示例,展示了如何使用 pm-remez 设计常用的 FIR 滤波器类型。这些示例说明了 pm-remez 的功能,同时也作为滤波器设计指南。Rust 库的文档包含一些 Rust API 的示例。Python 示例也可以用 Rust 编写(实际上这是在 集成测试的一部分 实现的)。
构建
pm-remez 包使用 ndarray-linalg 来解决特征值问题。这反过来又依赖于 LAPACK。pm-remez 包有多个功能标志,用于选择 LAPACK 后端。需要启用这些功能标志之一来构建 pm-remez。功能标志包括 openblas-static
、openblas-system
、netlib-static
、netlib-system
、intel-mkl-static
和 intel-mkl-system
。带有 -static
版本的每个标志都会构建 LAPACK 后端,并将其静态链接。带有 -system
版本的会链接到系统安装的库(链接可以是动态的或静态的,取决于安装的库类型)。例如,
cargo build --release --features openblas-system
将会构建对系统安装的 OpenBLAS 库的依赖。
Python 包使用 maturin 构建。它可以构建为
maturin build --release
或
python -mbuild
许可证
根据您的选择,许可协议为
- Apache 许可证 2.0 版(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何有意包含在作品中的贡献,将如上所述双重许可,没有任何附加条款或条件。
依赖关系
~77MB
~1M SLoC