Qual è l'approssimazione IIR (filtro AR) del primo ordine migliore a un filtro a media mobile (filtro FIR)?


24

Assumi il seguente filtro IIR del primo ordine:

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

Come posso scegliere il parametro st IIR approssima il più bene possibile il FIR che è la media aritmetica degli ultimi campioni:αk

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

Dove , il che significa che l'input per IIR potrebbe essere più lungo di e tuttavia mi piacerebbe avere la migliore approssimazione della media degli ultimi input.n[k,)kk

So che l'IIR ha una risposta all'impulso infinita, quindi sto cercando la migliore approssimazione. Sarei felice per la soluzione analitica se è per la funzione di costo o .L2L1

Come è possibile risolvere questi problemi di ottimizzazione dato solo il IIR di 1 ° ordine.

Grazie.


Deve seguire esattamente ]? y[n]=αx[n]+(1α)y[n1]
Phonon,

1
Questo è destinato a diventare un'approssimazione molto scarsa. Non puoi permetterti altro che un IIR del primo ordine?
lasciato circa il

Potresti voler modificare la tua domanda in modo da non usare y[n] per indicare due cose diverse, ad esempio la seconda equazione visualizzata potrebbe leggere z[n]=1kx[n]++1kx[nk+1]e potresti voler dire qual è esattamente il tuo criterio di "il più buono possibile", ad esempio vuoi|y[n]z[n]|essere il più piccolo possibile per tuttin, o|y[n]z[n]|2per essere il più piccolo possibile per tuttin.
Dilip Sarwate,

@Phonon, sì, deve essere un IIR del primo ordine. Il criterio è semplice, il risultato y[n] dovrebbe essere il più vicino possibile alla media degli ultimi k input al sistema in cui n[k,inf] . Sarei felice di vedere il risultato per entrambi i casi. Anche se presumo che la soluzione analitica sia praticabile solo per . |y[n]z[n]|2
Royi,

Risposte:


10

Non esiste una soluzione analitica perché α sia uno scalare (credo). Ecco uno script che ti dà α per un dato K . Se ne hai bisogno online puoi costruire un LUT. Lo script trova la soluzione che minimizza

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

dove H1 è la risposta in frequenza FIR e H2 è la risposta in frequenza IIR.

Non hai specificato alcun intervallo per K. Ma voglio solo chiarire che il seguente sistema è equivalente al tuo filtro medio e ha la stessa complessità computazionale e il tuo IIR di primo ordine!

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 È relativamente semplice. Le due espressioni per IIR e FIR sono inserite nell'integrale. La chiave per trovare l'espressione alternativa per il filtro FIR è riconoscere la progressione / serie geometrica. Puoi trovare tutti i dettagli qui: en.wikipedia.org/wiki/Geometric_progression#Geometric_series . Nello script, la funzione J calcola l'espressione sotto il segno integrale.
niaren,

@niaren So che questo è un vecchio post, quindi se ricordi: come viene derivata la tua funzione 'f'? Ho codificato una cosa simile ma usando le complesse funzioni di trasferimento per FIR (H1) e IIR (H2) e poi facendo somma (abs (H1 - H2) ** 2). Ho confrontato questo con la tua somma (fj), ma ho ottenuto diversi output risultanti. Ho pensato di chiedere prima di approfondire la matematica.
Dom

@Dom Questo è molto tempo fa e non ricordo davvero. Immagino di aver appena superato il processo di elaborazione . Non ricordo come ho verificato l'espressione. Non mi dispiace passare di nuovo in matematica ...[H1(jω)H2(jω)][H1(jω)H2(jω)]
Niaren,

@niaren Ciao, ho provato a ricavare la tua espressione ma mi sono bloccato quando si sommavano le complesse frazioni. Ho fatto un errore nel mio codice ... la tua funzione sembra dare risultati proporzionali alla somma (abs (H1 - H2) ** 2), indicando che è corretta.
Dom

16

C'è una bella discussione di questo problema in Embedded Signal Processing con Micro Signal Architecture , all'incirca tra le pagine 63 e 69 . A pagina 63 , include una derivazione del filtro della media mobile ricorsiva esatta (che niaren ha fornito nella sua risposta ),

H(z)=1N1zN1z1.

Per comodità rispetto alla seguente discussione, corrisponde alla seguente equazione di differenza:

yn=yn1+1N(xnxnN).

L'approssimazione che mette il filtro nella forma specificata richiede che si presupponga che , poiché (e cito da pag. 68 ) " y n - 1 è la media di x n campioni". Tale approssimazione ci consente di semplificare l'equazione della differenza precedente come segue:xnNyn1yn1xn

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

Setting α=1N, we arrive at your original form, yn=αxn+(1α)yn1, which shows that the coefficient you want (with respect to this approximation) is exactly 1N (where N is the number of samples).

Is this approximation the "best" in some respect? It's certainly elegant. Here's how the magnitude response compares [at 44.1kHz] for N = 3, and as N increases to 10 (approximation in blue):

N = 3 N = [3,10]


Come suggerisce la risposta di Peter , l'approssimazione di un filtro FIR con un filtro ricorsivo può essere problematica sotto una norma dei minimi quadrati. Un'ampia discussione su come risolvere questo problema in generale può essere trovata nella tesi di JOS, Tecniche per la progettazione di filtri digitali e l'identificazione del sistema con l'applicazione al violino . Sostiene l'uso della norma di Hankel, ma nei casi in cui la risposta di fase non ha importanza, copre anche il metodo di Kopec, che potrebbe funzionare bene in questo caso (e usa una norma ). Un'ampia panoramica delle tecniche della tesi è disponibile qui . Possono produrre altre approssimazioni interessanti.L2


This is an "Elegant" way to say something about the memory of the first order IIR Filter. Its memory is equivalent to 1α. I'll look into the other methods you mentioned. Thanks.
Royi

Could you explain intuitively why under the LS norm (L2) there's no solution?
Royi

Non sono sicuro che ci sia o meno una soluzione LS in questo caso, so solo che tende ad avere problemi di convergenza per il problema generale di "approssimazione FIR basata su IIR". Aggiornerò con maggiori informazioni quando ne avrò la possibilità.
datageist

Bene, se la funzione di costo suggerita da Peter (la prima) è corretta, esiste una soluzione. Almeno secondo i miei calcoli.
Royi,

Grande. Sono curioso di vedere come l' approccio "euristico" si paragona a qualcosa di più canonico. 1/N
datageist

16

OK, let's try to derive the best:

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]
so that the coefficient of x[nm] is α(1α)m.

The best mean-square approximation will minimize:

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

enter image description here

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: Feel free to continue! I've marked it as community wiki for that purpose.
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, What would be the best approximation? Thanks.
Royi


3

I stumbled upon this old question and I would like to share my solution. As mentioned in other answers, there is no analytical solution, but the function to be minimized behaves nicely and the optimal value of α can be found easily with a few Newton iterations. There is also a formula to check the optimality of the result.

The impulse response of the length N FIR moving average filter is given by

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

where u[n] is the unit step function. The first order IIR filter

(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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.