Me topé con esta vieja pregunta y me gustaría compartir mi solución. Como se menciona en otras respuestas, no existe una solución analítica, pero la función que se debe minimizar se comporta muy bien y el valor óptimo de se puede encontrar fácilmente con unas pocas iteraciones de Newton. También hay una fórmula para verificar la optimización del resultado.α
La respuesta al impulso del filtro de media móvil FIR de longitud viene dada porN
hFIR[n]=1N(u[n]−u[n−N])(1)
donde es la función de paso unitario. El filtro de primer orden IIRu[n]
y[n]=αx[n]+(1−α)y[n−1](2)
tiene la respuesta impulsiva
hIIR[n]=α(1−α)nu[n](3)
El objetivo ahora es minimizar el error al cuadrado
ϵ=∑n=0∞(hFIR[n]−hIIR[n])2(4)
Usando y , el error se puede escribir como(1)(3)
ϵ(α)=∑n=0N−1(α(1−α)n−1N)2+∑n=N∞α2(1−α)2n=α2∑n=0∞(1−α)2n−2αN∑n=0N−1(1−α)n+∑n=0N−11N2=α21−(1−α)2−2αN1−(1−α)N1−(1−α)+1N=α2−α−2N(1−(1−α)N)+1N,0<α<2(5)
Esta expresión es muy similar a la dada en esta respuesta , pero no es idéntica. La restricción en en asegura que la suma infinita converja, y es idéntica a la condición de estabilidad para el filtro IIR dada por .α(5)(2)
Establecer la derivada de a cero da como resultado(5)
(1−α)N−1(2−α)2=1(6)
Tenga en cuenta que el óptimo debe estar en el intervalo porque los valores mayores de dan como resultado una respuesta de impulso alterna , que no puede aproximarse a la respuesta de impulso constante del filtro de promedio móvil FIR.α(0,1]α(3)
Tomando la raíz cuadrada de e introduciendo , obtenemos(6)β=1−α
β(N+1)/2+β(N−1)/2−1=0(7)
Esta ecuación no se puede resolver analíticamente para , pero se puede resolver para :NβN
N=−2log(1+β)log(β),β≠0(8)
La ecuación se puede usar para verificar una solución numérica de ; debe devolver el valor especificado de .( 7 ) N(8)(7)N
La ecuación se puede resolver con unas pocas líneas de código (Matlab / Octave):(7)
N = 50; % de longitud de filtro deseada del filtro de promedio móvil FIR
if (N == 1)% sin iteración para caso trivial
b = 0;
más
% De iteración 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;
fin
% comprobar resultado
N0 = -2 * log (1 + b) / log (b) + 1% debe ser igual a N
fin
a = 1 - b;
A continuación se muestra una tabla con los valores óptimos de para un rango de longitudes de filtro :Nα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