Anda di halaman 1dari 7

Representación de Filtros digitales

1st Michelle Herrera 2nd Stalin Garcia


Universidad de las Fuerzas Armadas Universidad de las Fuerzas Armadas
Departamento de Eléctrica y Electrónica Departamento de Eléctrica y Electrónica
Sangolquı́, Ecuador Sangolquı́, Ecuador
mcherrera6@espe.edu.ec sagarcia3@espe.edu.ec

Resumen—En el presente documento se muestra el desarrollo IV. R ESULTADO Y A N ÁLISIS


de varios problemas referentes a las representaciones de filtros,
utilizando el dominio temporal y frecuencial para analizar
tf2zp
diferente tipos de señales, además de una serie de ejemplos en Se supone que se tiene una funcion de Z, del estilo:
los cuales se puede obtener la seal de salida de un sistema por
varias formas, con el fin de hallar la manera ms eficaz de obtener an z n + · · · + a2 z 2 + a1 z 1 + a0 z 0
H(z) =
dicha salida. bn z n + · · · + b2 z 2 + b1 z 1 + b0 z 0
y se desea conocer cuales son sus polos y sus ceros, entonces
I. I NTRODUCCI ÓN lo que se debe hacer es aplicar el comando
Como se ha visto la representación en el eje frecuencia
[z, p, k] = tf 2sp(num, den)
mediante el uso de la trasnformada Z o transformacin rápida
de Fourier desde que se ha implementado para el desarrollo z:ceros
tecnológico en el transcurso de los años ha ido evolucionando P: polos
constantemente, haciéndola una herramienta sumamente pode- k: constante
rosa para el procesamiento digital de señales, ahora lo que se num: coeficientes del numerador
desea es analizar su representación para realizar filtros. Esta den: coeficientes del denominador
transformación nos ubica en un plano frecuencial de una señal
asi podemos construir la siguiente ecuacion partiendo de
dada en el tiempo para con esta hacer lo que queramos de una
nuestros polos y ceros
manera más eficiente y eficaz, ahorrando recursos. Cierto es
que mientras más se profundiza en este tema, los cálculos (z − z1 )(z − z2 ) . . . (z − zn )
H(z) = k
matemáticos realizados manualmente pueden tener un grado (z − p1 )(z − p2 ) . . . (z − pn )
de dificultad grande, por no decir avanzada. Es por esto que Donde z son los ceros, p son los polos y k es una constante
se presenta este documento que contiene información de rea- que multiplica a todo el termino. Por ejemplo se tiene:
lizar esta transformación usando comandos computacionales
del software Matlab, simplificando en gran escala todos los >> a=[1 0.7 0.12]
cálculos. >> b=[1 0.6 -0.16]
>> [z,p,k]=tf2zp(a,b)
II. O BJETIVOS z =
Familiarizar al estudiante con el análisis de filtros digi-
-0.4000
tales en Matlab.
-0.3000
Entender la funcionalidad de los diversos comandos
existentes en Matlab para el análisis de filtros digitales.
p =
III. P ROCEDIMIENTO
-0.8000
Analizar y comprender las funciones tp2zp, zp2tf, 0.2000
roots, poly, sos2tf, tf2sos, residuez,
cplxpair, tf2ss, ss2tf, zp2sos, sos2zp
,ss2zp, sos2ss, ss2sos, filter. k =
Aplicar las funciones antes mencionadas para realizar el
diseño de filtros. 1
Obtener sus propias conclusiones acerca del laboratorio.
zp2tf ecuación caracterı́stica de la matriz se devuelve en un vector
Este comando, funciona, partiendo de la función que usa polos fila por poli.
y cercos, crear una función de la forma: Ejemplo:
an z n + · · · + a2 z 2 + a1 z 1 + a0 z 0 A =([1 2 3; 4 5 6; 7 8 0])
H(z) =
bn z n + · · · + b2 z 2 + b1 z 1 + b0 z 0
A=
Aplicando el comando en MATLAB de la forma:
1 2 3
[num, den] = zp2tf (z, p, k) 4 5 6
7 8 0
z:ceros
P: polos
k: constante
p = poly(A)
num: coeficientes del numerador
den: coeficientes del denominador
p =
Donde z es un vector con los zeros, p es un vector con los 1 -6 -72 -27
polos, y k es la constante de ganancia. Por ejemplo se tiene:
>> z=[-0.8; 0.2]
>> p=[-0.4 0.3] sos2tf
>> k=1 Función de transferencia representación de una sección del
>> [num, den]=zp2tf(z,p,k) sistema de segundo orden. Calcular la representación de la
función de transferencia de un sistema simple de la sección
num = de segundo orden .

1.0000 0.6000 -0.1600 >> sos=[1 1 1 1 0 -1; -2 3 1 1 10 1]

sos =
den =
1 1 1 1 0 -1
1.0000 0.1000 -0.1200 -2 3 1 1 10 1

>> [b,a]=sos2tf(sos)

Como aclaración, el vector de los ceros debe presentarse b =


como vector columna.
-2 1 2 4 1

roots
El polinomio s3 − 6s2 − 72s − 27 está representado en el a =
MATLAB como:
1 10 0 -10 -1
p = [ 1 -6 -72 -27 ]
% Las ra\’ices de este polinomio
% se devuelven residuez
% en un vector columna Trabaja de dos maneras, (b, a) = RESIDU EZ(r, p, k) y
(r, p, k) = RESIDU EZ(num, den), que son:
r = roots (p) num: los coeficientes del numerador y de del denominador,
obtendremos las fracciones parciales donde r es cada uno de
r = los numeradores, p es cada uno de los zeros de cada fracción
12.1229 parcial y k es el valor de las constantes.
-5,7345
-0,3884 Ejemplo:
Descomponer la función en fracciones parciales:
poly 1 − z −1
H(z) =
MATLAB muestra polinomios como vectores fila que contiene 1 − 5z −1 + 6z −2
los coeficientes ordenados por potencias descendentes. La
>> [r, p,k] = residuez([1 -1],[1 -5 6]) encuentra una matriz sos en forma de segundo orden sección
equivalente al sistema de polos - ganancia cero representada
r = por argumentos de entrada z , p, y k. Vectores z y p contienen
los ceros y polos del sistema H(z) , no necesariamente en
2.0000 cualquier orden:
-1.0000
>> z=[1 1 j -j];
>> p=[0.9 0.8 0.7 0.6];
>> sos=zp2sos(z,p)
p =
sos =
3.0000
2.0000
1 -2 1 1 -1 0.42
1 0 1 1 -1 0.72
k = [1]

sos2zp
cplxpair
B = cplxpair(A) Es el procedimiento inverso, pero se debe tener presente que
la matriz ingresada debe estar en la forma
Ordena los elementos a lo largo de diferentes dimensiones
de una matriz compleja, que agrupan juntos pares conjugados | b01 b02 b03 1 a02 a03 |
complejos. sos= | b11 b12 b13 1 a12 a13 |
Los pares conjugados están clasificadas por el aumento de la | .. .. .. 1 .. .. |
parte real. Dentro de un par, el elemento con parte imaginaria | bl1 bl2 bl3 1 al2 al3 |
negativa que ocurra primero. Los valores puramente reales se
devuelven después de todos los pares de complejos. Entonces para obtener los polos y ceros, se utiliza el comando:

Si A es un vector, cplxpair(A), devuelve pares complejos [z, p, k] = sos2zp(sos)


conjugados agrupados.
z: ceros
Si A es una matriz, cplxpair(A) devuelve una con sus p:polos
columnas ordenadas y complejos conjugados emparejados. k:ganancia

Si A es una matriz multidimensional, cplxpair(A) trata


zp2ss
los valores a lo largo de la primera dimensión como vectores,
devuelve un conjunto de elementos ordenados. Convierte una representación polos - ganancia cero de un siste-
ma dado a una representacin de espacio de estado equivalente.
B = cplxpair(A, tol) anula la tolerancia predeterminada. (z − z1 )(z − z2 ) . . . (z − zn )
H(z) = k
(z − p1 )(z − p2 ) . . . (z − pn )
B = cplxpair(A, [], DIM ) ordena A, a lo largo de la
dimensión especificada por el tenue escalar. Y deseamos la forma
H(z) = C(z −1 I − A)−1 B + D

tf2ss Usando el comando


Convierte la forma directa en la parte real.
[A, B, C, D] = zp2ss(z, p, k)
[A, B, C, D] = tf 2ss(b, a) devuelve las matrices A , z: ceros
B, C , y D de un espacio de estados para la función de p:polos
transferencia de entrada única. k:ganancia

zp2sos
Ejemplo:
Convierte una representación polos - ganancia cero de un
sistema dado a una representación sección de segundo orden >> z=[-0.8 0.2];
equivalente. >> p=[-0.4 -0.3];
>> k=1;
SOS = zp2sos(z, p, k) >> [A,B,C,D]=zp2ss(z,p,k)
A =
A =
-10 0 10 1
-0.70 -0.35 1 0 0 0
0.35 0 0 1 0 0
0 0 1 0

B =
B =
1
0 1
0
0
C = 0

-0.1 -0.81
C =

D = 21 2 -16 -1

1
D =

-2
ss2zp
Convierte la forma espacio de estado en la forma de polos-
ceros ganancia, invirtiendo el funcionamiento de zp2ss.
ss2sos
>> A=[-0.7 -0.12; 1 0];
>> b=[1 0]’; Es el codigo opuesto a sos2ss, tenemos la forma
>> c=[-0.1 -0.28];
H(z) = C(z −1 I − A)−1 B + D
>> d=1;
>> Y deseamos la forma
[z,p,k]=ss2zp(A,b,c,d)
b0k + b1k z −1 + b2k z −2
H(z) = ΠL
n=0
z = 1 + a1k z −1 + a2k z −2
>> A=[-0.7 -0.12; 1 0];
-0.8000 >> b=[1 0]’;
0.2000 >> c=[-0.1 -0.28];
>> d=1;
>> sos=ss2sos(A,b,c,d)
p =
sos =
-0.4000
-0.3000 1 0.6 -0.16 1 0.7 0.12

k = filter
Realiza el filtrado de la señal utilizando el tipo 2 de forma
1 directa canónica para los filtros IIR.
sos2ss
Parámetros de entrada: un vector b de los coeficientes del
convierte la forma de cascada en la forma espacio de estado, numerador, un vector de coeficientes de un denominador, un
invirtiendo el funcionamiento de ss2sos. vector x que sostiene la señal a filtrar, y un vector Zi.
>> sos=[1 1 1 1 10 1; -2 3 1 1 0 -1];
>> [A,B,C,D]=sos2ss(sos) Parámetros de salida: un vector y sostienen la señal filtrada
y un vector Zf .
V. E JERCICIOS A DICIONALES La realización en paralelo esta dado por la función determi-
nada con el comando residuo obtenemos la suma de H(z).
Descripción espacio de estado Considerando la forma
directa de la función de transferencia: r1 r2 rN
6 5 4 3 2
H(z) = + + ... + +k
z +z +z +z +z +z+1 z − p1 z − p2 z − pN
H(z) =
121 4 41 2 1 1 Usando el comando de Matlab:
z 6 + 3z 5 + z + z + z+
30 30 3 30
>> [rp,pp,kp]=residue(num,den)
Se puede determinar facilmente usando los comandos que se
muestran en lo siguiente.
rp =
>> num=[1 1 1 1 1 1 1];
>> den=[1 3 121/30 92/30 41/30 1/3 1/30]; -35.8020 + 0.0000i
>> [zc,pc,kc]=tf2zp(num,den) 5.0000 -12.5000i
5.0000 +12.5000i
zc = -10.0000 +49.0748i
-10.0000 -49.0748i
0.6235 + 0.7818i 43.8020 + 0.0000i
0.6235 - 0.7818i
-0.9010 + 0.4339i
-0.9010 - 0.4339i pp =
-0.2225 + 0.9749i
-0.2225 - 0.9749i -0.7236 + 0.0000i
-0.5000 + 0.5000i
-0.5000 - 0.5000i
pc = -0.5000 + 0.2887i
-0.5000 - 0.2887i
-0.5000 + 0.5000i -0.2764 + 0.0000i
-0.5000 - 0.5000i
-0.7236 + 0.0000i
-0.5000 + 0.2887i kp =
-0.5000 - 0.2887i
-0.2764 + 0.0000i 1

Una vez realizado se necesita ordenar los pares de conjugados


kc =
complejos de los polos hasta los polos reales en un vector que
lo llamaremos pp, como se muestra en lo siguiente:
1
N = length(pp);
pp2 = cplxpair(pp);
En general el comando tf 2zp agrupa los polos y ceros de
rp2 = zeros(N,1);
los pares conjugados. A estos datos agrupados es necesario
for i = 1:N,
ordenarlos en raı́ces reales de segundo orden de forma de
rp2(find(pp2 == pp(i)),1) = rp(i);
cascada con coeficientes reales por lo que es necesario usar el
end;
comando zp2sos que se muestra ası́:
>> Hcascade=zp2sos(zc,pc,kc) num_blocks = ceil(N/2);
Hparallel = zeros(num_blocks,6);
Hcascade = for count_p = 1:num_blocks,
if length(pp2) = 1,
1 -1.25 1 1 1 0.20 Hparallel(count_p,2) = rp2(1)+rp2(2);
1 0.45 1 1 1 0.33 Hparallel(count_p,3) = -rp2(1)*pp2(2)
1 1.80 1 1 1 0.50 -rp2(2)*pp2(1);
Hparallel(count_p,5) = -pp2(1)-pp2(2);
Hparallel(count_p,6) = pp2(1)*pp2(2);
Con la correspondencia se realiza la función de transferencia rp2(1:2) = []; pp2(1:2) = [];
z 2 − 1,25z + 1 z 2 + 0,45z + 1 z 2 + 1,80z + 1 else,
H(z) = Hparallel(count_p,2) = rp2(1);
z 2 + z + 1 z 2 + z + 0,33 z 2 + z + 0,5
Hparallel(count_p,5) = -pp2(1); que el eigenvalue son un conjunto de valores de un
end; parámetro para el que una ecuación diferencial tiene una
Hparallel(count_p,4) = 1; solución distinto de cero.
end; >> eig(A)
Hparallel = real(Hparallel);
La ejecución del programa: ans =

>> -0.5000 + 0.5000i


Hparallel = -0.5000 - 0.5000i
-0.7236 + 0.0000i
0 10 17.50 1 1 0.50 -0.5000 + 0.2887i
0 -20 -38.33 1 1 0.33 -0.5000 - 0.2887i
0 8 21.80 1 1 0.20 -0.2764 + 0.0000i

Con lo que obtenemos la función de transferencia de forma Como podemos observar es la matriz resultante del
paralela teniendo kp = 1. arreglo complejo de la función de transferencia que se
10z + 17,5 20z + 38,33 8z + 21,8 obtuvo en la anterior sección.
H(z) = 2 + + +1
z + z + 0,5 z 2 + z + 0,33 z 2 + z + 0,2
Usando el comando tf 2ss aplicando el numerador como en
2. Implementar la ecuación
el denominador obtenemos:

>> [A,B,C,D]=tf2ss(num,den) d, n= 1
(1)
C T An−1 B
A = En Matlab determinar la respuesta al impulso del state-
space basado en la matriz A, B, C y el escalar. Además
-3 -4.03 -3.06 -1.37 -0.33 -0.03 comparar el resultado con la respuesta al impulso obte-
1 0 0 0 0 0 nido con el comando filtro.
0 1 0 0 0 0
0 0 1 0 0 0
[num den]= ss2tf (A, B, C, D)
0 0 0 1 0 0
figure(1)
0 0 0 0 1 0
grid on
d= tf (num, den, 0.1) ;
step(d)
B =
y=filter(num, 1, den) ;
figure(2)
1
grid on
0
y1= tf(y, den, 0.1) ;
0
step(y1)
0
0
num =
0
1 1 1 1 1 1 1
C =
den =
-2 -3.03 -2.07 -0.37 0.67 0.97
1 3 4.03 3.07 1.37 0.33 0
D =
Se puede observar claramente la diferencia entre estas
1 las gráficas. El transitorio es absorbido al comienzo
en segundos de la respuesta al escalón utilizando la
función filter que después de todo es un filtro digital.
VI. E JERCICIOS A DICIONALES Lo que no sucede, es con la respuesta al escalón de la
1. Usar el comando eig en Matlab para determinar los función de transferencia sin usar filtro en la figura2, lo
eigenvalues del sistema de la matriz teniendo en cuenta cual se debe a que en un transitorio existen muchas
VIII. R ECOMENDACIONES
Se recomienda usar el comando tf para calcular la
función de transferencia de las funciones que se necesite
encontrar.
Se recomienda usar la función tf 2ss para encontrar los
espacios entre los estados.
R EFERENCIAS
[1] Paulo Diniz, Eduardo da Silva, and Sergio Netto. Digital Signal Proces-
sing: System Analysis and Design, 2nd Edition. Cambridge University
Press, ISBN 978-0-521-88775-5, 2010.
[2] Monson H. Hayes. Schaums. Outline of Theory and Problems of Digital
Signal Processing, 2nd Edition. McGraw Hill, ISBN 0-07- 027389-8,
2011

Figura 1. Respuesta escalón unitario con función filter

Figura 2. Respuesta escalón unitario

altas frecuencias las cuales son disminuidas por el filtro


que se expresan en la figura 1.

VII. C ONCLUSIONES

Otra solución para separar los pares complejos conju-


gados de los reales es situar las raı́ces reales después
de todos los pares de complejos, y reordenar el vector
residuo rp en consecuencia, para permitir la combinación
adecuada de los residuos y los postes para formar los
términos de segundo orden.
Los pares complejos conjugados, se resuelven a partir de
las raı́ces reales para componer los elementos de segundo
orden de una realización cascada con coeficientes reales.
Se ideó un procedimiento para el análisis de redes
digitales en los dominios de tiempo y frecuencia.

Anda mungkin juga menyukai