假定以下一阶IIR滤波器:

$$ y [n] = \ alpha x [n] +(1-\ alpha)y [n-1] $$

如何选择参数$ \ alpha $ st IIR尽可能接近FIR,这是最后$ k $个样本的算术平均值:

$$ z [n] = \ frac {1} {k} x [n] + \ frac {1} {k} x [n-1] + \ ldots + \ frac {1} {k} x [n-k + 1] $$

其中$ n \ in [ k,\ infty)$,表示IIR的输入可能比$ k $长,但我想对最后$ k $个输入的平均值进行最佳近似。我知道IIR具有无限的脉冲响应,因此我正在寻找最佳近似值。
对于$ {L} _ {2} $还是$ {L} _ { 1} $ cost函数。

仅给出一阶IIR,如何解决此优化问题。

谢谢。

评论

是否必须精确地遵循$ y [n] = \ alpha x [n] +(1-\ alpha)y [n-1] $]?

这势必会变成非常差的近似值。除了一阶IIR,您能负担得起吗?

您可能需要编辑问题,以免使用$ y [n] $来表示两种不同的含义,例如第二个显示的方程式为$ z [n] = \ frac {1} {k} x [n] + \ cdots + \ frac {1} {k} x [n-k + 1] $,您可能想要说您“尽可能好”的标准是什么,例如您是否希望$ \ vert y [n]-z [n] \ vert $对于所有$ n $尽可能小,还是$ \ vert y [n]-z [n] \ vert ^ 2 $是所有$ n $都尽可能小。

@Phonon,是的,它必须是一阶IIR。标准很简单,结果$ y [n] $应该尽可能接近系统中最后$ k $输入的平均值,其中$ n \ in [k,\ inf] $。我很高兴看到两种情况的结果。尽管我假设解析解仅对$ {| y [n] −z [n] |} ^ {2} $是可行的。

#1 楼

没有将$ \ alpha $作为标量的解析解决方案(我认为)。这是一个脚本,为您提供给定$ K $的$ \ alpha $。如果您在线需要它,则可以构建一个LUT。脚本找到最小化的解决方案

$$
\ int_ {0} ^ {\ pi} dw \ quad \ left | H_1(jw)-H_2(jw)\ right | ^ 2
$$

其中$ H_1 $是FIR频率响应,而$ H_2 $是IIR频率响应。

您没有为K指定任何范围。但我只想说明一下,以下系统等效于您的均值滤波器,并且具有相同的计算复杂度和一阶IIR!

$ H(z)= \ frac {1} { K} \ frac {1-z ^ {-K}} {1-z ^ {-1}} $

function a = find_a(K)

w = 0.0001:0.001:pi;
as = [-1:0.001:-0.001  0.001:0.001:1];

E = zeros(size(as));
for idx=1:length(as)
    fJ = J(w,as(idx),K);
    E(idx) = sum(fJ);
end

[Emin, indx] = min(E)
a = as(indx)

function f = J(w,a,K)
    num = 2*(2-a)*(1-cos(w*K)) + 2*(cos(w*(K-1)) - cos(w)) - 2*(1-a)*(cos(w)-cos(w*(K+1)));
    den = (2-a)^2 + 1 + (1-a)^2 + 2*(1-a)*cos(2*w) - 2*(2-a)^2*cos(w);
    f = -(a/K)*num./den;
    f = f+(1/K^2)*(1-cos(w*K))./(1-cos(w))+a^2./(1+(1-a)^2-2*(1-a)*cos(w));
end

end


评论


$ \ begingroup $
@Drazick这是相对简单的。 IIR和FIR的两个表达式被插入到积分中。找到FIR滤波器的替代表达式的关键是识别几何级数/级数。您可以在此处找到所有详细信息:en.wikipedia.org/wiki/Geometric_progression#Geometric_series。在脚本中,J函数以整数符号计算表达式。
$ \ endgroup $
– niaren
2011年10月8日19:07

$ \ begingroup $
@niaren我知道这是一篇老文章,所以如果您还记得:函数'f'是如何派生的?我已经编写了类似的代码,但是对FIR(H1)和IIR(H2)使用了复杂的传递函数,然后执行sum(abs(H1- H2)** 2)。我已经将此与您的sum(fj)进行了比较,但是得到了不同的结果输出。以为我会在研究数学之前先问一下。
$ \ endgroup $
–Dom
2013年6月7日13:47

$ \ begingroup $
@Dom很久以前了,我真的不记得了。我想我刚刚完成了计算$ [H_1(j \ omega)-H_2(j \ omega)] [H_1(-j \ omega)-H_2(-j \ omega)] $的过程。我不记得如何验证该表达式。我不介意再次进行数学运算...
$ \ endgroup $
– niaren
2013年6月7日19:22



$ \ begingroup $
@niaren嗨,我尝试导出您的表达式,但在将复杂分数相加时陷入困境。我在代码中犯了一个错误...您的函数似乎给出与sum(abs(H1-H2)** 2)成比例的结果,表明它是正确的。
$ \ endgroup $
–Dom
2013年6月9日13:28

#2 楼

好,让我们尝试得出最好的结果:
$$
\ begin {array} {lcl}
y [n]&=&\ alpha x [n] +(1-\ alpha )y [n-1] \\
&=&\ alpha x [n] +(1-\ alpha)\ alpha x [n-1] +(1-\ alpha)^ 2 y [n- 2] \\
&=&\ alpha x [n] +(1-\ alpha)\ alpha x [n-1] +(1-\ alpha)^ 2 \ alpha x [n-2] + (1-\ alpha)^ 3 y [n-3] \\
\ end {array}
,因此$ x [nm] $的系数为$ \ alpha (1- \ alpha)^ m $。

最佳均方逼近将最小化:
$$
\ begin {array} {lcl}
J (\ alpha)&=&\ sum_ {m = 0} ^ {k-1}(\ alpha(1- \ alpha)^ m-\ frac {1} {k})^ 2 + \ sum_ {m = k } ^ \ infty \ alpha ^ 2(1- \ alpha)^ {2m} \\
&=&\ sum_ {m = 0} ^ {k-1} \ left(\ alpha ^ 2(1- \ alpha)^ {2m}-\ frac {2} {k} \ alpha(1- \ alpha)^ m + \ frac {1} {k ^ 2} \ right)+ \ alpha ^ 2(1- \ alpha )^ {2k} \ sum_ {m = 0} ^ \ infty(1- \ alpha)^ {2m} \\
&=&\ alpha ^ 2 \ frac {1-(1- \ alpha)^ {2k}} {1-(1- \ alpha)^ 2} + \ frac {2 \ alpha} {k} \ frac {1-(1-\ alpha)^ k} {1-(1-\ alpha) } + \ frac {\ alpha ^ 2(1- \ alpha)^ {2k}} {1-(1-\ alpha)^ 2} + \ frac {1} {k} \\
&=& \ frac {\ alpha ^ 2} {1-(1-\ alpha)^ 2} + \ frac {2} {k}(1-(1- \ alpha)^ k)+ \ frac {1} {k} \\
&=&\ frac {\ alpha ^ 2} {2 \ alpha-\ alpha ^ 2} + \ frac {2} {k}(1-(1- \ alpha)^ k)+ \ frac {1} { k} \\
&=&\ frac {\ alpha} {2-\ alpha} + \ frac {2} {k}(1-(1- \ alpha)^ k)+ \ frac {1} {k} \\
\ end {array}
$$
,因为对于$ m> k-1 $,FIR系数为零。

下一步是取导数并等于零。


看一下从$ J = $ K = 1000 $和$ \ alpha $从0到1的图。问题(如我所设定的)不适当,因为最好的答案是$ \ alpha = 0 $。




我认为这里有一个错误。
根据我的计算,应该是这样的: )&=&\ sum_ {m = 0} ^ {k-1}(\ alpha(1- \ alpha)^ m-\ frac {1} {k})^ 2 + \ sum_ {m = k} ^ \ infty \ alpha ^ 2(1- \ alpha)^ {2m} \\
&=&\ sum_ {m = 0} ^ {k-1} \ left(\ alpha ^ 2(1- \ alpha)^ {2m}-\ frac {2} {k} \ alpha(1- \ alpha) ^ m + \ frac {1} {k ^ 2} \ right)+ \ alpha ^ 2(1- \ alpha)^ {2k} \ sum_ {m = 0} ^ \ infty(1- \ alpha)^ {2m } \\
&=&\ alpha ^ 2 \ frac {1-(1- \ alpha)^ {2k}} {1-(1- \ alpha)^ 2}-\ frac {2 \ alpha} {k} \ frac {1-(1-\ alpha)^ k} {1-(1-\ alpha)} + \ frac {1} {k} + \ frac {\ alpha ^ 2(1- \ alpha) ^ {2k}} {1-(1-\ alpha)^ 2}
\ end {array}

根据Mathematica的结果进行简化: >
$$ J(\ alpha)= \ frac {\ alpha} {2-\ alpha} + \ frac {2 {(1-\ alpha)} ^ {k} -1} {k} $$

在MATLAB上使用以下代码会产生相同的效果,但有所不同: } {\ alpha-2}-\ frac {k-2 {(1-\ alpha)} ^ {k} + 1} {k} $$

这些函数的确具有最小值。


因此,让我们假设我们真的只关心FIR滤波器的支持(长度)的近似值。在那种情况下,优化问题就是:
$$
J_2(\ alpha)= \ sum_ {m = 0} ^ {k-1}(\ alpha(1- \ alpha)^ m -\ frac {1} {k})^ 2
$$$

在日期中针对$ K $的各种值与$ \ alpha $绘制$ J_2(\ alpha)$在下面的图表中。


对于$ K $ =8。$ \ alpha _ {\ tt min} $ = 0.1533333
对于$ K $ =16。$ \ alpha _ {\ tt min} $ = 0.08
对于$ K $ =24。$ \ alpha _ {\ tt min} $ = 0.0533333
对于$ K $ =32。$ \ alpha _ {\ tt min} $ = 0.04
对于$ K $ =40。$ \ alpha _ {\ tt min} $ = 0.0333333
对于$ K $ =48。$ \ alpha _ {\ tt min} $ = 0.0266667
对于$ K $ =56。$ \ alpha _ {\ tt min} $ = 0.0233333
对于$ K $ =64。$ \ alpha _ {\ tt min} $ = 0.02
对于$ K $ = 72. $ \ alpha _ {\ tt min} $ = 0.0166667




红色虚线是$ 1 / K $,绿色虚线是$ \ alpha _ {\ tt min} $,使$ J_2(\ alpha)$最小的$ \ alpha $的值(从$ \ tt alpha中选择[alpha:[0:.01:1] / 3; $)。

评论


$ \ begingroup $
只是要发布完全相同的内容=)
$ \ endgroup $
– Phonon
2011年10月6日下午16:31

$ \ begingroup $
@Phonon:随时继续!为此,我将其标记为社区Wiki。
$ \ endgroup $
– Peter K.♦
2011年10月6日在16:32

$ \ begingroup $
导数wrt $ \ alpha $是一个具有无限数量项(即不是多项式)的序列,您必须将其设置为等于$ 0 $,然后求解$ \ alpha $,因此要特别小心(或可能是近似值)。
$ \ endgroup $
– Dilip Sarwate
2011年10月6日17:11

$ \ begingroup $
有人可以检查和/或纠正我的工作吗? :-)
$ \ endgroup $
– Peter K.♦
2011年10月6日21:11

$ \ begingroup $
@DilipSarwate,最好的近似值是什么?谢谢。
$ \ endgroup $
–罗伊
2011年10月7日18:03

#3 楼

在带有微信号体系结构的嵌入式信号处理中,大约在第63页至第69页之间对此问题进行了很好的讨论。在第63页上,它包括精确的递归移动平均滤波器的推导(这是niaren在他的回答中给出的),

$$
H(z)= {1 \ over {N}} {1-z ^ {-N} \ over {1-z ^ {-1}}}}。
$$

为了方便以下讨论,它对应于以下差分方程:

$$
y_n = y_ {n-1 } + {1 \ over {N}}(x_n-x_ {nN})。
$$

将滤波器放入您指定的形式的近似值需要假定$ x_ { nN} \约y_ {n-1} $,因为(我从第68页引述)“ $ y_ {n-1} $是$ x_n $个样本的平均值”。这种近似使我们可以简化前面的差分方程,如下所示:

$$
\ begin {array} \\
y_ {n} = y_ {n-1} + {1 \ over {N}}(x_n-y_ {n-1})\\
y_ {n} = y_ {n-1}-{1 \ over {N}} y_ {n-1} + {1 \ over {N}} x_n \\
\ end {array}
$$

设置$ \ alpha = {1 \ over {N}} $,我们得到您的原始格式$ y_ {n} = \ alpha x_n +(1- \ alpha)y_ {n-1} $,这表示您想要的系数(相对于此近似值)正好是$ 1 \ over {N} $(其中$ N $是数字)样本)。

从某种角度来说,这种近似是“最好的”吗?当然很优雅。以下是在N = 3且N增大到10(蓝色近似值)时,幅度响应在[44.1kHz]处进行比较的方法:


正如彼得的答案所暗示的,在最小二乘范数下,用递归滤波器近似FIR滤波器可能会出现问题。有关如何一般解决此问题的广泛讨论,请参见JOS的论文《数字滤波器设计和系统识别技术及其在小提琴中的应用》。他主张使用Hankel范数,但是在相位响应无关紧要的情况下,他也介绍了Kopec的方法,该方法在这种情况下可能效果很好(并使用$ L ^ 2 $范数)。可以在这里找到对本文技术的广泛概述。它们可能会得出其他有趣的近似值。

评论


$ \ begingroup $
这是一种“优雅”的方式来表达有关一阶IIR滤波器的内存的信息。它的内存相当于$ \ frac {1} {\ alpha} $。我将研究您提到的其他方法。谢谢。
$ \ endgroup $
–罗伊
2011年10月8日在16:19



$ \ begingroup $
您能直观地解释为什么在LS规范($ {L} _ {2} $)下没有解决方案吗?
$ \ endgroup $
–罗伊
2011年10月9日12:39



$ \ begingroup $
我不确定这种情况下是否有LS解决方案,我只知道对于一般的“基于IIR的FIR逼近”问题,它趋向于收敛。如果有机会,我会更新瓦特/更多信息。
$ \ endgroup $
–datageist♦
2011年10月9日17:31

$ \ begingroup $
好吧,如果彼得建议的成本函数(第一个)正确,那么有解决方案。至少根据我的计算。
$ \ endgroup $
–罗伊
2011年10月9日19:43

$ \ begingroup $
很好。我很好奇如何将“启发式” $ 1 / N $方法与更规范的方法进行比较。
$ \ endgroup $
–datageist♦
2011年10月9日20:12



#4 楼

根据k在2到100范围内的实验测试,最佳拟合(平方和误差)给出了alfa = 1/k^0.865的关系
是MovAvg滤波器的样本数量k

评论


$ \ begingroup $
我使用了一个交互式Excel工作表来提取关系:drive.google.com/open?id=0B48gEYiKwYegY3NqQThMTTZ1OG8
$ \ endgroup $
– chiliwili69
17年6月2日在20:30



#5 楼

我偶然发现了这个老问题,我想分享我的解决方案。如其他答案中所述,没有解析解,但是要最小化的函数表现良好,并且可以通过几次牛顿迭代轻松找到$ \ alpha $的最优值。还有一个公式可以检查结果的最优性。

长度为$ N $的FIR移动平均滤波器的脉冲响应由

$$ h_ {FIR给出} [n] = \ frac {1} {N}(u [n] -u [nN])\ tag {1} $$

其中$ u [n] $是单位步长功能。一阶IIR滤波器

$$ y [n] = \ alpha x [n] +(1- \ alpha)y [n-1] \ tag {2} $$

具有脉冲响应

$$ h_ {IIR} [n] = \ alpha(1- \ alpha)^ nu [n] \ tag {3} $$

现在的目标是最小化平方误差

$$ \ epsilon = \ sum_ {n = 0} ^ {\ infty} \ left(h_ {FIR} [n] -h_ {IIR} [n] \ right)^ 2 \ tag {4} $$

使用$(1)$和$(3)$,错误可以写为

$$ \ begin {align} \ epsilon(\ alpha)&= \ sum_ {n = 0} ^ {N-1} \ left(\ alpha(1- \ alpha)^ n- \ frac {1} {N} \ right)^ 2 + \ sum_ {n = N} ^ {\ infty} \ alpha ^ 2(1- \ alpha)^ {2n} \\&= \ alpha ^ 2 \ sum_ {n = 0} ^ {\ infty}(1- \ alpha)^ {2n}-\ frac {2 \ alpha} {N} \ sum_ {n = 0} ^ {N-1}(1- \ alpha)^ n + \ sum_ { n = 0} ^ {N-1} \ frac {1} {N ^ 2} \\&= \ frac {\ alpha ^ 2} {1-(1- \ alpha)^ 2}-\ frac {2 \ alpha} {N} \ frac {1-(1- \ alpha)^ N} {1-(1- \ alpha)} + \ frac {1} {N} \\&== frac {\ alpha} {2 -\ alpha}-\ frac {2} {N} \ left(1-(1- \ alpha)^ N \ right)+ \ frac {1} {N},\ qquad 0 <\ alpha <2 \ tag { 5} \ end {align} $$

此表达式与此答案中给出的表达式非常相似,但并不相同。对$(5)$中$ \ alpha $的限制可确保无限和收敛,并且它与$(2)$给出的IIR滤波器的稳定性条件相同。

设置$(5)$到零的导数将导致

$$(1- \ alpha)^ {N-1}(2- \ alpha)^ 2 = 1 \ tag {6} $ $

请注意,最佳$ \ alpha $必须在区间$(0,1] $之内,因为较大的$ \ alpha $值会导致交替的脉冲响应$(3)$,无法近似FIR的恒定脉冲响应移动平均值过滤器。

取$(6)$的平方根并引入$ \ beta = 1- \ alpha $,我们得到

$$ \ beta ^ { (N + 1)/ 2} + \ beta ^ {(N-1)/ 2} -1 = 0 \ tag {7} $$

对于$ \ beta无法求解此方程$,但可以用$ N $来解决:

$$ N = -2 \ frac {\ log(1+ \ beta)} {\ log(\ beta)},\ qquad \ beta \ neq 0 \ tag {8} $$

公式$(8)$可用于再次检查$(7)$的数值解;它必须返回$的指定值N $。

等式$(7)$可以用几行(Matlab / Octave)代码求解:

N = 50;     % desired filter length of FIR moving average filter

if ( N == 1 )    % no iteration for trivial case
    b = 0;
else
    % Newton iteration
    b = 1;       % starting value
    Nit = 7;
    n = (N+1)/2;
    for k = 1:Nit,
        f = b^n + b^(n-1) -1;
        fp = n*b^(n-1) + (n-1)*b^(n-2);
        b = b - f/fp;
    end

    % check result
    N0 = -2*log(1+b)/log(b) + 1     % must equal N
end

a = 1 - b;


下面是具有一系列过滤器长度$ N $的最优值$ \ alpha $的表:

   N     alpha

   1   1.0000e+00
   2   5.3443e-01
   3   3.8197e-01
   4   2.9839e-01
   5   2.4512e-01
   6   2.0809e-01
   7   1.8083e-01
   8   1.5990e-01
   9   1.4333e-01
  10   1.2987e-01
  20   6.7023e-02
  30   4.5175e-02
  40   3.4071e-02
  50   2.7349e-02
  60   2.2842e-02
  70   1.9611e-02
  80   1.7180e-02
  90   1.5286e-02
 100   1.3768e-02
 200   6.9076e-03 
 300   4.6103e-03
 400   3.4597e-03
 500   2.7688e-03
 600   2.3078e-03
 700   1.9785e-03
 800   1.7314e-03
 900   1.5391e-03
1000   1.3853e-03