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
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, xn 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 xt 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 xn . 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, xn , en el intervalo 3 n 11 , a través de un vector x y del vector de índices nx correspondiente: 2, 1, xn 1, 3, 0,
n0 n2 n3 n4 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 xn , defina en el mismo fichero ‘.m’ las siguientes señales: y1 n xn 2
y 2 n xn 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 ( xn ) 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 xn (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. 0n5 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 n0 n7 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 xn resto 0 1 0 n 3 hn resto 0 El objetivo es calcular yn xn hn . Para ello, genere las señales xn y hn en el intervalo
n 0,20 . Teniendo en cuenta que la señal xn sólo toma valor en un número finito de puntos, yn
puede escribirse: yn
xk hn - k x0 hn x1 hn - 1 ... x9 hn - 9 x10 hn - 10
k
Para obtener yn , 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 x5 hn 5 en el mismo intervalo que esté
definida hn 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 hn es válida porque hn 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 yn 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 xn , hn e yn , y dibuje esta última en la gráfica adjunta:
Indique cuál es la duración de la señal yn y en qué índice comienza. A la vista de la expresión
analítica de yn , 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 xn y hn :
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, hn 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 xn y las
lOMoARcPSD
nuevas señales hn e yn , y dibuje esta última en la gráfica adjunta, indicando claramente qué índices abarcan los valores no nulos de yn :
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 yn con las respectivas duraciones e índices de comienzo de las señales xn y hn :
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 xn 2
n2
u n 2
hn u n 2
Calcule yn xn hn 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 yn xn hn utilizando la función
conv
y evaluar la validez del resultado
cuando xn y hn 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 xn en el intervalo n 0,24 y la señal hn 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 xn y hn tienen longitud infinita, yn xn hn 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 yn yT n , y compruebe que sus deducciones se corresponden con lo observado. Modifique los intervalos a que se han truncado las señales xn y hn para comprobar que sus conclusiones son correctas. Explique el resultado obtenido:
lOMoARcPSD
3.2 Operaciones sobre sistemas LTI discretos Sean las señales:
1, xn 0,
0n4 resto
,
1, 1, h1 n 3, 1, 0,
n0 n 1 n2, n4 resto
2, 5, h2 n 4, 1, 0,
n 1 n2 n3 n4 resto
Genere xn 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 xn h1 n y defina su vector de índices. Obtenga a continuación la señal
y 2 n h1 n xn 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 xn con un sistema cuya respuesta al impulso unidad sea
hn h1 n h2 n , es la misma que la suma de las señales resultantes xn h1 n y xn 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 yn (n 1) xn , 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:
xn hS1 n hS 2 n xn 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
yn ( n 1) xn , en vez de aplicando la convolución.
Obtenga la señal resultante w A n yn 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 xn . Obtenga la respuesta al impulso del sistema S1 en serie con S2, es decir hn 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 xn hn . 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