1 个不稳定版本

0.1.0 2024年4月9日

#748算法


用于 maia-httpd

MIT/Apache

120KB
1.5K SLoC

pm-remez: Parks-McClellan Remez FIR设计算法

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

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-staticopenblas-systemnetlib-staticnetlib-systemintel-mkl-staticintel-mkl-system。带有 -static 版本的每个标志都会构建 LAPACK 后端,并将其静态链接。带有 -system 版本的会链接到系统安装的库(链接可以是动态的或静态的,取决于安装的库类型)。例如,

cargo build --release --features openblas-system

将会构建对系统安装的 OpenBLAS 库的依赖。

Python 包使用 maturin 构建。它可以构建为

maturin build --release

python -mbuild

许可证

根据您的选择,许可协议为

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何有意包含在作品中的贡献,将如上所述双重许可,没有任何附加条款或条件。

依赖关系

~77MB
~1M SLoC