本仓库提供一个完整的 MATLAB 示例:使用 等波纹法(Parks–McClellan) 设计线性相位 FIR 低通滤波器。
流程包含:firpmord 估算阶数 → firpm 设计系数 → 频响/群延迟分析 → 自动加阶迭代直到满足阻带衰减指标。
- 使用
firpmord根据指标估算最小阶数 - 使用
firpm(Parks–McClellan)生成等波纹 FIR 系数 - 迭代增加阶数(step 可调),直到阻带满足
Ast - 输出与展示:
- 幅频响应(dB)
- 相频响应(解包裹)
- 群延迟(Group Delay)
- 在命令行打印最终性能指标(通带纹波、阻带最差点等)
- MATLAB(建议 R2018b 及以上)
- Signal Processing Toolbox(需要
firpmord/firpm/freqz/grpdelay)
-
克隆仓库或下载源码:
git clone <your-repo-url> cd <repo-folder>
-
用 MATLAB 打开工程根目录(或将根目录加入路径)。
-
运行脚本(后缀为.mlx的文件为实时脚本):
run('src/Firpm_Equiripple.m')
运行后会展示幅频、相频响应和群延时的仿真图,并在命令行输出每次迭代结果与最终指标。
脚本中可调参数示例(代码中已按下表准备了示例值):
| 参数 | 含义 | 示例值 |
|---|---|---|
fs |
采样率 | 32e6 |
fp |
通带截止频率 | 2.5e6 |
fst |
阻带起始频率 | 4.0e6 |
Ap |
通带最大衰减 / 波纹(dB) | 1 |
Ast |
阻带最小衰减(dB) | 50 |
step |
每次加阶步长 | 10 |
maxIter |
最大迭代次数 | 40 |
nFFT |
频率采样点数 | 16384 |
- 幅频响应(dB):标注
Fp、Fst、Ap、Ast参考线 - 相频响应:
unwrap(angle(H)) - 群延迟:
grpdelay
firpmord估算阶数N- 每次尝试的
stopMax(阻带最差点)与passRipple(通带峰谷纹波) - 满足指标后输出最终
N与taps
.
├── README.md
├── LICENSE
├── src
│ ├── Firpm_Equiripple.m
│ └── Firpm-Equiripple.mlx
└── figures
├── figure1.png
└── figure2.png
本项目采用 Apache-2.0 License 开源协议。
欢迎 Star ⭐ 和 Fork 🧑💻!
- 增大
step或maxIter - 提高
nFFT以更精细评估阻带最差点 - 或放宽指标(例如增大过渡带:提高
fst或降低fp)

