Qual é a melhor aproximação IIR de primeira ordem (filtro AR) a um filtro de média móvel (filtro FIR)?


24

Suponha o seguinte filtro IIR de primeira ordem:

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

Como posso escolher o parâmetro st que o IIR aproxima o melhor possível o FIR, que é a média aritmética das últimas amostras:αk

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

Onde , significando que a entrada para o IIR pode ser maior que e, no entanto, eu gostaria de ter a melhor aproximação da média das últimas entradas.n[k,)kk

Eu sei que o IIR tem resposta de impulso infinito, portanto, estou procurando a melhor aproximação. Ficaria feliz com a solução analítica, seja para a função de custo ou .L2L1

Como esses problemas de otimização podem ser resolvidos considerando apenas o IIR de 1ª ordem.

Obrigado.


Ele precisa seguir precisamente]? y[n]=αx[n]+(1α)y[n1]
Phonon

1
Isso deve se tornar uma aproximação muito ruim. Você não pode pagar nada além de um IIR de primeira ordem?
leftaroundabout

Você pode editar sua pergunta para não usar para significar duas coisas diferentes, por exemplo, a segunda equação exibida pode ler , e você pode dizer qual é exatamente o seu critério de "o melhor possível", por exemplo, você quer seja o menor possível para todos , ou seja o menor possível para todos os . z [ n ] = 1y[n]| y[n]-z[n]| n| y[n]-z[n]| 2nz[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2n
precisa

@ Phonon, sim, deve ser um IIR de primeira ordem. O critério é simples, o resultado deve ser o mais próximo possível da média das últimas entradas do sistema em que . Eu ficaria feliz em ver o resultado para ambos os casos. Embora eu assuma que a solução analítica é viável apenas para . k n [ k , inf ] | y [ n ] - z [ n ] | 2y[n]kn[k,inf]|y[n]z[n]|2
Royi 6/10/11

Respostas:


10

Não existe uma solução analítica para ser um escalar (eu acho). Aqui está um script que lhe dá para um dado . Se você precisar on-line, poderá criar um LUT. O script encontra a solução que minimizaα KααK

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

onde é a resposta de frequência FIR e é a resposta de frequência IIR.H 2H1H2

Você não especificou nenhum intervalo para K. Mas eu só quero deixar claro que o sistema a seguir é equivalente ao seu filtro médio e tem a mesma complexidade computacional e seu IIR de primeira ordem!

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 direto. As duas expressões para o IIR e o FIR estão conectadas à integral. A chave para encontrar a expressão alternativa para o filtro FIR é reconhecer a progressão / série geométrica. Você encontra todos os detalhes aqui: en.wikipedia.org/wiki/Geometric_progression#Geometric_series . No script, a função J calcula a expressão sob o sinal integral.
Niaren 8/10

@ Niaren Eu sei que este é um post antigo, então se você se lembra: como é derivada a sua função 'f'? Eu codifiquei uma coisa semelhante, mas usando as funções complexas de transferência para FIR (H1) e IIR (H2) e depois fazendo soma (abs (H1 - H2) ** 2). Comparei isso com a sua soma (fj), mas obtém diferentes resultados. Pensei em perguntar antes de começar a matemática.
Dom

@ Dom Isso é há muito tempo e eu realmente não me lembro. Eu acho que acabei de passar pelo processo de elaborar . Não me lembro como verifiquei a expressão. Eu não me importo de passar pela matemática de novo ...[H1(jω)H2(jω)][H1(jω)H2(jω)]
niaren

@ Niaren Oi, eu tentei derivar sua expressão, mas fiquei preso ao somar as frações complexas. Cometi um erro no meu código ... sua função parece fornecer resultados proporcionais à soma (abs (H1 - H2) ** 2), indicando que está correto.
Dom

16

Há uma boa discussão sobre esse problema no Processamento de sinal incorporado com a arquitetura de micro sinal , aproximadamente entre as páginas 63 e 69 . Na página 63 , inclui uma derivação do filtro exato da média móvel recursiva (que niaren deu em sua resposta ),

H(z)=1N1zN1z1.

Por conveniência em relação à discussão a seguir, corresponde à seguinte equação de diferença:

yn=yn1+1N(xnxnN).

A aproximação que coloca o filtro no formato especificado requer assumir que , porque (e cito na pág. 68 ) " é a média das amostras " Essa aproximação permite simplificar a equação da diferença anterior da seguinte maneira: y n - 1 x nxnNyn1yn1xn

yn=yn-1+1N(xn-yn-1)yn=yn-1-1Nyn-1+1Nxnyn=(1-1N)yn-1+1Nxn.

Definindo , chegamos à sua forma original, , o que mostra que o coeficiente desejado ( em relação a essa aproximação) é exatamente (onde é o número de amostras). yn=αxn+(1-α)yn-11α=1Nyn=αxn+(1-α)yn-1 N1NN

Essa aproximação é a "melhor" em algum aspecto? Certamente é elegante. Veja como a resposta de magnitude se compara [a 44,1 kHz] a N = 3 e à medida que N aumenta para 10 (aproximação em azul):

N = 3 N = [3,10]


Como a resposta de Peter sugere, aproximar um filtro FIR de um filtro recursivo pode ser problemático sob uma norma de mínimos quadrados. Uma extensa discussão sobre como resolver esse problema em geral pode ser encontrada na tese de JOS, Técnicas para projeto de filtros digitais e identificação de sistemas com aplicação ao violino . Ele defende o uso da norma Hankel, mas nos casos em que a resposta da fase não importa, ele também aborda o método de Kopec, que pode funcionar bem nesse caso (e usa a norma ). Uma ampla visão geral das técnicas na tese pode ser encontrada aqui . Eles podem gerar outras aproximações interessantes.eu2


Esta é uma maneira "elegante" de dizer algo sobre a memória do filtro IIR de primeira ordem. Sua memória é equivalente a . Vou dar uma olhada nos outros métodos que você mencionou. Obrigado. 1α
Royi 8/10/11

Você poderia explicar intuitivamente por que, de acordo com a norma LS ( ), não há solução? L2
Royi 9/10/11

Não tenho certeza se existe ou não uma solução LS neste caso, mas sei que ela costuma ter problemas com convergência para o problema geral de "aproximação de FIR baseada em IIR". Vou atualizar w / mais informações quando tiver uma chance.
datageist

Bem, se a função de custo que Peter sugeriu (a primeira) estiver correta, há uma solução. Pelo menos de acordo com meus cálculos.
Royi 9/10/11

Ótimo. Estou curioso para ver como a abordagem "heurística" se compara a algo mais canônico. 1/N
datageist

16

OK, vamos tentar obter o melhor: para que o coeficiente de é . x[n-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

A melhor aproximação do quadrado médio minimizará: m>k-1

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
porque os coeficientes FIR são zero para .m>k1

O próximo passo é pegar derivadas e igualar a zero.


Olhando para um gráfico do derivado de e de 0 a 1, parece que o problema (como eu o configurei) está mal colocado, porque a melhor resposta é .K = 1000 α α = 0JK=1000αα=0

insira a descrição da imagem aqui


Eu acho que há um erro aqui. A maneira como deve estar de acordo com meus cálculos é:

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

Simplificá-lo de acordo com o Mathematica produz:

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

O uso do código a seguir no MATLAB produz algo equivalente, embora diferente:

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

De qualquer forma, essas funções têm um mínimo.


Então, vamos supor que realmente nos preocupamos apenas com a aproximação do suporte (comprimento) do filtro FIR. Nesse caso, o problema de otimização é justo:

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

A plotagem de para vários valores de versus resulta na data nas plotagens e na tabela abaixo.K αJ2(α)Kα

Para = 8. = 0,1533333 Para = 16. = 0,08 Para = 24. = 0,0533333 Para = 32. = 0,04 Para = 40. = 0,0333333 Para = 48. = 0,0266667 Para = 56. = 0,0233333 Para = 64. α m i n K α m i n K α m i n K α m i n K α m i n K α m i n K α m i n K α m i n K α m i nKαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin = 0,02
Para = 72. = 0,0166667 Kαmin

insira a descrição da imagem aqui

As linhas tracejadas vermelhas são e as linhas verdes são , o valor de que minimiza (escolhido em ).1/KαminαJ2(α)alpha=[0:.01:1]/3;


1
Estava apenas indo para postar exatamente a mesma coisa =)
Phonon

@Phonon: Fique à vontade para continuar! Eu o marquei como wiki da comunidade para esse fim.
Peter K.

A derivada wrt é uma série com um número infinito de termos (isto é, não um polinômio) que você precisa definir igual a e depois resolver ; portanto, alguns cuidados (ou possivelmente aproximação) serão necessários. α0α
Dilip Sarwate

Alguém pode verificar e / ou corrigir meu trabalho? :-)
Peter K.

@DilipSarwate, qual seria a melhor aproximação? Obrigado.
Royi 7/10/11


3

Eu me deparei com essa pergunta antiga e gostaria de compartilhar minha solução. Como mencionado em outras respostas, não há solução analítica, mas a função a ser minimizada se comporta bem e o valor ótimo de pode ser encontrado facilmente com algumas iterações de Newton. Também existe uma fórmula para verificar a otimização do resultado.α

A resposta de impulso do comprimento FIR filtro de média móvel é dada pelaN

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

onde é a função de etapa da unidade. O filtro IIR de primeira ordemu[n]

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

tem a resposta ao impulso

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

O objetivo agora é minimizar o erro ao quadrado

(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

α(5)(2)

(5)

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

α(0,1]α(3)

(6)β=1α

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

βN

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

(8)(7)N

(7)

N = 50; % de comprimento de filtro desejado do filtro de média móvel FIR

if (N == 1)% sem iteração para caso trivial
    b = 0;
outro
    % De iteração de Newton
    b = 1; % valor inicial
    Nit = 7;
    n = (N + 1) / 2;
    para k = 1: Nit,
        f = b ^ n + b ^ (n-1) -1;
        fp = n * b ^ (n-1) + (n-1) * b ^ (n-2);
        b = b - f / fp;
    fim

    % resultado da verificação
    N0 = -2 * log (1 + b) / log (b) + 1% deve ser igual a N
fim

a = 1 - b;

αN

   N alfa

   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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.