移动平均滤波器(FIR滤波器)的最佳一阶IIR(AR滤波器)近似值是多少?


24

假定以下一阶IIR滤波器:

y[n]=αx[n]+(1α)y[n1]

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

z[n]=1kx[n]+1kx[n1]++1kx[nk+1]

其中,表示IIR的输入可能比,但我想对最后输入的平均值进行最佳近似。n[k,)kk

我知道IIR具有无限的脉冲响应,因此我正在寻找最佳近似值。无论是还是成本函数的分析解决方案,我都很高兴。L2L1

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

谢谢。


是否必须精确地遵循 ]?y[n]=αx[n]+(1α)y[n1]
声子

1
这势必会变成非常差的近似。除了一阶IIR,您能负担得起其他什么吗?
2011年

您可能需要编辑问题,以免使用来表示两个不同的事物,例如,第二个显示的方程式可能为,您可能想说“尽可能好”的标准是什么,例如,您想要对于所有都尽可能小,或者对于所有都尽可能小。y[n]z[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2n
Dilip Sarwate

@Phonon,是的,它必须是一阶IIR。标准很简单,结果应该尽可能接近系统中最后输入的平均值,其中。我很高兴看到两种情况的结果。尽管我假设解析解仅对可行。ķ Ñ [ ķ INF ] | ÿ [ Ñ ] - ż [ Ñ ] | 2y[n]kn[k,inf]|y[n]z[n]|2
罗伊

Answers:


10

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

0πdw|H1(jw)H2(jw)|2

其中是FIR频率响应,而是IIR频率响应。2H1H2

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

H(z)=1K1zK1z1

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

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

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

@Dom很久以前,我真的不记得了。我想我刚刚完成了。我不记得如何验证该表达式。我不介意再次通过数学……[H1(jω)H2(jω)][H1(jω)H2(jω)]
niaren

@niaren您好,我尝试导出您的表达式,但在将复杂分数相加时陷入困境。我在代码中犯了一个错误...您的函数似乎给出与sum(abs(H1-H2)** 2)成正比的结果,表明它是正确的。
2013年

16

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

H(z)=1N1zN1z1.

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

yn=yn1+1N(xnxnN).

将滤波器放入您指定形式的近似值需要假设,因为(我从第68页引述)“是样本的平均值”。这种近似使我们可以简化前面的差分方程,如下所示: Ÿ ñ - 1 X ÑxnNyn1yn1xn

yn=yn1+1N(xnyn1)yn=yn11Nyn1+1Nxnyn=(11N)yn1+1Nxn.

设置,我们得到您的原始形式,这表明您想要的系数(相对于此近似值)恰好是(其中是样本数)。 ÿÑ=αXÑ+1-αýñ-11α=1Nyn=αxn+(1α)yn1 N1NN

在某种程度上,这种近似值是“最佳”的吗?当然很优雅。以下是在N = 3且N增至10(蓝色近似值)时,幅度响应在[44.1kHz]下进行比较的方式:

N = 3 N = [3,10]


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


这是一种“优雅”的方式来表达有关一阶IIR滤波器的内存的信息。它的内存等效于。我将研究您提到的其他方法。谢谢。1α
罗伊

您能直观地解释为什么在LS规范()下没有解决方案吗?L2
罗伊

我不确定在这种情况下是否有LS解决方案,我只知道对于一般的“基于IIR的FIR近似”问题,它趋于收敛。如果有机会,我会更新瓦特/更多信息。
datageist

好吧,如果彼得建议的成本函数(第一个)正确,那么有解决方案。至少根据我的计算。
罗伊

大。我很好奇看到“启发式”方法与更规范的方法相比如何。1/N
datageist

16

好,让我们尝试得出最好的结果: 这样的系数为。 X[Ñ-m]α1-αm

y[n]=αx[n]+(1α)y[n1]=αx[n]+(1α)αx[n1]+(1α)2y[n2]=αx[n]+(1α)αx[n1]+(1α)2αx[n2]+(1α)3y[n3]
x[nm]α(1α)m

最佳均方近似值将最小化: m>k1

J(α)=m=0k1(α(1α)m1k)2+m=kα2(1α)2m=m=0k1(α2(1α)2m2kα(1α)m+1k2)+α2(1α)2km=0(1α)2m=α21(1α)2k1(1α)2+2αk1(1α)k1(1α)+α2(1α)2k1(1α)2+1k=α21(1α)2+2k(1(1α)k)+1k=α22αα2+2k(1(1α)k)+1k=α2α+2k(1(1α)k)+1k
因为当 FIR系数为零。m>k1

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


纵观衍生的情节为和从0到1,它看起来像这个问题(因为我已经将它设置)是病态的,因为最好的答案是。ķ = 1000 α α = 0JK=1000αα=0

在此处输入图片说明


我认为这是一个错误。根据我的计算应该是这样的:

J(α)=m=0k1(α(1α)m1k)2+m=kα2(1α)2m=m=0k1(α2(1α)2m2kα(1α)m+1k2)+α2(1α)2km=0(1α)2m=α21(1α)2k1(1α)22αk1(1α)k1(1α)+1k+α2(1α)2k1(1α)2

根据Mathematica的结果进行简化

J(α)=α2α+2(1α)k1k

在MATLAB上使用以下代码会产生相同的效果,尽管有所不同:

syms a k;

expr1 = (a ^ 2) * ((1 - ((1 - a) ^ (2 * k))) / (1 - ((1 - a) ^ 2)));
expr2 = ((2 * a) / k) * ((1 - ((1 - a) ^ (k))) / (1 - (1 - a)));
expr3 = (1 / k);
expr4 = ((a ^ 2) * ((1 - a) ^ (2 * k))) / (1 - ((1 - a) ^ (2)));

simpExpr = simplify(expr1 - expr2 + expr3 + expr4);

J(α)=2α2k2(1α)k+1k

无论如何,这些功能确实具有最低限度。


因此,假设我们真的只关心FIR滤波器的支持(长度)上的近似值。在那种情况下,优化问题就是:

J2(α)=m=0k1(α(1α)m1k)2

绘图为各种值与导致在曲线图和表下方的日期。J2(α)Kα

对于 =8。 = 0.1533333 对于 =16。 = 0.08 对于 =24。 = 0.0533333 对于 =32。 = 0.04 对于 =40。 = 0.0333333 对于 =48。 = 0.0266667 对于 =56。 = 0.0233333 对于 = 64。 Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin = 0.02
对于 =72。 = 0.0166667 Kαmin

在此处输入图片说明

红色虚线是,绿色虚线是,这是使最小的值(从选择[)。1/KαminαJ2(α)alpha=[0:.01:1]/3;


1
只是要发布完全相同的东西=)
声子

@Phonon:请继续!为此,我将其标记为社区Wiki。
Peter K.

导数wrt是一个具有无限数量项(即不是多项式)的级数,您必须将其设置为等于,然后求解,因此需要谨慎(或近似)。0 αα0α
Dilip Sarwate,

有人可以检查和/或纠正我的工作吗?:-)
Peter K.

@DilipSarwate,什么是最好的近似值?谢谢。
罗伊


3

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

长度为 FIR移动平均滤波器的脉冲响应由下式给出N

(1)hFIR[n]=1N(u[n]u[nN])

其中是单位步长函数。一阶IIR滤波器u[n]

(2)y[n]=αx[n]+(1α)y[n1]

有冲动的反应

(3)hIIR[n]=α(1α)nu[n]

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

(4)ϵ=n=0(hFIR[n]hIIR[n])2

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

ϵ(α)=n=0N1(α(1α)n1N)2+n=Nα2(1α)2n=α2n=0(1α)2n2αNn=0N1(1α)n+n=0N11N2=α21(1α)22αN1(1α)N1(1α)+1N(5)=α2α2N(1(1α)N)+1N,0<α<2

此表达式与该答案中给出的表达式非常相似,但并不完全相同。上的限制在可以确保无限和收敛,这是与用于由下式给出的IIR滤波器的稳定性条件。α(5)(2)

将的导数设置为零会导致(5)

(6)(1α)N1(2α)2=1

请注意,最佳必须在间隔因为较大的值会导致交替的脉冲响应,这不能近似于FIR移动平均滤波器的恒定脉冲响应。α(0,1]α(3)

取平方根并引入,我们得到(6)β=1α

(7)β(N+1)/2+β(N1)/21=0

该方程无法通过解析地求解,但可以通过来求解:ñβN

(8)N=2log(1+β)log(β),β0

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

可以使用几行(Matlab / Octave)代码求解方程式:(7)

N = 50;FIR移动平均滤波器所需滤波器长度的百分比

if(N == 1)%对于小情况无迭代
    b = 0;
其他
    牛顿迭代百分比
    b = 1;起始值%
    尼特= 7;
    n =(N + 1)/ 2;
    对于k = 1:Nit
        f = b ^ n + b ^(n-1)-1;
        fp = n * b ^(n-1)+(n-1)* b ^(n-2);
        b = b-f / fp;
    结束

    检查结果百分比
    N0 = -2 * log(1 + b)/ log(b)+1%必须等于N
结束

a = 1-b;

下表是针对一定范围的过滤器长度的最佳值的表:ñαN

   Nα

   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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.