EE610 Practicas Con Matlab

Procesamiento digital e señales. Señales y sistemas discretos con matlab. Serie de Fourier discreta DSF. Transformada de

Views 220 Downloads 4 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

lOMoARcPSD

Práctica 1: Señales en MATLAB

Grupo

-

Puesto

-

Apellidos, nombre

SOLUCIÓN

Fecha

Apellidos, nombre

SOLUCIÓN

19-20 / 09 /12

El objetivo de esta práctica es presentar al alumno el modo de orientar las herramientas que ofrece MATLAB a la representación y manejo de señales y sistemas. A partir del ejercicio 6, desarrolle cada ejercicio en un fichero de comandos ‘ejercicio_X.m’ separado (salvo cuando se le solicite desarrollar una función, en cuyo caso el fichero llevará el nombre de la función). Justo antes de finalizar la práctica, comprima los ficheros ‘.m’ generados en un único fichero ‘practica_1_Puesto_XX . zip’, conéctese al sistema de entrega de prácticas de la Intranet y entréguelo en el grupo que corresponda (3211, 3212, 3213, 3214)

1.1 Generación y manipulación básica de señales Para seguir este apartado escriba en la línea de comando todos los ejemplos mostrados. Utilice la ayuda de MATLAB para documentarse sobre cualquier comando que desconozca.

1.1.1

Ejercicio 1: representación de una señal en un rango dado

En general, una señal quedará representada por un vector fila o por un vector columna (es decir, por matrices con una única fila o columna). En MATLAB, todos los vectores se indexan comenzando por el 1, es decir, y(1) es el primer elemento del vector y. Cuando este criterio no coincida con el del problema a resolver (e.g., porque el primer valor del vector y corresponda al índice -3), se puede crear un vector adicional de índices. Por ejemplo, para representar la señal: 2n, xn   0,

3  0  3 resto

, puede usarse el operador ‘:’ para definir un vector con los índices de x[n] no nulos, y luego definir el propio vector x de modo que contenga los valores deseados en cada uno de estos índices: >> n=[-3:3]; >> x=2*n;

Represente esta señal escribiendo stem(n,x). Para examinar la señal en un rango más amplio de índices, será necesario extender tanto el vector de índices, n , como la señal x:

lOMoARcPSD

n[-3:3] 6

4

Valor

2

0

-2

-4

-6 -3



-2

-1

0 Tiempo (Discreto)

1

Para representar la señal en el intervalo [-5,5]:

>> n=[-5:5]; >> x=[0 0 x 0 0];

% x tenía el valor del ejemplo anterior

2

3

lOMoARcPSD



Para representarla en [-100,100]:

>> n=[-100:100]; >> x=[zeros(1,95) x zeros(1,95)];

% x tenía el valor del ejemplo anterior

Represente cada una de estas tres señales en tres figuras distintas (vea el comando figure).

1.1.2

Ejercicio 2: representación de dos señales en un cierto rango

Sean x1 n   n y x2 n   n  2 (la función  n toma valor 1 para n=0 y valor nulo en el resto). Dibuje aparte el aspecto que tienen ambas señales. Estas señales pueden definirse en MATLAB escribiendo: >> >> >> >>

nx1=[0:10]; x1=[1 zeros(1,10)]; nx2=[-5:5]; x2=[zeros(1,3) 1 zeros(1,7)];

lOMoARcPSD

Para representarlas, basta escribir stem(nx1,x1) y stem(nx2,x2). Compruebe que obtiene el resultado esperado. Represéntelas ahora directamente con stem(x1) y stem(x2), función que en ausencia de un vector de índices asume que éste comienza en 1 y que tiene la misma longitud que la señal. Indique, en esta situación, cual es la expresión analítica de las señales que observa:

lOMoARcPSD

x[n-1]

Valor

1

0.5

0

1

2

3

4

5 6 7 Tiempo Discreto x[n-4]

8

9

10

11

1

2

3

4

5 6 7 Tiempo Discreto

8

9

10

11

Valor

1

0.5

0

Señal representada con stem(x1)

  n  1

Señal representada con stem(x2)

 n  4

>> Tenga en cuenta en lo sucesivo que a la hora de representar señales, tan importante como la expresión de la señal es el vector de índices con respecto al cual se representa. > t=[-5:0.1:5];

, o bien: >> t=linspace(-5,5,101);

Hecho esto, para representar la señal xt   sen(t / 4) basta con escribir: >> x=sin(pi*t/4);

>> Observe que en MATLAB, cuando el argumento de una función de este tipo (sin, cos, exp, etc.) es un vector, el resultado es un vector del mismo tamaño, en el que cada valor resulta de la aplicación de la función a cada valor del vector argumento. > plot(t,x);

Represente gráficamente las señales x1 t   sen(t / 4) y x 2 t   cos( t / 4) en el intervalo 4  t  4 dando valores cada 1/8 de segundo. Represente ambas sobre la misma figura utilizando el comando plot y, a continuación, nuevamente sobre la misma figura, represente ambas con el comando stem (para ello utilice el comando hold). Utilice dos colores: uno para las dos representaciones de x1 t  y otro para las dos de x 2 t  .

>> En lo sucesivo, siempre que se quiera representar gráficamente una señal de tiempo discreto utilice el comando stem; análogamente, siempre que la señal sea de tiempo continuo (aunque con MATLAB se aproxime por una señal de tiempo discreto definida a intervalos regulares y muy pequeños) utilice el comando plot para resaltar este hecho y evitar cualquier confusión. > n=[0:32]; >> x=exp(j*(pi/8)*n);

El vector x contiene una serie de 33 valores complejos de la señal xn . Represéntelos gráficamente, haciendo uso de la función stem, indicando qué característica de cada valor complejo desea representar: >> >> >> >>

stem(n,real(x)); stem(n,imag(x)); stem(n,abs(x)); stem(n,angle(x));

lOMoARcPSD

Compruebe y recuerde que si en la función no se especifica qué característica de la señal compleja se desea representar (es decir, si escribe stem(n,x)), MATLAB representará, por defecto, la parte real de la señal y mostrará una advertencia en la línea de comando indicándolo.

1.1.5

Ejercicio 5: operaciones aritméticas con señales

Siempre que dos señales compartan el mismo vector de índices (es decir, que el vector que representa cada señal tenga el mismo origen de tiempos), es posible realizar directamente cierto tipo de operaciones básicas. Así, defina las señales: >> x1=sin((pi/4)*[0:30]); >> x2=cos((pi/7)*[0:30]);

y efectúe las siguientes operaciones: >> >> >> >> >> >>

y1=x1+x2; y2=x1-x2; y3=x1.*x2; y4=x1./x2; y5=2*x1; y6=x1.^x2;

Observe que en el caso de la multiplicación, división y exponenciación, es necesario preceder el operador de un punto, para indicar que la operación ha de llevarse término a término, en vez de entre matrices (e.g., el producto de matrices requiere que el segundo término tenga tantas filas como columnas tenga el primero, algo que no verifican los vectores x1 y x2). Represente las siete señales de este apartado en ocho figuras distintas.

lOMoARcPSD

x1

x2

1

1

0

0

-1

0

10

20

30

-1

0

10

n x1+x2 2

2

0

0

-2

0

10

20

30

-2

0

10

n x1.*x2 5

0

0

0

10

20

30

-5

n 2*x1 2

0

0

0

10

20

30

n

1.1.6

0

20

30

10

14

2

-2

30

n x1./x2

1

-1

20 n x1-x2

-2

x 10

0

20 n x1 elevado a (x2)

10

20

30

30

n

Ejercicio 6: scripts y funciones

En MATLAB hay esencialmente dos tipos de ficheros con extensión ‘.m’: scripts de comandos y funciones. Su uso es imprescindible de cara a organizar, depurar y guardar los ejercicios (en scripts) y siempre que se requiera realizar un mismo conjunto de operaciones (es decir, funciones) sobre señales diferentes. Tenga en cuenta que para poder invocar scripts y funciones, los ficheros ‘.m’ que los implementan han de estar en algún lugar referenciado por el path de MATLAB. Utilice algún directorio de su unidad de disco privada (por defecto, h:\) y añádalo al path de MATLAB (menú ‘File/Set path…’). Recuerde que tendrá que efectuar esta operación cada vez que reinicie su ordenador. Replique los ejemplos que se presentan a continuación:

lOMoARcPSD

Genere con el editor de MATLAB el siguiente script (asígnele el nombre ‘ejercicio_6.m’), cuyo objetivo es representar una determinada señal discreta en un intervalo dado, calcular su valor medio en el citado intervalo, y representar este valor como una función constante: % ejercicio6.m >> n = [0:16]; >> x1 = cos(pi*n/4); >> y1 = mean(x1); >> stem(n,x1,'r') >> title('x1[n] = cos(pi*n/4) / media') >> xlabel('Tiempo (Discreto)') >> ylabel('x1[n]') >> hold on >> m1=y1*ones(1,17); >> plot(n,m1,'g') >> hold off >> legend('Cos (pi*n/4)', 'Media (Cos (pi*n / 4))');

x1[n] = cos(pi*n/4) / media 1 0.8 0.6 0.4

xl[n]

0.2 0 -0.2 -0.4 -0.6 -0.8 -1

Cos (pi*n/4) Media (Cos (pi*n / 4)) 0

2

4

6 8 10 Tiempo (Discreto)

12

14

16

Invoque el script creado escribiendo ejercicio6 en la línea de comandos de MATLAB. Si ahora desea realizar la misma operación con la señal x2 n  sin(n / 4) y en el intervalo 0  n  32 , basta con copiar el fichero, asignarle un nuevo nombre (e.g., ‘ejercicio_6b.m’) y cambiar las líneas que proceda: % ejercicio6b.m >> n = [0:32]; >> x1 = sin(pi*n/4); >> y1 = mean(x1); >> stem(n,x1,'r') >> title('x1[n] = sen(pi*n/4) / media') >> xlabel('Tiempo (Discreto)') >> ylabel('x1[n]') >> hold on >> m1=y1*ones(1,33); >> plot(n,m1,'g') >> hold off >> legend('Sen (pi*n/4)', 'Media (Sen (pi*n / 4))');

lOMoARcPSD

x2[n] = sen(pi*n/4) / media 1 Sen (pi*n/4) Media (Sen (pi*n / 4))

0.8 0.6 0.4

xl[n]

0.2 0 -0.2 -0.4 -0.6 -0.8 -1

0

5

10

15 20 Tiempo (Discreto)

25

30

35

Compruebe que obtiene el resultado deseado ejecutando este segundo script desde la línea de comandos. Un fichero ‘.m’ también puede representar una función. Para ello, la primera palabra del fichero ha de ser function. El resto de la línea especifica los parámetros que acepta la función y los valores que devuelve. El siguiente ejemplo muestra una función llamada f_obtiene_yz, que toma como parámetro un vector x, y devuelve otros dos vectores, y y z (acostúmbrese a preceder el nombre de todas las funciones con las letras f_, de modo que se distingan claramente de funciones de MATLAB o de scripts): function [y,z] = f_obtiene_yz(x) % [y,z] = f_obtiene_yz(x) admite una señal ‘x’ y % devuelve dos señales, ‘y’ y ‘z’, donde ‘y’ vale 2*x % y ‘z’ vale (5/9)*(x-3) y = 2.*x; z = (5/9).*(x-3);

El siguiente ejemplo muestra cómo utilizar esta función desde la línea de comandos (o bien desde un script): >> >> >> >> >> >> >> >>

n=[0:15]; x1=4*sin((pi/4)*n); [y1,z1]=f_obtiene_yz(x1); stem(n,x1); hold on; stem(n,y1,'r'); stem(n,z1,'g'); hold off;

lOMoARcPSD

1.2 Operaciones con señales Realice todos los ejercicios que se le solicite en ficheros (scripts) ‘.m’, de modo que pueda guardar y modificar sus resultados sin necesidad de volver a teclear el código de nuevo. Después de cada ejercicio, valide su resultado mediante el documento SOLUCIÓN, en caso de que resultado y solución no concuerden, solicite al profesor de prácticas que valide el resultado en su memoria de prácticas.

1.2.1

Ejercicio 7: transformaciones de la variable independiente

Defina en un fichero la siguiente función discreta, xn , en el intervalo 3  n  11 , a través de un vector x y del vector de índices nx correspondiente: 2, 1,  xn   1, 3,  0,

n0 n2 n3 n4 resto

Represéntela gráficamente y fije las etiquetas necesarias (xlabel, ylabel, title) de modo que el resultado sea similar al que muestra la Fig. 1.

lOMoARcPSD

Fig.1: Representación gráfica de la señal original

Una vez definida la señal xn , defina en el mismo fichero ‘.m’ las siguientes señales: y1 n  xn  2

y 2 n  xn  1 y3 n  x n

y 4 n  x n  1

Para ello, el método que se propone, orientado a evidenciar que no cambia la señal sino la variable independiente, consiste en primero definir y1=x, y2=x, etc., y a continuación definir los correspondientes vectores índice de cada señal (ny1,…, ny4) como una transformación del vector de índices nx. Para ello dibuje aparte las cuatro señales que se le solicitan, deduzca la relación que existe entre sus respectivos vectores de índices y el vector nx, y exprese dicha relación mediante MATLAB. Finalice este apartado representando gráficamente la señal original ( xn ) y, en otra ventana, las cuatro señales resultantes de cada transformación (ver el comando subplot); titule y etiquete cada gráfico. Indique en cada uno cuál es la relación entre la señal representada yi n y la original xn (e.g., “adelantada tres posiciones”, “invertida y luego retrasada…”).

lOMoARcPSD

x retrasada 2

x adelantada 1

3

3

2

2

1

1

0

0

-1

-10

-5

0 ny1

5

10

x invertida

2

2

1

1

0

0

-1

-10

-5

0 ny3

-10

-5

0 ny2

5

10

x invertida y luego adelantada 1 ó x retrasada 1 y luego invertida 3

3

1.2.2

-1

5

10

-1

-10

-5

0 ny4

5

10

Ejercicio 8: señales pares e impares

Para cada una de las señales cuya expresión se ofrece a continuación, obtener su parte par y su parte impar (para generar las señales invertidas utilice fliplr en vez de modificar la variable independiente o vector de índices). Representar a continuación las tres señales en una misma figura (utilice subplot), utilizando para todas el rango 10  n  10 . Codifique todo el ejercicio en un mismo script. 0n5 1,  x1 n   1,  5  n  0 0, resto  1, 2,  x 2 n  3, 1,  0,

n  2

 1, 2,  x 3 n   1, 0,

n   4,3

n  1 n0 n7 resto

n   3,2,1 n   1,0,2 resto

Compruebe que el ejercicio es correcto observando las simetrías de las señales pares e impares obtenidas. >> Observe que si se desea efectuar operaciones aritméticas con varias señales distintas (caso de este ejercicio), todas ellas deben compartir el mismo vector de índices; por lo tanto, las transformaciones de la variable independiente han de trasladarse en este caso a la señal (no como en el ejercicio anterior). k = 0 y = 8. frecuencia 0 Mayor -> k = 4. frecuencia pi

2.2 Periodicidad en señales discretas 2.2.1

Ejercicio 4: Comparación señales discretas vs. señales continuas

Sean las siguientes señales:

 2π   2π  x1 [n] = cos n  , x1 (t ) = cos t  12   12   8π   8π  x 2 [n] = cos n  , x 2 (t ) = cos t 31    31  1  1  x 3 [n] = cos n  , x 3 (t ) = cos t  2  2  Desarrolle un script que genere estas seis señales en los intervalos n ∈ [0,50] y t ∈ [0,50] (definido en segundos a intervalos de 0.2 s.) respectivamente, y represéntelas en un mismo gráfico de tres filas o subgráficos (utilice subplot). En cada subgráfico represente superpuestas la señal continua (utilice plot) y la señal discreta correspondiente (utilice stem).

lOMoARcPSD

A partir de la inspección de los gráficos, obtenga el periodo mínimo de repetición de las seis señales, es decir, su periodo fundamental, y compruebe que los cálculos teóricos1 coinciden con sus observaciones. Rellene la tabla adjunta:

2.2.2

x1 [n]

x 2 [n]

x 3 [n]

N 0 observado

12

31

25

N 0 teórico

12

31

NO

x1 (t )

x 2 (t )

x 3 (t )

T0 observado

12

7.8

12.6

T0 teórico

12

7.75

12.55664

Ejercicio 5: función de comprobación de periodicidad

El objetivo de este ejercicio es desarrollar una función de MATLAB que verifique si una señal dada presenta un periodo también dado. Más específicamente, la función recibirá como parámetros un vector con valores de una señal discreta

1

Tenga en cuenta que en las señales continuas el periodo fundamental se obtiene analíticamente como

las señales discretas, el periodo es el valor entero

N 0 que verifique

ω 0 m m0 = = 2π N N 0

, siendo

T0 = 2π ω 0 , y para

m 0 cualquier número entero.

lOMoARcPSD

(parámetro signal) y el valor del periodo que se desea verificar (parámetro period). El procedimiento propuesto para hacer la verificación consiste en generar una nueva señal consistente en la señal signal desplazada tantas unidades como indique el parámetro period. A continuación se seleccionarán las partes de ambas señales que estén definidas, y se restarán (ver Fig. 1); si el resultado es nulo, indicará que signal presenta el periodo dado; si no, no. Este resultado lo devolverá la función como valor de retorno. No utilice bucles ni estructuras de control para llevar a cabo esta función.

signal signal desplazada period is_periodic

Fig. 1: Diagrama de funcionamiento propuesto para la función f_test_period

La función se almacenará en un fichero ‘f_test_period.m’ y presentará el siguiente prototipo: function is_periodic = f_test_period(signal,period) % f_test_period acepta una señal ‘signal’ y un número ‘period’ % y devuelve ‘0’ si la señal presenta dicho periodo, y un valor % distinto de cero en caso contrario. Esta función hace uso de % la función ‘length(X)’.

Para comprobar el funcionamiento de la función desarrollada, aplicarla sobre las tres señales discretas del ejercicio anterior y rellenar la tabla adjunta (utilice en los dos primeros casos el valor observado, y en el tercero utilice period=12 ): signal period is_periodic

x1 [n]

x 2 [n]

x 3 [n]

12

31

12

0

0

Dif 0

Comente los resultados obtenidos, e indique, si procede, alguna solución a los problemas numéricos que haya encontrado:

2.2.3

Ejercicio 6: periodicidad de la suma de señales periódicas

Considere las tres señales siguientes:

 2π   3π  x1 [n] = cos n  + 2 ⋅ cos n N   N  3  2  x 2 [n] = cos n  + cos n  N  N   2π   5π  x 3 [n] = cos n  + 3 ⋅ cos n  N   2N  Suponiendo que N=6, represente las tres señales en un gráfico de 3x1 subgráficos (utilice subplot). Represéntelas inicialmente en el rango n ∈ [0,49] . A continuación, a través de la observación de los gráficos y de la utilización de la función f_test_period, obtenga el periodo fundamental de cada una y represéntelas de nuevo, esta vez en un intervalo de dos periodos fundamentales (si alguna no fuera

lOMoARcPSD

periódica, represéntela en n ∈ [0,49] ). Dibuje el resultado obtenido:

lOMoARcPSD

Indique en qué condiciones la suma de dos señales periódicas es una señal periódica. ¿Cuál es el periodo de la señal suma? Cualquier señal x( t ) que sea igual a la suma de dos señales periódicas, x1( t ) y x2( t ), con períodos fundamentales T1 y T2 respectivamente, será periódica si se cumple la siguiente relación:

T1 m m0 = = ⇒ T = n0T1 = m0T2, n0 y m0 ∈ enteros T2 n n0 m0 siendo fracción irreducible (T es el m.c.m entre T1 y T2 ) N0 Igual para el caso discreto.

2.2.4

Ejercicio 7: periodicidad del producto de señales periódicas

Considere las tres señales siguientes:

π  π  x1 [n] = sin  n  ⋅ cos n  4   4  π  x 2 [n] = cos 2  n  4  π  π  x 3 [ n ] = sin  n  ⋅ cos  n  4  8 

Represente las tres señales en un gráfico de 3x1 subgráficos (utilice subplot). Represéntelas en el rango n ∈ [0,49] . A continuación, a través de la observación de los gráficos y de la utilización de la función f_test_period, obtenga el periodo fundamental de cada una. Dibuje el resultado obtenido:

lOMoARcPSD

Indique en la tabla adjunta cuál es el periodo de las señales factores y el periodo de la señal producto.

N 0 , factor 1

N 0 , factor 2

N 0 , señal

x1 [n]

8

8

4

x 2 [n]

8

8

4

x 3 [n]

8

16

16

Comente en qué condiciones el producto de dos señales periódicas es una señal periódica (efectúe las pruebas adicionales que considere necesarias para llegar a una conclusión fundada): …

2.2.5

Ejercicio 8: función de cálculo de periodicidad

El objetivo de este ejercicio es desarrollar una función de MATLAB que obtenga y devuelva el periodo fundamental de una señal dada; si la señal no es periódica devolverá valor nulo, y si es constante, valor unidad. Más específicamente, la función recibirá como único parámetro una señal discreta (parámetro signal). El procedimiento propuesto para obtener su periodo fundamental consiste en crear un bucle que vaya llamando a la función f_test_period con valores crecientes del parámetro period (comenzando en el valor 1 y terminando en la mitad de la longitud de la señal). Cuando la llamada a dicha función arroje valor nulo, se devolverá el valor del periodo que ha provocado esta situación. Si el bucle terminara sin que se haya verificado la condición anterior, se devolverá valor nulo. Para desarrollar esta función es probable que requiera hacer uso de las funciones de programación y return. La función se almacenará en un fichero ‘f_get_period.m’ y presentará el siguiente prototipo: for, if

function fundamental_period = f_get_period(signal) % f_get_period acepta una señal ‘signal’ y devuelve su periodo, si % la señal es periódica, ‘0’ si no lo es, y ‘1’ si es una señal % de valor constante.

Compruebe su funcionamiento con cualquiera de las señales de los ejercicios anteriores.

lOMoARcPSD

Práctica 3: Convolución Apellidos, nombre

Grupo Puesto Fecha

Apellidos, nombre

El objetivo de esta práctica es familiarizar al alumno con la suma de convolución, fundamental en el estudio de los sistemas lineales, mediante la realización de ejercicios que ilustren las propiedades de dicha operación. Para llevar a cabo la práctica, desarrolle cada ejercicio en un fichero de comandos ‘ejercicio_X.m’ separado (salvo cuando se le solicite desarrollar una función, en cuyo caso el fichero llevará el nombre de la función). Justo antes de finalizar la práctica, comprima los ficheros ‘.m’ generados en un único fichero ‘practica_3_Puesto_XX . zip’, conéctese al sistema de entrega de prácticas de la Intranet y entréguelo en el grupo que corresponda. Salvo que se le indique lo contrario en algún apartado concreto, no está permitido utilizar en los scripts las funciones de control de flujo del programa de MATLAB (for, if-else, etc.).

3.1 Convolución de señales discretas 3.1.1

Ejercicio 1: convolución ‘manual’ de señales causales finitas

El objetivo de este ejercicio es llevar a cabo la convolución de dos señales desarrollando directamente el significado de la operación. Sean las señales:

n  1 0  n  10 xn   resto  0 1 0  n  3 hn   resto 0 El objetivo es calcular yn  xn  hn . Para ello, genere las señales xn y hn en el intervalo

n  0,20 . Teniendo en cuenta que la señal xn sólo toma valor en un número finito de puntos, yn

puede escribirse: yn 



 xk   hn - k   x0 hn   x1 hn - 1  ...  x9 hn - 9  x10  hn - 10

k 

Para obtener yn , genere, sin utilizar bucles, cada una de las once funciones (es decir, sumandos) que indica la expresión anterior y a continuación súmelas. Para poder sumarlas, todas ellas han de estar definidas en el mismo intervalo de n, en decir, n  0,20 . Como guía para llevar a cabo esta operación, observe que para generar un vector con la señal y 5 n  x5 hn  5 en el mismo intervalo que esté

definida hn y teniendo en cuenta que los índices en Matlab comienzan en 1, se puede escribir: >> y5=x(5+1).*[zeros(1,5) h(1:end-5)];

lOMoARcPSD

Tenga en cuenta que esta operación de desplazamiento en la señal hn es válida porque hn se definió en un intervalo mucho mayor que el que ocupan sus valores no nulos. Represente en una figura con 12 gráficas (12 filas) las 11 señales desplazadas yk[n] y la suma y[n].

y0[n] 1 0.5 0

0

2

4

6

8

10 y1[n]

12

14

16

18

20

0

2

4

6

8

10 y2[n]

12

14

16

18

20

0

2

4

6

8

10 y3[n]

12

14

16

18

20

0

2

4

6

8

10 y4[n]

12

14

16

18

20

0

2

4

6

8

10 y5[n]

12

14

16

18

20

0

2

4

6

8

10 y6[n]

12

14

16

18

20

0

2

4

6

8

10 y7[n]

12

14

16

18

20

0

2

4

6

8

10 y8[n]

12

14

16

18

20

0

2

4

6

8

10 y9[n]

12

14

16

18

20

0

2

4

6

8

10 y10[n]

12

14

16

18

20

0

2

4

6

8

10 y[n]

12

14

16

18

20

0

2

4

6

8

10

12

14

16

18

20

2 1 0 4 2 0 4 2 0 5 0 10 5 0 10 5 0 10 5 0 10 5 0 10 5 0 20 10 0 40 20 0

lOMoARcPSD

Como resultado de la suma de las once subseñales habrá obtenido yn en el mismo intervalo

n  0,20 . Represente en otra figura, en un mismo gráfico de tres filas o subgráficos (utilice subplot),

las señales xn , hn e yn , y dibuje esta última en la gráfica adjunta:

Indique cuál es la duración de la señal yn y en qué índice comienza. A la vista de la expresión

analítica de yn , indique también qué relación tiene su duración e índice de comienzo con las respectivas

duraciones e índices de comienzo de las señales xn y hn :

Duracion Y = Duracion X + Duracion H – 1 => 14 = 11 + 4 - 1. El inicio de y[n] es básicamente el inicio (no nulo) de x[n] + inicio (no nulo) de h[n] => 0+0=0. El final de y[n] es según longitud.

3.1.2

Ejercicio 2: convolución ‘manual’ de señales no causales finitas

Repita el ejercicio anterior, pero utilizando esta vez una respuesta al impulso unidad definida por: n  2, hn   0,

2  n  3 resto

Defina ahora las señales involucradas en el intervalo o vector de índices n   5,20 , y desarrolle la



convolución siguiendo el mismo procedimiento. Tenga en cuenta que en este caso el valor x k corresponde en MATLAB con el índice x(k-(-5)+1) del vector x. Represente en un mismo gráfico de tres filas o subgráficos (utilice

subplot),

la señal xn y las

lOMoARcPSD

nuevas señales hn e yn , y dibuje esta última en la gráfica adjunta, indicando claramente qué índices abarcan los valores no nulos de yn :

Observe que las tres señales comparten un mismo vector de índices, que es suficientemente amplio como para contener los valores no nulos de todas ellas. Indique de nuevo qué relación tiene la duración e índice de comienzo de yn con las respectivas duraciones e índices de comienzo de las señales xn y hn :

Duracion Y = Duracion X + Duracion H – 1 => 15 = 11 + 5 - 1. El inicio de y[n] es básicamente el inicio no nulo de h[n] + inicio no nulo de x[n] -1+0=-1 El final de y[n] es según longitud

3.1.3

Ejercicio 3: la función conv de MATLAB

La invocación de esta función de MATLAB se realiza del siguiente modo: nx=... x=... nh=... h=... y=conv(x,h); ny=...

% % % % % %

Intervalo ‘nx’ de valores Definición del vector ‘x’ Intervalo ‘nh’ de valores Definición del vector ‘h’ Devuelve un vector ‘y’ de Intervalo ‘ny’ de valores

no nulos de la señal ‘x’ en el intervalo ‘nx’ no nulos de la respuesta al impulso ‘h’ en el intervalo ‘nh’ longitud ‘nx+nh-1’ no nulos de la salida ‘y’

Observe que la función conv toma como parámetros las señales x y h pero no sus vectores de índices. Por lo tanto, la función no puede obtener ni devolver el vector de índices correcto para la señal y; es

lOMoARcPSD

responsabilidad del que llama a la función el definir de qué índice a qué índice va el vector de índices de la señal y para poder representarlo adecuadamente. En conclusión, ny lo ha de definir usted. Repita los ejercicios 1 y 2 en dos scripts, ‘ejercicio_3a.m’ y ‘ejercicio_3b.m’, utilizando la función Para ello defina los vectores x y h según se ha indicado más arriba, realice la convolución, y defina el vector de índices que corresponde a la señal y (teniendo en cuenta en qué índice debe comenzar y qué longitud ha de tener). Represente al final de cada script las tres señales involucradas (como en los ejercicios anteriores), pero todas ellas sobre el vector de índices mayor, o sea, sobre ny (para ello, añada ceros antes y/o después de x y h, según convenga).

conv.

Compruebe que las señales obtenidas son iguales a las de los ejercicios anteriores.

lOMoARcPSD

3.1.4

Ejercicio 4: convolución de señales de duración infinita

Sean las señales de duración infinita: 1 xn    2

n2

u n  2

hn  u n  2

Calcule yn  xn  hn de forma analítica e indíquela a continuación N

(recuerde que

 ak  k 0

1  a n 1 ) 1 a

n 1

Expresión analítica

1 1   2 y[n]    u[n] 1 1   2

El objetivo es calcular yn  xn  hn utilizando la función

conv

y evaluar la validez del resultado

cuando xn y hn no se generan en intervalos infinitos (algo que no es posible en la práctica) sino que

se truncan a intervalos finitos. Para ello, genere la señal xn en el intervalo n  0,24 y la señal hn en el intervalo n   2,14 , es decir, genere versiones truncadas de estas dos señales: xT n y hT n .

Obtenga a continuación su convolución yT n  xT n  hT n , defina su vector de índices, y represente las tres señales involucradas (xT[n], hT [n], yT[n]) e y[n] sobre un vector de índices que permita representar las cuatro señales. Si xn y hn tienen longitud infinita, yn  xn  hn también ha de tenerla. Al truncar las señales involucradas, el resultado también habrá quedado truncado. Deduzca en qué intervalo de valores de n se verifica que yn  yT n , y compruebe que sus deducciones se corresponden con lo observado. Modifique los intervalos a que se han truncado las señales xn y hn para comprobar que sus conclusiones son correctas. Explique el resultado obtenido:

lOMoARcPSD

3.2 Operaciones sobre sistemas LTI discretos Sean las señales:

1, xn   0,

0n4 resto

,

1,  1,  h1 n  3, 1,  0,

n0 n 1 n2, n4 resto

2, 5,  h2 n  4,  1,  0,

n 1 n2 n3 n4 resto

Genere xn en el intervalo n  0,9 y las otras dos en el intervalo n  0,20 . A partir de ahora, utilice siempre la función conv para efectuar convoluciones.

3.2.1

Ejercicio 5: conmutatividad

Obtenga la señal y1 n  xn  h1 n y defina su vector de índices. Obtenga a continuación la señal

y 2 n  h1 n  xn y defina su vector de índices. Represente las cuatro señales involucradas sobre el

vector de índices de mayor longitud (en un mismo gráfico, como en los ejercicios anteriores), y verifique que y1 n  y 2 n . Si no se verificara, explique el motivo.

lOMoARcPSD

3.2.2

Ejercicio 6: distribución respecto de la suma

Compruebe que la convolución de la señal xn con un sistema cuya respuesta al impulso unidad sea

hn  h1 n  h2 n , es la misma que la suma de las señales resultantes xn  h1 n y xn  h2 n . Para

ello, represente en cada caso, en dos gráficos independientes, las señales involucradas (cinco en el primer caso y seis en el segundo), todas ellas sobre el vector de índices de mayor longitud.

lOMoARcPSD

lOMoARcPSD

lOMoARcPSD

3.2.3

Ejercicio 7: asociatividad

Sea un sistema S1 cuya relación entrada salida está definida por yn  (n  1)  xn , y otro sistema S2

totalmente caracterizado por hS 2  h1 n . El objetivo es ver si la propiedad asociativa de la convolución se verifica para estos dos sistemas, es decir, si:

xn hS1 n  hS 2 n  xn hS1 n hS 2 n Para obtener la señal resultante de las operaciones a la izquierda de la igualdad, proceda del siguiente modo:



 Obtenga la señal y n

aplicando directamente su expresión en función de la entrada, es decir

yn  ( n  1)  xn , en vez de aplicando la convolución.

 Obtenga la señal resultante w A n  yn  hS 2 n Para obtener la señal resultante de las operaciones a la derecha de la igualdad, proceda del siguiente modo:  Obtenga la respuesta al impulso unidad del sistema S1, es decir, obtenga la respuesta de este sistema al impulso unidad: hS1 n  (n  1)   n . Para ello defina  n en el mismo intervalo que lo estaba xn .  Obtenga la respuesta al impulso del sistema S1 en serie con S2, es decir hn  h S1 n hS 2 n . Observe que para ello tendrá que ampliar el rango de definición de hS1 n .

 Obtenga la respuesta de este nuevo sistema a la señal de entrada: w B n  xn  hn . Represente en cada caso, en dos gráficos independientes, las señales involucradas (cuatro en ambos casos), todas ellas sobre el vector de índices de mayor longitud. Compruebe que las señales w A n y w B n son idénticas. Si no lo fueran, explique el motivo.

No se cumplen las premisas de las SLI, por lo tanto su propiedad asociativa tampoco. ¿Qué premisas de los sistemas LTI no se cumplen?

lOMoARcPSD

lOMoARcPSD

lOMoARcPSD

Práctica 4: Series de Fourier

Grupo Puesto

Apellidos, nombre Apellidos, nombre

Fecha SOLUCION

El objetivo de esta práctica es profundizar en la respuesta de sistemas LTI, comprobar el comportamiento de estos sistemas ante señales exponenciales complejas, y desarrollar prácticamente varios de los conceptos relacionados con el Desarrollo en Serie de Fourier (DSF) de señales discretas periódicas. Para llevar a cabo la práctica, desarrolle cada ejercicio en un fichero de comandos ‘ejercicio_X.m’ separado (salvo cuando se le solicite desarrollar una función, en cuyo caso el fichero llevará el nombre de la función). Justo antes de finalizar la práctica, comprima los ficheros ‘.m’ generados en un único fichero ‘practica_4_Puesto_XX . zip’, conéctese al sistema de entrega de prácticas de la Intranet y entréguelo en el grupo que corresponda. Salvo que se le indique lo contrario en algún apartado concreto, no está permitido utilizar en los scripts las funciones de control de flujo del programa de MATLAB (for, if-else, etc.).

4.1 Exponenciales complejas como autofunciones de sistemas LTI 4.1.1

Ejercicio 1: sistemas LTI causales

El objetivo de este ejercicio es comprobar que las exponenciales complejas discretas son efectivamente autofunciones de los sistemas LTI. Para comprobarlo, este ejercicio está orientado a localizar los autovalores correspondientes a varias de estas funciones. Sea un sistema LTI causal definido por la siguiente relación entrada/salida:

y[n] − 0.25 y[n − 1] = x[n] + 0.9 x[n − 1] Suponiendo que se verifica la condición de reposo inicial para n < 0 , es posible obtener

analíticamente su respuesta al impulso, x[n] = δ [n] → y[n] = h[n] , aplicando recurrencia:

De la ecuación que describe el sistema, se desprende que y[n] = x[n] + 0.9 x[n − 1] + 0.25 y[n − 1] :

h[0] = y[0] = x[0] + 0.9 x[− 1] + 0.25 y[− 1] = 1 h[1] = y[1] = x[1] + 0.9 x[0] + 0.25 y[0] = 0.9 + 0.25 h[2] = y[2] = x[2] + 0.9 x[1] + 0.25 y[1] = 0.25 ⋅ (0.9 + 0.25)

h[3] = y[3] = x[3] + 0.9 x[2] + 0.25 y[2] = 0.25 2 ⋅ (0.9 + 0.25) … Deduzca la expresión general de h[n ] :

lOMoARcPSD

h[n ] =

1,  n −1 (0.9 + 0.25) * (0.25) 0 

n=0 n>0 n