最近出现了有关Parks-McClellan的问题,一些评论指出Wikipedia上有关Parks-McClellan的文章指出,


... Parks-McClellan算法是对Remez算法或Remez交换算法。


性能上有区别吗?以八度为单位的remez函数与Matlab函数firpm是否等效?

#1 楼

Remez交换算法是一种通用的迭代过程,可以在$ L ^ \ infty $的意义上最佳地近似任何函数(即,给出最佳的最坏情况近似值,换句话说,将最大误差或最小最大值最小化)。 Parks-McClellan算法(PM)是Remez交换算法的一种变体,专门用于FIR滤波器。在您引用的Wiki文章中,



托马斯[公园]从休斯敦开车去普林斯顿参加会议。在会议上,他听了Ed Hofstetter关于新型FIR滤波器设计算法(最大纹波算法)的介绍。他将Hofstetter,Oppenheim和Siegel的论文带回休斯敦,考虑使用Chebyshev逼近理论设计FIR滤波器的可能性。他听说用Hofstetter算法实现的方法与Remez交换算法相似,因此决定寻求使用Remez交换算法的途径。


无需过多详细介绍两种算法之间的区别在于,雷米兹交换算法(RE)为您提供了设计最佳滤波器的条件(具体请参见此处的#3:误差必须具有相同的加权幅度,并且符号交替)。 RE执行迭代过程来计算满足上述条件的多项式系数(可以映射为FIR滤波器系数),即“替代定理”。 RE中的“ E”是过程的一部分,其中迭代过程中使用的误差最大值被新的最大值代替,新的最大值接近最佳值。 PM使用Tchebyshev多项式将多项式系数转换为控制一系列余弦函数的系数,这些系数直接转换为对称FIR系数。


谈到有关Octave中的remez函数和MATLAB中的firpm函数的问题,我相信它们是相同的。 MATLAB曾经有一个remez,已被淘汰,取而代之的是firpm。八度可能仍然坚持前者。在MATLAB R2011b中键入help remez可以得到以下内容:


REMEZ Parks-McClellan最佳等波纹FIR滤波器设计。

评论


$ \ begingroup $
我推断MathWorks将remez名称更改为firpm,因为它不是通用的Remez求解器,而是Remez方法的P-M化身。
$ \ endgroup $
–马克·博格丁
2011-09-17 2:44

$ \ begingroup $
@MarkBorgerding我相信确实是名称更改的原因。但是,人们经常互换使用这两个术语仍然很普遍。
$ \ endgroup $
–乳香
2011-09-17 2:49



$ \ begingroup $
我认为一个正确的说法是:所有Parks-McClellan实现都是Remez Exchange实现,但事实并非如此。关于过滤器设计,我认为它们可以互换使用。有点(像)将FFT称为DFT。
$ \ endgroup $
–马克·博格丁
2011年9月17日下午3:07

$ \ begingroup $
firgr(在Matlab中)如何?
$ \ endgroup $
– daurnimator
2011年10月11日,下午4:12

$ \ begingroup $
@daurnimator呢?
$ \ endgroup $
–乳香
2011年10月11日,下午4:29