이동 평균 필터 (FIR 필터)에 대한 최상의 1 차 IIR (AR 필터) 근사값은 무엇입니까?


24

다음 1 차 IIR 필터를 가정하십시오.

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

어떻게 매개 변수를 선택할 수 있습니다 일 IIR 가능한 좋은 마지막의 산술 평균 인 FIR로에 가까운 샘플 :αk

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

여기서 는 IIR의 입력이 보다 길 수 있지만 마지막 입력 의 평균을 가장 가깝게 만들고 싶습니다 .n[k,)kk

나는 IIR이 무한한 임펄스 응답을 가지고 있다는 것을 알고 있으므로 최고의 근사치를 찾고 있습니다. 또는 비용 함수에 관계없이 분석 솔루션에 만족 합니다.L2L1

1 차 IIR만으로이 최적화 문제를 어떻게 해결할 수 있을까요?

감사.


정확히 따라야 합니까? y[n]=αx[n]+(1α)y[n1]
Phonon

1
이것은 매우 근사치 가 될 수밖에 없습니다 . 1 차 IIR 이상을 감당할 수 없습니까?
leftaroundabout

을 사용 하여 두 가지 다른 것을 의미 하지 않도록 질문을 편집하고 싶을 수 있습니다 . 예를 들어 두 번째로 표시된 방정식은 이고 "가능한 한 좋은"기준을 정확히 말하고 싶을 수 있습니다. 예를 들어 는 모든 대해 가능한 작게 또는 가 모든 대해 가능한 작게 설정하십시오 . y[n]z[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2
Dilip Sarwate

@Phonon, 네, 첫 주문 IIR이어야합니다. 기준은 간단합니다. 결과 은 시스템 에 대한 마지막 입력 의 평균 인 와 최대한 비슷해야합니다 . 두 경우 모두 결과를 보게되어 기쁩니다. 비록 분석 솔루션이 대해서만 실행 가능하다고 가정 합니다. k n [ k , inf ] | y [ n ] z [ n ] | 2y[n]kn[k,inf]|y[n]z[n]|2
Royi

답변:


10

스칼라 인 에 대한 분석 솔루션은 없습니다 (제 생각에는). 다음은 주어진 대해 를 제공하는 스크립트입니다 . 온라인으로 필요한 경우 LUT를 구축 할 수 있습니다. 스크립트는 최소화하는 솔루션을 찾습니다α Kαα케이

0π|H1(j)H2(j)|2

여기서 은 FIR 주파수 응답이고 는 IIR 주파수 응답입니다.H1H2

K에 대한 범위를 지정하지 않았습니다. 그러나 다음 시스템이 평균 필터와 동일하며 계산 복잡성과 1 차 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

@niaren 나는 이것이 오래된 게시물임을 알고 있으므로 기억할 수 있다면 : 함수 'f'는 어떻게 파생됩니까? 비슷한 것을 코딩했지만 FIR (H1) 및 IIR (H2)에 복잡한 전송 함수를 사용한 다음 sum (abs (H1-H2) ** 2)를 수행합니다. 나는 이것을 당신의 합계 (fj)와 비교했지만 다른 결과를 얻습니다. 나는 수학을 쟁기질하기 전에 물어볼 것이라고 생각했다.
Dom

@Dom 그것은 오래 전 일이었고 나는 정말로 기억할 수 없습니다. 방금 . 식을 어떻게 확인했는지 기억이 나지 않습니다. 나는 수학을 다시 [H1(jω)H2(jω)][H1(jω)H2(jω)]
겪어도 괜찮다

@niaren 안녕하세요, 나는 당신의 표현을 도출하려고 노력했지만 복잡한 분수를 더할 때 멈췄습니다. 코드에서 실수를했습니다 ... 함수는 sum (abs (H1-H2) ** 2)에 비례하여 결과가 올바른 것으로 나타납니다.
Dom

16

마이크로 신호 아키텍처를 사용한 임베디드 신호 처리 에서 대략 63 ~ 69 페이지 사이 에이 문제에 대한 좋은 설명이 있습니다 . 에서 63 페이지 , 이는 (이 niaren는 굴복 이동 평균 필터 정확한 재귀의 유도를 포함하는 그의 않음 )

H(z)=1N1zN1z1.

다음 설명과 관련하여 편의상 다음과 같은 차이 방정식에 해당합니다.

yn=yn1+1N(xnxnN).

지정한 형태로 필터를두고 근사된다고 가정 필요 (난 인용 때문에 . PG 68 ) " Y N - 1 의 평균 X N 샘플". 이 근사를 통해 다음과 같이 앞의 차분 방정식을 단순화 할 수 있습니다.xnNyn1yn1xn

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

α = 1 설정 , 우리는 원래의 형태,yn=αxn+(1α)yn-1에 도달합니다.이 계수에 대해 원하는 계수는 정확히1임을 나타냅니다.α=1Nyn=αxn+(1α)yn1 (여기서N은 샘플 수임). 1NN

이 근사치가 어떤면에서 "최고"입니까? 확실히 우아합니다. 다음은 크기 응답이 N = 3에 대해 [44.1kHz에서] 비교되는 방법과 N이 10으로 증가함에 따라 (파란색 근사치) :

N = 3 N = [3,10]


으로 베드로의 대답은 제안 재귀 필터와 FIR 필터를 근사하는 것은 최소 제곱 규범에 따라 문제가 될 수 있습니다. 이 문제를 일반적으로 해결하는 방법에 대한 광범위한 논의는 JOS의 논문, 디지털 필터 설계 기술 및 바이올린에 적용되는 시스템 식별 에서 찾을 수 있습니다 . 그는 Hankel Norm의 사용을 옹호하지만, 위상 응답이 중요하지 않은 경우 Kopec의 방법을 다루며,이 경우에는 잘 작동 할 수 있습니다 ( 표준 사용). 논문의 기술에 대한 광범위한 개요는 여기 에서 찾을 수 있습니다 . 다른 흥미로운 근사값을 얻을 수 있습니다.L2


이것은 1 차 IIR 필터의 메모리에 대해 말하는 "우아한"방법입니다. 메모리는 1 과 같습니다. . 언급 한 다른 방법을 살펴 보겠습니다. 감사. 1α
Royi

LS 표준 ( )에 솔루션이없는 이유를 직관적으로 설명 할 수 있습니까? L2
Royi

이 경우 LS 솔루션이 있는지 확실하지 않은 경우, 일반적인 "IIR 기반 FIR 근사"문제에 대한 수렴에 문제가 있음을 알고 있습니다. 기회가 생기면 더 많은 정보를 업데이트하겠습니다.
datageist

피터가 제안한 비용 함수 (첫 번째)가 맞다면 해결책이 있습니다. 적어도 내 계산에 따르면.
Royi

큰. "휴리스틱" 접근 방식이보다 표준적인 방식과 비교되는 방식이 궁금합니다 . 1/N
datageist

16

자, 최선을 도출해 봅시다 : 계수가 의X[N-m]은α(1-α

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

최선의 평균 제곱 근사는 최소화됩니다 :

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
because the FIR coefficients are zero for m>k1.

Next step is to take derivatives and equate to zero.


Looking at a plot of the derived J for K=1000 and α from 0 to 1, it looks like the problem (as I've set it up) is ill-posed, because the best answer is α=0.

enter image description here


I think there's a mistake here. The way it should be according to my calculations is:

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

Simplifying it according to Mathematica yields:

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

Using the following code on MATLAB yields something equivalent though different:

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

Anyhow, those functions do have minimum.


So let's assume that we really only care about the approximation over the support (length) of the FIR filter. In that case, the optimization problem is just:

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

Plotting J2(α) for various values of K versus α results in the date in the plots and table below.

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

여기에 이미지 설명을 입력하십시오

The red dashed lines are 1/K and the green lines are αmin, the value of α that minimizes J2(α) (chosen from alpha=[0:.01:1]/3;).


1
Was just going to post the exact same thing = )
Phonon

@Phonon : 계속 진행하십시오! 이를 위해 커뮤니티 위키로 표시했습니다.
Peter K.

The derivative w.r.t α is a series with an infinite number of terms (i.e. not a polynomial) that you have to set equal to 0 and then solve for α, and so some care (or possibly approximation) is going to be necessary.
Dilip Sarwate

Can someone please check and/or correct my working? :-)
Peter K.

@ DilipSarwate, 최고의 근사값은 무엇입니까? 감사.
Royi


3

나는이 오래된 질문을 우연히 발견했으며 솔루션을 공유하고 싶습니다. 다른 답변에서 언급했듯이 분석 솔루션은 없지만 최소화 할 수있는 기능은 훌륭하게 작동하며 최적의 값은α몇 가지 뉴턴 반복으로 쉽게 찾을 수 있습니다. 결과의 최적 성을 확인하는 공식도 있습니다.

길이의 임펄스 응답 FIR 이동 평균 필터는

(1)h에프나는아르 자형[]=1([][])

어디에 []단위 단계 함수입니다. 1 차 IIR 필터

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

has the impulse response

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

The goal is now to minimize the squared error

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

Using (1) and (3), the error can be written as

ϵ(α)=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

This expression is very similar to the one given in this answer, but it's not identical. The restriction on α in (5) makes sure that the infinite sum converges, and it is identical to the stability condition for the IIR filter given by (2).

Setting the derivative of (5) to zero results in

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

Note that the optimal α must be in the interval (0,1] because larger values of α result in an alternating impulse response (3), which cannot approximate the constant impulse repsonse of the FIR moving average filter.

Taking the square root of (6) and introducing β=1α, we obtain

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

This equation cannot be solved analytically for β, but it can be solved for N:

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

Equation (8) can be used to double-check a numerical solution of (7); it must return the specified value of N.

Equation (7) can be solved with a few lines of (Matlab/Octave) code:

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;

Below is a table with the optimal values of α for a range of filter lengths N:

   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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.