Practica 1
Practica 1
Practica 1
Introduccin o
Esta prctica se centra en la generacin con MATLAB de algunas seales bsicas de tiempo a o n a discreto. Estas seales, usadas en el tratamiento digital de seales, son el impulso, (n), las n n exponenciales de la forma, an u(n), las ondas sinusoidales y su generalizacin a exponenciales o complejas. Puesto que el unico tipo posible de dato numrico en MATLAB es la matriz M N , las e seales deben representarse con vectores: ya sea como matrices M 1 si son vectores columna, n o como matrices 1 N si son vectores la. En MATLAB todas las seales deben ser de longitud n nita. Esto contrasta con la solucin anal o tica de los problemas, donde una frmula matemtica o a n u(n). puede representar seales de longitud innita: por ejemplo, una exponencial decreciente a n Una segunda cuestin es asociar al vector de seal los o n ndices del dominio temporal. MATLAB asume por defecto como ndices desde 1 a N , siendo N la longitud de dicho vector. Mientras que el vector es normalmente el resultado de muestrear una seal sobre algn dominio donde los n u ndices van desde 0 a N 1; o quiz, el muestreo comience en algn a u ndice arbitrario que sea negativo; por ejemplo, N . La informacin sobre el dominio de muestreo no se puede ligar a o los valores de la seal contenidos en el vector de seal. Por ello, estamos obligados a conservar n n separadas ambas informaciones. Normalmente, esto no ser un problema hasta que se represente a grcamente la seal, en tal caso habr que etiquetar adecuadamente el eje horizontal. a n a Una ultima cuestin que se abordar es el uso de la notacin vectorial de MATLAB para o a o generar seales. Una potencia signicativa del entorno MATLAB es su notacin de alto nivel n o para operar con vectores: los bucles for son casi siempre innecesarios. Cuando generemos algunas seales, por ejemplo, una onda sinusoidal, es preferible aplicar la funcin correspondiente. n o Para este ejemplo concreto ser la funcin sin, a un vector argumento formado con todas las a o muestras temporales. En la prctica trataremos con algunas de las seales que nos encontraremos a n habitualmente en tratamiento digital de la seal: impulsos, trenes de impulsos, exponenciales y n sinusoides.
1.1
Recomendaciones
La representacin grca en MATLAB de seales de tiempo discreto se realiza con la funcin o a n o stem. El siguiente cdigo de MATLAB genera 31 puntos de una sinusoide de tiempo discreto: o nn = 0:30; sinus = sin(nn/2 +1); Observe que el valor de tiempo discreto n = 0 se almacena como la primera muestra de nn, es decir: nn(1), debido al esquema que utiliza MATLAB para asociar ndices; del mismo modo que sinus(1) es el primer valor de la sinusoide almacenada en dicho vector. Cuando representemos grcamente la onda sinusoidal utilizaremos la funcin stem, funcin que realiza la representacin a o o o grca de la seal de tiempo discreto vista comnmente en los libros de tratamiento digital de a n u la seal: stem(nn,sinus);. n 1
El primer vector argumento debe generar correctamente el eje n. Compare con stem(sinus). En qu se diferencian las dos grcas? e a
2
2.1
Se ales Bsicas n a
Impulsos
Cuando creamos un impulso en MATLAB debemos decidir qu intervalo de la secuencia nos e interesa. Si el impulso (n) se utiliza para excitar un sistema LTI causal, y suponiendo que necesitamos ver L puntos, desde n = 0 a n = L 1 podemos crear este impulso con el siguiente cdigo de MATLAB, en el cual se ha tomado L = 31: o L = 31; nn = 0 : (L-1); imp = zeros(L,1); imp(1) = 1; Observe que a la primera muestra, que se corresponde con n = 0, se accede con imp(1), debido al esquema de asignacin de o ndices de MATLAB. Se pide: 1. Genere y represente grcamente las siguientes secuencias: a x1 (n) = 0.9(n 5) x2 (n) = 0.8(n) x3 (n) = 1.5(n 333) x4 (n) = 4.5(n + 7) 1 n 20 15 n 15 300 n 350 10 n 0
En cada caso el eje horizontal, n, debe extenderse solamente sobre el intervalo indicado y numerarse de manera adecuada. Cada secuencia deber visualizarse, mediante stem, como a una seal de tiempo discreto. n 2. El siguiente cdigo de MATLAB crear una seal repetitiva en el vector x: o a n x = [0; 1; 1; 0; 0; 0] * ones(1,7); x = x(:); size(x); % Devuelve la longitud de la se~al n Represente x para ver su forma y, a continuacin, obtenga una frmula matemtica similar o o a a (2) que describa esta seal. Qu hace la instruccin x(:)? n e o 3. Los impulsos desplazados, (n n0 ), pueden usarse para construir trenes de impulsos ponderados, con per odo P y longitud total M P : s(n) =
M 1 l=0
Al (n lP n0 )
(2)
Si los pesos, Al , son todos iguales el tren de impulsos es peridico con per o odo P . Genere y represente grcamente un tren de impulsos peridicos, cuyo per a o odo sea P = 5, longitud 50, n0 = 0 y Al = 3 para l = 0, , M 1. Con qu valor de M se consigue esto? La e seal debe comenzar en n = 0. Intente utilizar una o dos operaciones con vectores en vez n de un lazo for, para situar los impulsos. Cuntos impulsos contiene esta seal de longitud a n nita? 2
2.2
Sinusoides
Otra seal bsica es la onda cosenoidal. En general, se tendrn tres parmetros bsicos para n a a a a describir completamente una seal sinusoidal: la amplitud (A), la frecuencia (w) y la fase (). n x(n) = Acos(w0 n + ) Se pide: 1. Genere y represente grcamente cada una de las siguientes secuencias. Utilice la capacidad a vectorial de MATLAB para hacerlo con la llamada a la funcin que realiza el coseno (o seno) o de un argumento vector. En cada caso, el eje horizontal, n, se extender solamente sobre el a intervalo indicado y deber ser numerado adecuadamente. Cada secuencia se representar a a aplicando la funcin stem. o
x1 (n) = sen( 17 n) x2 (n) = sen( 17 n) x3 (n) = sen(3n + ) 2 x4 (n) = cos( n) 23
(3)
0 n 25 15 n 25 10 n 11 0 n 50
Observando las grcas anteriores, obtenga la frmula sencilla para x3 (n), que no haga a o uso de funciones trigonomtricas. Es esta secuencia peridica? Por qu? Utilizando dos e o e seales iguales a (2), qu valores de Al , M y P tendr que considerar en stas para que n e a e x3 (n) = s(n)? 2. Escriba una funcin en MATLAB (help function para ver su sintaxis) que genere una o sinusoide de longitud nita. La funcin necesitar un total de cinco argumentos de entrada: o a tres para los parmetros (amplitud, frecuencia y fase) y dos ms para especicar el primer a a y el ultimo valor del ndice n de la secuencia de longitud nita. La funcin deber devolver o a un vector columna conteniendo los valores de la sinusoide y se llamar seno.m. Esta funcin a o se comprobar representando grcamente los resultados que se obtienen para diferentes a a parmetros de entrada. En concreto, compruebe la funcin con la seal 2sen(n/11), para a o n 20 n 20. 3. Vuelva a escribir la funcin del apartado anterior para que devuelva dos argumentos: un o vector de ndices en el intervalo de n y un vector con los valores de la seal correspondientes n a esos ndices. Llame a dicha funcin seno2.m. o
2.3
Exponenciales
La exponencial decreciente es una seal bsica en tratamiento digital de seal porque aparece n a n como solucin a las ecuaciones en diferencias de coecientes constantes. o Se pide: 1. Estudie la funcin de MATLAB presentada a continuacin para ver cmo se genera una o o o seal exponencial de tiempo discreto. Seguidamente utilice la funcin para representar n o grcamente la exponencial x(n) = (0.9)n , en el intervalo n = 0, 1, 2, 3, , 20. a function % GENEXP % % % % % y=genexp(c,n0,L) genera una se~al exponencial: c ^ n n uso: y = genexp(c,n0,L) c: entrada escalar que da la razn entre trminos o e n0: instante de comienzo (entero) L: longitud de la se~al generada n y: se~al de salida Y(1:L) n 3
if (L <= 0) error(GENEXP: longitud no positiva) end nn = n0 + [0:L-1].; % vector de ndices y = c .^ nn; Observe que los comentarios que aparecen despus de la denicin de la funcin, se corree o o sponden con el texto que se obtiene al hacer un help de sta. e 2. En muchas ocasiones hay que sumar los valores de la secuencia exponencial n u(n). Para un intervalo nito esta suma tiene una expresin compacta conocida: o
L1
n =
n=0
1 L 1
para = 1
(4)
Utilice la funcin del apartado anterior para generar una exponencial y despus sume sus o e valores (funcin sum). Compare el resultado con el que se obtiene al aplicar la ecuacin (4). o o 3. Una razn por la que la secuencia exponencial aparece con tanta frecuencia en tratamiento o digital de seal es que el desplazamiento en el tiempo no cambia el carcter de esta seal. n a n Demuestre que las exponenciales de longitud nita satisfacen la siguiente relacin: o y(n) = y(n 1) en el intervalo 0 n L 1 donde y(n) = n . Para ello, compare los vectores y(2 : L) y y(1 : L 1) (para un valor de arbitrario). Qu representan los vectores y(2 : L) y y(1 : L 1)? Cuando desplace seales de longitud e n nita en MATLAB, deber tener cuidado con los instantes nales porque no se aadirn a n a ceros automticamente (zero-padding). a 4. Otra forma de generar una secuencia exponencial es aplicando una frmula recurrente o dada por una ecuacin en diferencias. Cuando la entrada x(n) es un impulso la seal o n n u(n) es la solucin de la siguiente ecuacin en diferencias: y(n) = o o y(n) = x(n) + y(n 1) condicin inicial: y(1) = 0 o (6) (5)
Puesto que se ha tomado una ecuacin en diferencias recurrente en forma causal1 se necesita o la condicin para n = 1. En MATLAB la funcin filter implementa una ecuacin en o o o diferencias como la de (6). Utilice filter para generar la misma seal que en el primer n apartado de esta subseccin, es decir, = 0.9. o
Se ales Complejas n
Aunque las seales por naturaleza tienen amplitudes reales, es muy frecuente que para generarlas, n procesarlas e interpretarlas sean transformadas en seales de amplitudes complejas. Esto se hace n combinando seales en parejas. Como se hace con las partes real e imaginaria se puede procesar n con otras seales de valores complejos usando las leyes de aritmtica compleja. En muchos n e sistemas de tratamiento de seal es importante el uso de estas parejas de seales, especialmente n n aquellos que implican modulacin. o En MATLAB, las funciones real e imag extraen las partes real e imaginaria de un nmero u complejo. Cuando representamos grcamente un vector complejo, las representaciones por dea fecto de plot y stem pueden llevar a confusiones. Si z es un complejo, entonces plot(z) ser a
1
la representacin grca de la parte imaginaria en funcin de la parte real y plot(n,z) ser la o a o a representacin de la parte real de z en funcin de n. Sin embargo, stem(z) dibujar unicamente o o a la parte real. Si desea ver simultneamente las representaciones de las partes real e imaginaria, a los comandos subplot antepuestos a cada comando stem, forzarn a que las representaciones a se realicen en la misma ventana, pero en grcas distintas. Observe el resultado del siguiente a cdigo: o % Secuencia nn = 0:25; xx = exp(j*nn / 3);
% Representacin o subplot(211) stem(nn,real(xx)) title(Parte real) xlabel(Indice (n)) subplot(212) stem(nn,imag(xx)) title(Parte imaginaria) xlabel(Indice (n)) Otra forma de representar los nmeros complejos es mediante su mdulo y su fase. Para esto, u o MATLAB dispone de las instrucciones abs y angle. Haciendo uso de instrucciones subplot represente, en una misma ventana pero en cuatro grcas distintas, la parte real e imaginaria y a su mdulo y su fase de la secuencia generada en el cdigo anterior. o o IMPORTANTE: Tenga en cuenta que matlab utiliza i y/o j para representar el nmero u complejo 1. Si dene variables con estos nombres, la gestin de nmeros complejos de MATo u LAB fallar sin dar ningn tipo de error. a u
3.1
Exponenciales Complejas
La notacin de la exponencial real puede extenderse a las seales exponenciales de valores como n plejos, las cuales engloban a las seales seno y coseno. Estas seales forman la base de las n n transformadas de Fourier. Se pide: 1. En MATLAB una seal compleja es una extensin natural de la notacin de la seccin n o o o anterior. Por tanto, para generar estas seales, el parmetro a puede tomarse como un n a nmero complejo. Recuerde la frmula de Euler para la exponencial compleja: u o x(n) = (z0 )n = r n ejn = r n cos(n) +j
parte real
r n sen(n)
parte imaginaria
(7)
donde z0 = rej . Use esta relacin para generar una exponencial compleja con mdulo, o o r = 0.9, y fase, = 45o . Represente las partes real e imaginaria de x(n) en el intervalo 0 n 20. Observe como el ngulo de controla la frecuencia de las sinusoides. a
Esta seccin muestra uno de los principios bsicos del proceso de muestreo: el solapamiento (o o a aliasing). Este se produce debido a una mala eleccin de la frecuencia de muestreo. Para ver sus o efectos, se estudiar el muestreo de seales sinusoidales. a n 5
Considere una seal sinusoidal de tiempo continuo cuya ecuacin es n o x(t) = sen(2f0 t + ) (8)
podemos obtener una seal de tiempo discreto muestreando x(t) a la frecuencia de muestreo n fs = 1/Ts : x(n) = x(t)|t=nTs = x(t)|t=n/fs = sen(2 f0 n + ) fs (9)
Observe que n representa la muestra correspondiente al instante de tiempo nTs . Si hacemos la representacin de x(n) para diferentes valores de f0 y fs se puede ver el efecto o del solapamiento en caso de no cumplirse el teorema de muestreo. Recuerde que este teorema dice que fs 2f0 para evitar el fenmeno de solapamiento. Para los siguientes apartados jaremos la o frecuencia de muestreo en fs = 8Khz. Se pide: 1. Haga la representacin de una onda sinusoidal muestreada. La frecuencia de la onda sinuo soidal ser de 300Hz, tomndose las muestras correspondientes a 10mseg. Qu longitud a a e tendr la seal discreta?. La fase puede ser cualquiera (por ejemplo = 0). Represente, a n con la funcin stem, la seal de tiempo discreto que se obtiene, etiquetando el eje horizontal o n en unidades de tiempo. Analizando la grca obtenida, se apreciar con facilidad que la a a envolvente de la seal discreta es una sinusoide, debido a que su vista tiende a hacer una n reconstruccin de la sinusoide. o Si es necesario, haga la representacin con plot. En este caso, los puntos se conectan con o l neas rectas, resultando obvio el comportamiento sinusoidal. Conectar las muestras de la seal con l n neas rectas es una forma de reconstruccin de seal, obtenindose una seal de o n e n tiempo continuo a partir de las muestras de una seal de tiempo discreto. Tenga en cuenta n que sta no es la reconstruccin ideal de una seal a partir de sus muestras, pero en la e o n mayor de las ocasiones ser suciente. a a 2. Usando stem al igual que en el anterior apartado, haga una serie de representaciones con las frecuencias f0 = 100Hz, f0 = 225Hz, f0 = 350Hz y f0 = 475Hz. Observe que la frecuencia de la sinusoide se va incrementando, como era de esperar. Utilice un subplot para que aparezcan las cuatro representaciones en una misma ventana. Es interesante escuchar2 la seal resultante para comprender mejor el signicado de la n frecuencia de la sinusoide. Para ello, puede usar la instruccin sound (ver help sound) o o generar un chero de audio .wav (wavwrite, ver help wavwrite) o .au (auwrite, ver help auwrite) y reproducirlo posteriormente. 3. De la misma forma que en el apartado anterior, realice una serie de representaciones variando la frecuencia de la sinusoide con f0 = 7525Hz, f0 = 7650Hz, f0 = 7775Hz y f0 = 7900Hz. Qu pasa ahora con la frecuencia aparente de las sinusoides? En caso de e haber cursado la asignatura medios de transmisin, sabe explicar el motivo? o
La fecha de depsito de la prctica ser el d 18 de marzo. Se debern depositar los cheros o a a a a *.m de los programas de matlab en un nuevo directorio del servidor subversion (SVN), llamado Practica 1, siguiendo las instrucciones de la WIKI de la Facultad https://wiki.fic.udc.es/cecafi%3Asvn%3Aindice
2
CADA APARTADO DEBE REALIZARSE EN SUBDIRECTORIOS DIFERENTES CON EL NOMBRE DE ESTE. NO SE ACEPTAN FICHEROS COMPRIMIDOS. Cada alumno ha de efectuar este depsito en su directorio correspondiente y conservar una o copia de todos los programas para su evaluacin el d del examen de prcticas. o a a