Vous êtes sur la page 1sur 52

Mdulo de Actualizacin Anlisis de Seales -MATLAB

UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA VICE-RECTORADO ACADEMICO DECANATO DE POSTGRADO

2012

Programa del Modulo de Actualizacin Anlisis de Seales utilizando MatLab Maestra en Ingeniera Electrnica

Profesor(a): Ing. Itza J. Medina R. M.Sc. Ingeniera Electrnica.

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Fundamentos de Anlisis de Seales.

2012

Seales: Cantidades fsicas detectables o variables por medio de las cuales se puede transmitir informacin. Ejemplos de seales: Voz Humana. Imgenes de Televisin. Seales Elctricas: Seales de Corriente o Voltaje variables en el tiempo Facilmente y Simplemente representadas. Amplio rango de Formas, Amplitudes, Duracin en el tiempo y Comportamiento. Muchas variables fsicas, tales como Temperatura, Humedad, Velocidad del Viento, Intensidad de la Luz pueden ser transformadas, usando transductores, en Seales Elctricas. Temperatura Atmosfrica. Emisiones Radiales.

Aplicaciones que involucran seales Sistemas de radar: pulsos de microondas de alta energa. Sistemas de comunicaciones: seales portadoras de alta frecuencia. Sistemas de potencia: seales de alto voltaje Sistemas de computacin: millones de pulso por segundo

Dominios de representacin de una seal Representacin en el dominio del tiempo Representacin en el dominio de la frecuencia

Mtodos de Transformacin Seales Continuas

Dominio del Tiempo

Series de Fourier Transformadas de Fourier Transformada Z

Dominio de la Frecuencia

Seales Discretas

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Tipos de Seales Seales en tiempo continuo: Uno de los dos tipos bsicos de seales, para las cuales la variable independiente es continua, es decir son seales que estn definidas para un intervalo continuo de valores de su variable independiente. Para nombrar este tipo de seales se usan letras minsculas y el smbolo "t" para denotar la variable de tiempo contnuo. Ejemplos: Una seal de voz como funcin del tiempo Presin atmosfrica en funcin de la altura Nivel, Temperatura, Caudal como una funcin del tiempo

Representacin Grfica: Una Seal de voz como una funcin del tiempo.

Seales en tiempo discreto: El otro tipo bsico de seales, para el cual la variable independiente (tiempo) es discreta, es decir que estn definidas para un conjunto de valores discretos de su variable independiente. Para nombrar este tipo de seales se usan letras minsculas y el smbolo "n" para denotar la
variable de tiempo discreto.

Ejemplos: Los valores semanales del ndice burstil Dow Jones Los valores de ingresos promedios de la poblacin segn su nivel de instruccin

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Representacin Grfica: Los valores semanales del ndice burstil "Dow Jones".

Seales Muestreadas: Bajo ciertas condiciones una seal contnua en el tiempo puede ser completamente representada y recuperada a partir del conocimiento de sus valores instantneos o muestras igualmente espaciadas en el tiempo.

Proceso de Muestreo: Especie de "puente" entre las seales contnuas y las seales de tiempo discreto, permitiendo bajo ciertas condiciones, representar una seal contnua por medio de una seal discreta, que consiste en sus muestras igualmente espaciadas (T=perodo de muestreo). Permite procesar la seal discreta (x[n]), lo cual es muchas veces ms flexible y preferible por las caractersticas de los sistemas digitales y discretos (menos costosos, programables, fcilmente reproducibles, etc.), para luego de procesada devolver el cambio y volver a obtener una seal de tiempo contnuo.

Muestreo

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Seales Peridicas y Aperidicas: x( t ) = x( t + nT ) x[ n ] = x[ n + kN ]

Cualquier seal que cumple con la condicin x( t ) = x( t + nT ), con n = 1, 2, 3, ... donde T es una constante conocida como perodo fundamental, es clasificada como una seal peridica. Si una seal x( t ) no es peridica, se clasifica entonces como una seal aperidica. Si se trata de una seal discreta, la condicin x[ n ] = x[ n + kN ], con k = 1, 2, 3, ... determina la periodicidad o no de la seal. El valor entero constante N es entonces el perodo fundamental de la seal. El ejemplo prctico ms familiar son las seales sinusoidales reales, cuya expresin matemtica en funcin del tiempo sera:

Una seal x( t ), peridica, con perodo fundamental T, tambin es peridica con perodo 2T, 3T, 4T, ... La frecuencia fundamental, en radianes/seg, est relacionada con el perodo fundamental por:

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Ejemplo: x( t ) = 0.8 * sen( pi * t )

Ejemplo: x( t ) = 0.8 * [ g(0,0.5) - g(0.5,1) ] ; T=1

Ejemplo: x[ n ] = 0.9 * sen( 6 * pi * n / 7 )

Ejemplo: x[ n ] = { .8, .8, .8, .8, 0, 0, 0, 0 } ; N=8

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Acerca de MatLab MatLab es un sistema interactivo, basado en estructura matricial, y se ha convertido en la herramienta ideal de cientficos e ingenieros para el clculo numrico y la visualizacin en anlisis y solucin de problemas en mltiples reas del conocimiento. Su fortaleza principal estriba en la capacidad de resolver problemas numricos complejos, prcticamente en fracciones del tiempo que tomaran otros lenguajes como Fortran y C. Otra caracterstica importante del MatLab es su facilidad de uso y la posibilidad de desarrollar rutinas de programacin, sobre la base del gran nmero de comandos y funciones incorporadas, que puede ser extendida a la creacin de nuevas funciones, que pueden incluso ser almacenadas y compiladas dentro de un toolbox generado por el usuario. En el campo del Procesamiento Digital de Seales, MatLab se ha convertido en la herramienta se software preferida, no solo por su potencialidad de clculo sino por el gran nmero de funciones desarrolladas en el ToolBox de seales y su gran capacidad de visualizacin, que permite con pocas instrucciones y casi instantneamente, visualizar los resultados necesarios para el tratamiento de seales discretas. Con el advenimiento de la Edicin del Estudiante, su popularidad se ha incrementado en forma considerable. Sin embargo, esta versin en el caso de aplicaciones DSP, puede presentar limitaciones en el tamao mximo de los arreglos vectoriales, que se utilizan para representar los valores de las muestras de una seal discreta. Por esta razn, en los ejemplos desarrollados en este material se ha utilizado una versin profesional, que tiene una capacidad prcticamente limitada solo por la memoria del computador en el cual se ha instalado. 1.1. Operaciones tpicas del procesamiento de seales Varios tipos de operaciones caracterizan el procesamiento de seales. En el caso de seales analgicas, la mayora de estas se realizan en el dominio del tiempo, mientras en el caso de seales dicretas, se desarrollan tanto en el dominio del tiempo, como en el dominio de la frecuencia. En cada caso, las operaciones deseadas se implementan por combinacin de operaciones elementales. Algunas de estas operaciones elementales, que pueden ser desarrolladas en tiempo real, cerca del tiempo real o fuera de lnea, tanto en el dominio continuo como en el dominio discreto, son: Operaciones elementales en el dominio del tiempo: escalamiento (amplificacin o atenuacin ), integracin, diferenciacin, desplazamiento real, suma, producto Filtrado: filtros pasa-bajo, filtros pasa-alto, filtros pasa-banda Generacin de seales: seales reales y seales complejas Modulacin y demodulacin Multiplexin y demultiplexin.

1.2. Ejemplos tpicos de seales 7

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Son mltiples los ejemplos que podran enumerarse en relacin con las seales tpicas que se utilizan en el procesamiento de seales, que pueden ir desde las seales elementales que se utilizan en el anlisis, hasta seales ms complejas como las imgenes que encontramos en el campo de las comunicaciones digitales. Seal tpica de voz

Seal tpica Ssmica

Senal tipica de una imagen

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

En la figura anterior se presenta un ejemplo de seales procesadas con la ayuda del programa MatLab, a partir de datos que fueron almacenados en archivos con formato binario, utilizando las funciones bsicas como fopen(), fread(), fclose(), plot(), image(). En aplicaciones prcticas podemos encontrar seales tpicas asociadas con: electrocardiogramas, electroencefalogramas, reconocimiento de voz, sonido musical, comunicacin digital, entre otros. 1.3. Clasificacin de las seales Desde el punto de vista del procesamiento de seales, las aplicaciones prcticas pueden clasificarse en dos grandes categoras: Seales analgicas Seales digitales

Una seal analgica se caracteriza porque su magnitud y tiempo varan continuamente. Por otra parte, en una seal digital su magnitud y tiempo varan en forma discreta. Considerando las caractersticas de la variable independiente (tiempo), se pueden reconocer como: Seales en tiempo continuo Seales en tiempo discreto

Las seales en tiempo continuo o seales analgicas, definidas para todos los valores de tiempo, pueden tomar cualquier valor en el intervalo . Generalmente se representa como x(t). Las seales en tiempo discreto estn definidas solo para valores discretos de tiempo y su magnitud puede tomar cualquier valor en cada instante. Matemticamente se puede representar como una secuencia de nmeros reales o complejo. En las aplicaciones prcticas, estas seales pueden ser el producto de: Seales muestreadas Seales discretas

Una seal muestreada se obtiene por la observacin y medicin de una seal continua, a intervalos definidos de tiempo, que pueden ser igualmente espaciados o no. Este proceso se reconoce como muestreo peridico o uniforme de la seal continua, y para efectos prcticos consideramos que se efecta a intervalos fijos de tiempo T (s), reconocido como el periodo o intervalo de muestreo. Su valor reciproco 1/T se denomina velocidad o frecuencia de muestreo (Fs) expresado en muestras/segundo o Hz. Para representar una seal muestreada utilizamos la notacin x(nT), donde n puede tomar valores enteros. Una seal discreta es una secuencia de valores, cada uno de los cuales est referido un instante de tiempo, representado por un valor discreto entero. Ejemplos de seales discretas pueden ser: la cuota mensual de amortizacin de un prstamo, la edad en anos de una persona, entre otras. Para representar una seal discreta de duracin finita, utilizamos la siguiente notacin:

Donde la flecha

indica la muestra para el instante de tiempo n=0. 9

Mdulo de Actualizacin Anlisis de Seales -MATLAB


1.4. Seales en tiempo continuo y discreto en MatLab.

2012

El objeto bsico usado en MATLAB es una matriz numrica con la posibilidad de almacenar nmeros complejos. Los datos encontrados en el estudio de seales y sistemas son siempre, muy bien representados en forma de matrices. En esta seccin se usar MATLAB para la generacin de seales elementales como lo son las seales exponenciales, senoidales, etc. El ToolBox de procesamiento de seales de MATLAB posee una larga variedad de funciones para la generacin de seales, estas seales requieren de una representacin vectorial de la variable tiempo, de manera continua o discreta. Para realizar una simulacin de un intervalo continuo, se usa un vector de valores discretos con un intervalo de muestreo muy pequeo. El siguiente comando genera un vector llamado t de valores que representan la variable tiempo, con un intervalo de muestreo de 1ms entre 0 y 1seg. t = 0:0.001:1; Para generar un vector llamado n de valores que representan la variable tiempo para una seal discreta en el intervalo de 0 a 1000, se puede usar el siguiente comando. n = 0:1000; Despus de creado el vector que representa la variable tiempo, es posible iniciar el desarrollo de alguna seal de inters. En MATLAB una seal discreta en el tiempo se representa exactamente, porque los valores de la seal son representados como los elementos de un vector. Sin embargo las seales de tiempo continuo en MATLAB son tan solo aproximaciones. La aproximacin consiste de un vector cuyos elementos son muestras de la verdadera seal de tiempo continuo. Cuando se usa esta tcnica para la representacin de seales continuas es importante escoger el intervalo de muestreo lo suficientemente pequeo para asegurar que las muestras capturan todos los detalles de la seal. SEALES PERIODICAS La generacin de seales peridicas tales como ondas cuadradas y triangulares es una actividad muy fcil de realizar en MATLAB. Consideremos primero la generacin de una onda cuadrada de amplitud A, frecuencia fundamental w (medida en radianes por segundo) y ciclo til rho. Recordemos que el ciclo til es la fraccin de cada periodo en donde la seal es positiva. Para generar dicha seal se puede usar el siguiente conjunto de comandos: >> A = 1; >> w = 10 * pi; >> rho = 0.5; 10

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>> t = 0:0.001:1; >> sq = A*square(w*t+rho); >> plot(t,sq); El resultado se puede observar en la siguiente grfica:

2012

En la segunda lnea, pi es una funcin interna de Matlab que calcula el nmero ms cercano a la constante PI en formato de coma flotante. El ltimo comando es usado para ver la seal generada. El comando plot dibuja lneas conectando los valores sucesivos de la seal y as da la apariencia de una seal en tiempo continuo. Consideremos ahora la generacin de una onda triangular de amplitud A, frecuencia fundamental w y ancho Wdt . El periodo de la onda triangular ser T con el mximo valor de la seal ocurriendo en t = WT . El comando bsico para generar esta seal es: A * sawtooth(w * t + Wdt) El listado completo de comandos sera: >> A = 1; >> w = 10 * pi; >> Wdt = 0.5; >> t = 0:0.001:1; >> tri = A*sawtooth(w * t + Wdt); >> plot(t,tri); El resultado se puede visualizar en la siguiente grfica.

11

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Como se menciono anteriormente, una seal generada en MATLAB es inherentemente de naturaleza discreta. Para visualizar una seal en tiempo discreto se puede hacer uso del comando stem. Especficamente stem( n , x ), bosqueja los datos contenidos en el vector x como una seal de tiempo discreto con los valores de tiempo definidos por el vector n. Los vectores n y x deben tener dimensiones compatibles, es decir deben tener el mismo nmero de elementos. El siguiente ejemplo genera una seal cuadrada en tiempo discreto de amplitud igual a la unidad, ciclo til igual a 50% y una frecuencia angular igual a pi/4: >> A = 1; >> omega = pi / 4; >> rho = 0.5; >>n = -10:10; >>x = A*square(omega*n +rho); >>stem(n,x); El resultado se puede ver en la siguiente grfica:

12

Mdulo de Actualizacin Anlisis de Seales -MATLAB


SEALES EXPONENCIALES

2012

Las seales exponenciales se pueden clasificar segn su comportamiento en decrecientes y crecientes. El comando en MATLAB para generar una seal exponencial decreciente es: B * exp(-a*t); Para generar una seal exponencial creciente se usa el comando: B * exp( a * t); En ambos casos el parmetro a es positivo. El siguiente ejemplo muestra la generacin de una seal exponencial decreciente: >> B = 5; >> a = 6; >> t = 0:0.001:1; >> x = B * exp( -a * t ); % seal exponencial decreciente. >> plot( t, x ); Siendo el resultado como sigue:

Para la generacin de una seal exponencial creciente se puede usar el siguiente ejemplo: >> B = 1; >> a = 5; >> t = 0:0.001:1; >> x = B * exp( a * t ); >> plot( t, x ) ;

13

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Existen casos particulares en los que la base de la operacin de exponenciacin no es el nmero irracional e, puede ser cualquier otro nmero. Para estos casos se usa una notacin diferente la cual esta basada en la utilizacin del smbolo ^. Observando el ejemplo que sigue se nota que r es un nmero mientras que n es un vector, por lo tanto se usa una combinacin del smbolo exponenciacin con el carcter . Lo cual significa que a cada valor del vector le ser aplicada la funcin. El siguiente ejemplo genera la seal:

>> B = 1; >> r = 0.85; >> n = -10:10; >> x = B * r .^ n; >> stem( n , x );

14

Mdulo de Actualizacin Anlisis de Seales -MATLAB


SEALES SENOSOIDALES.

2012

MATLAB tambin contiene funciones trigonomtricas que pueden ser usadas para generar seales senosoidales. Una seal coseno de amplitud A, frecuencia w0 (medida en radianes por segundo) y ngulo de fase phi (en radianes) se obtiene usando el comando: A * cos ( w0 * t + phi); Alternativamente se puede usar la funcin seno para generar una seal senosoidal usando el siguiente comando: A * sin ( w0 * t + phi ); En seguida se muestran ejemplos para cada uno de las seales respectivamente: >> A = 4; >> w0= 20 * pi; >> phi = pi / 6; >> t = 0:0.001:1; >> coseno = A * cos( w0 * t + phi); >> plot(t,coseno) ;

>> A = 0.5; >> w0 = 20 * pi; >> phi = pi / 2; >> t = 0:0.001:1; >> seno = A * sin( w0 * t + phi); >> plot(t,seno); 15

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

SEALES SENOISOIDALES CON AMORTIGUACIN EXPONENCIAL. En todos los comandos de generacin de seales descritos anteriormente, se ha generado la amplitud deseada de las seales, realizando una multiplicacin por un escalar A. Esta operacin se describe usando el smbolo asterisco *. Supongamos que se desea multiplicar una seal senosoidal por una seal exponencial para producir como resultado una seal con amortiguacin exponencial. La siguiente ecuacin describe mejor el supuesto caso:

Debido a que tanto la componente senosoidal de la seal como la exponencial son vectores, el procedimiento para la generacin de la seal final requiere de una multiplicacin de dos vectores elemento por elemento. En MATLAB este tipo de multiplicacin se representa usando el smbolo punto (.) seguido por el smbolo asterisco (*). As el comando para generar la ecuacin anterior sera; A * sin( w0 * t + phi) .* exp ( -a * t); Y un ejemplo completo sera: >> A = 60; >> w0 = 20 * pi; >> phi = 0; >> a = 6; >> expsen = A * sin( w0 * t + phi) .* exp ( -a * t); >>plot(t,expsen); Dando como resultado la siguiente grfica: 16

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

La versin discreta de la misma seal se puede obtener haciendo uso de los comandos mostrados anteriormente de la siguiente manera:

>> A = 10; >> a = -0.1; >> w0 = 2 * pi / 12; >> phi = 0; >> n = -10 : 10; >> x = A * sin( w0 * n + phi); >> y = exp( a * n); >> z = x .* y; >> stem(n,z)

17

Mdulo de Actualizacin Anlisis de Seales -MATLAB


SEALES IMPULSO, PASO Y RAMPA.

2012

En MATLAB, el comando ones(M, N) genera una matriz de unos de tamao M x N, y el comando zeros(M, N) es una matriz de ceros del mismo tamao. Se puede hacer uso de estas dos matrices para generar dos seales comnmente usadas.

Seal Paso:

Una seal paso de amplitud uno, puede ser generada con el siguiente comando. U = [zeros(1, 10), ones(1, 11)]; Para la versin continua creamos un vector que represente el tiempo el cual tenga muestras de un intervalo separados por valores muy pequeos mientras que para la representacin de esta seal en tiempo discreto creamos un vector que represente el tiempo el cual debe tener valores separados por una unidad. Los comandos y los resultados para ambos tipos de seal se muestran a continuacin: >> u=[zeros(1,10),ones(1,11)]; >> t=-1:0.1:1; >> plot(t,u)

>> u=[zeros(1,10), ones(1,11)]; >> n=-10:10; >> stem(n,u)

18

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

De los comandos anteriores es de notar que para poder usar las funciones plot() y stem(), es requisito que los vectores (t y u) (n y u) tengan iguales dimensiones. Por esta razn el vector u se forma como una composicin de diez ceros y 11 unos, debido a que los arreglos t y n, tienen dimensin 21 dado que incluyen un elemento central el cual es el nmero cero. Para probar este hecho, se puede hacer uso de otra funcin de MATLAB llamada size() que devuelve como resultado un vector con las dimensiones de la matriz que se le pasa como parmetro as: >> size(n) ans = 1 21

>> size(u) ans = 1 21

>> size(t) ans = 1 21

Seal Impulso:

La versin discreta de la seal impulso se puede tambin generar con ayuda de las funciones zeros() y ones(), realizando una composicin como sigue:

>> delta = [ zeros( 1 ,10 ), 1 , zeros( 1 ,10 ) ]; >> n = -10:10; >> stem(n,delta);

19

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Una versin continua podra evidentemente generarse usando la misma tcnica que se us en el apartado anterior, sin embargo es necesario aumentar el nmero de muestras a fin de maximizar la pendiente de la seal, en seguida se vern dos ejemplos con diferentes nmero de muestras en el mismo intervalo de tiempo, como se puede ver la correspondencia entre las dimensiones de los vectores se mantienen as que al aumentar el tamao de muestras del vector que representa el tiempo es necesario aumentar el valor de ceros y de unos con el cual se est creando la seal. En el ejemplo se puede ver que a mayor numero de muestras, la pendiente de la seal se hace mayor y la aproximacin a la seal verdadera es ms cercana. >>delta=[zeros(1,10),1,zeros(1,10)]; >>t=-1:0.1:1; >>plot(t,delta)

20

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>> delta = [ zeros( 1 , 1000 ), 1 , zeros( 1 , 1000 ) ]; >> t=-1:0.001:1; >> plot(t,delta)

2012

Seal Rampa

Para generar la seal rampa, tan solo es necesario recordar que esta funcin puede ser creada, como la composicin de una recta Y(x) = x a partir de cero y de la recta Y(x) = 0 para valores de x menores de cero, as la versin discreta y continua se muestran a continuacin: >> n1=0:30; >> rampa1=n1; >> rampa = [zeros(1,29),rampa1]; >> n=-29:30; >> stem(n,rampa)

21

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>> t1=0:0.1:10; >> rampa1=t1; >> rampa=[zeros(1,101),rampa1]; >> t2=-10:0.1:0; >> t=[t2,t1]; >> plot(t,rampa)

2012

Simetra de una seal Simetra par x(t) = x(-t) Simetra Impar x(t) = -x(-t)

Una seal no simtrica puede siempre expresarse como la suma de una funcin par xe(t) y una funcin impar xo(t) : xe(t) = (x(t)+x(-t))/2 xo(t) = (x(t)-x(-t))/2 Simetra de media onda Simetras escondidas

22

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Actividad I

2012

Desarrollar las funciones en MatLab para generar las seales elementales en tiempo continuo escaln, rampa, puerta, rectngulo, signo, impulso, exponencial. Desarrollar las funciones en MatLab necesarias para obtener la componente par e impar de una seal continua. Desarrollar las funciones en MatLab para realizar operaciones con seales continuas escalamiento en magnitud, desplazamiento, reflexin, escalamiento en el tiempo, Convolucin, derivacin, integracin.

1.5. Seales Discretas (utilizadas en DSP). Aunque las seales muestreadas tienen importancia practica, en el sentido de que estas son las que se generan como resultado del muestreo de una seal continua, como fase previa a la conversin en seal digital, para efecto de anlisis en los procesos DSP, es suficiente si se considera que cada muestra ocurre para un valor de n, asumiendo que cuando nos referimos a un valor particular de n=k, lo interpretamos como x(k) o x(kT). En MatLab podemos representar una secuencia finita, utilizando un vector fila. Sin embargo, esto no es suficiente para identificar la posicin de las muestras respecto de n. Por lo tanto la representacin correcta debe ser: >> n=[-3,-2,-1,0,1,2,3,4]; x=[2,1,-1,0,1,4,3,7]; Para representar grficamente una seal en tiempo discreto, podemos utilizar la funcin stem(). Ejemplo 1.1: Utilizando MatLab Representar grficamente la seal [-3,5]. Solucin: Los comandos bsicos son: >> n=-3:5;xn=sin(n*2 + pi/3); stem(n,xn) La grafica de la siguiente figura muestra el resultado obtenido. Se sugiere comparar este resultado si se utiliza nicamente el comando stem(xn), se puede observar que en este caso es errnea la representacin del eje de los tiempos. en el intervalo

23

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Secuencias Elementales Para efecto de anlisis, utilizamos en DSP secuencias elementales, que pueden ser representadas en forma apropiada, utilizando MatLab. 1. Secuencia impulso unitario Se representa como y su definicin algebraica es:

En MatLab la funcin zeros(1,N) genera un vector fila de N ceros, que podra ser utilizado para implementar la seal en un intervalo finito. Sin embargo, la relacin lgica n==0 es una forma mas elegante para su implementacin. Utilizando esta estrategia se puede desarrollar la funcin impd(n0,,n) que simule la secuencia discreta:

%Secuencia impulso unitario function [x,n]=impd(no,n) %Genera la senal x(n)=delta(n-no),definida como; % x(n)=1 para n=no %[x,n]=impd(no,n) x=[(n-no)==0];

2. Secuencia escaln unitario Se representa como u(n) y su definicin algebraica es: 24

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

En MatLab la funcin ones(1,N) permite generar un vector fila de N unos y podra utilizarse para implementar a u(n). Sin embargo, una versin ms elegante se puede lograr utilizando la relacin lgica n0, para implementar la seal:

%Secuencia escalon unitario function [x,n]=stepd(no,n) %Genera la senal x(n)=delta(n-no),definida como; % x(n)=1 para n=no %[x,n]=impd(no,n) x=[(n-no)>=0];

3. Secuencia rampa unitaria Se representa como r(n) y su definicin matemtica es:

A partir de la seal escaln u(n) generada con la funcin stepd(), se puede lograr esta secuencia, en su forma ms general, dada por:

>>

Se observa que es necesario recurrir al operador punto (.*)para que se efecte el producto elemento a elemento de los dos vectores.

4. Secuencia exponencial real Se puede definir algebraicamente como:

Para implementar esta secuencia en MatLab, es necesario recurrir nuevamente al operador punto (.^). Por ejemplo para generar , se requieren los siguientes comandos bsicos:

25

Mdulo de Actualizacin Anlisis de Seales -MATLAB


<<n=[0:10];x=(0.9).^n;

2012

5. Secuencia exponencial compleja Se puede definir algebraicamente como:

Donde es la atenucacion y la frecuencia angular (digital) en radianes. En MatLab es posible generar esta secuencia utilizando la funcin exp(). Por ejemplo, para lograr en el dominio [0,10], se requieren los siguientes comandos:

>> n=[0:10];x=exp((2+3j)*n); 6. Secuencia senoidal Puede definirse algebraicamente como:

Donde es la frecuencia angular en radianes y la fase en radianes. Para generar esta secuencia en MatLab, se pueden utilizar las funciones cos() o sin().

Ejemplo 1.2: Generar y dibujar cada una de las siguientes secuencias en el intervalo indicado: a) b) c) d) Solucin: a) >> n=[-5:5]; >> x=2*impd(-2,n)-impd(4,n); >> subplot(2,2,1),stem(n,x); b) >> n=[0:20]; >> x1=n.*(stepd(0,n)-stepd(10,n)); >> x2=10*exp(-1*(n-10)).*(stepd(10,n)-stepd(20,n)); 26

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>> x=x1+x2; >> subplot (2,2,2);stem(n,x); c) >> n=[-20:20]; >> x=5*cos(2*pi*n/16+pi/4); >> subplot(2,2,3);stem(n,x);

2012

d) >> n=[-20:20]; >> x=10*(0.9).^n.*cos(2*pi*n/16+pi/4); >> subplot(2,2,4);stem(n,x); La figura de la pgina siguiente muestra el resultado obtenido en cada caso.

Consideraciones especiales de la secuencia senoidal Existe una forma alterna para representar una secuencia senoidal, expresando la frecuencia angular como , siendo N un nmero entero, que representa el periodo de la seal:

A partir de la expresin anterior se establece la condicin para que la secuencia senoidal sea peridica:

27

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

; Donde k debe ser un nmero entero arbitrario. El menor valor posible que satisfaga esta condicin se reconoce como el periodo fundamental de la secuencia discreta. Esta misma condicin se aplica al caso de una secuencia exponencial sin atenuacin ( ).

Expresando , donde representa la frecuencia cclica en ciclos por muestra, se pueden derivar tres (3) propiedades de una secuencia senoidal discreta, que establecen una diferencia substancial con su equivalente continua. P1. Una secuencia senoidal discreta es peridica, solo si es una fraccin racional. son idnticas. ,o

P2. Dos secuencias senoidales cuya frecuencias estn separadas por un mltiplo de

P3. La mxima tasa de oscilacin de una secuencia senoidal discreta, se consigue cuando cuando

Ejemplo 1.3: Generar y dibujar la secuencia . Solucin: Los comandos bsicos de MatLab son: >> n=[-20:20]; >> wo=pi/4; % Cambiar para otros casos.

, para

y valores de

>> xn=5*cos(wo*n); >> subplot(2,2,2);stem(n,xn)

28

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Observando la grafica anterior se puede reconocer el comportamiento especial que tiene una secuencia senoidal discreta, en relacin con el valor de su frecuencia angular y su efecto en el periodo fundamental N: , N=8 , N=4 , N=2

7. Secuencias aleatorias Se utilizan en DSP para simular seales de ruido y se reconocen algebraicamente como seales estocsticas y son caracterizadas por parmetros asociados con funciones de distribucin de probabilidad. En MatLab existen dos (2) funciones incorporadas: rand(M,N): genera una secuencia matricial aleatoria de MxN muestras, distribuidas uniformemente, en el intervalo [0,1] randn(M,N): genera una secuencia matricial aleatoria de MxN muestras, utilizando distribucin de Gauss, con media 0 y varianza 1.

8. Secuencias peridicas Generalizando el anlisis que se hizo en el caso de una secuencia senoidal discreta, una secuencia se considera peridica si:

29

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

El valor ms pequeo y entero de N que satisface esta condicin, se reconoce como el periodo fundamental. Si denominamos a como una secuencia peridica, es posible generar P periodos a partir de su componente fundamental { } correspondiente a un periodo, utilizando concatenacin horizontal en MatLab, para copiar P veces a x(n): >>xp=[x,x,x,.,x]; Sin embargo, una solucin ms elegante, se basa en utilizar la capacidad de indexacin del MatLab. Primero generamos una matriz que contenga P filas de x(n). Luego utilizando la notacin (:) se puede convertir en un vector columna, que transponindolo se transforma en la secuencia peridica deseada. >>xp=x*ones(1,P); >>xp=xp(:); >>xp=xp;

Ejemplo 1.4: Generar y graficar las siguientes secuencias discretas, en el intervalo sealado. a) Gaussiana , con media 0 y varianza 1. b) , donde es una secuencia aleatoria

Solucin: (a) >> n=[0:50]; >> x=cos(0.04*pi*n)+0.2*randn(size(n)); >> subplot(2,1,1);stem(n,x) (b) Se puede observar que para el intervalo indicado, xP(n) tendra 4 periodos. >> n=[-10:9];x=[5,4,3,2,1]; >> xp=x'*ones(1,4); >> xp=(xp(:))'; >> subplot(2,1,2);stem(n,xp) La figura siguiente muestra los resultados obtenidos.

30

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Operaciones con secuencias En esta seccin haremos una descripcin breve de las operaciones bsicas con seales representadas por secuencias discretas y las funciones desarrolladas utilizando MatLab. 1. Suma de seales: Se trata de la suma muestra-muestra dada por:

Esta operacin podra realizarse en MatLab utilizando el operador suma +. Sin embargo, las longitudes de y deben ser iguales y las dos seales deben tener la misma referencia de tiempo. Estas condiciones se pueden lograr en MatLab usando operaciones de indexacin. A continuacin se presenta la funcin sumasec(), que se desarrollo utilizando el operador lgico de interseccin &, operadores relacionales y ==, la funcin find() para cumplir con estas dos condiciones. Su aplicacin se muestra ms adelante en el Ejemplo 1.5.
function [y,n]=sumasec(x1,n1,x2,n2) %Calcula la suma y(n)=x1(n)+x2(n) ajustando automticamente la longitud de %x1(n) y x2(n). %[y,n]=sumasec(x1,n1,x2,n2) %y=secuencia suma en el intervalo n que incluye n1 y n2 %x1=primera secuencia en el intervalo n1 %x2=segunda secuencia en el intervalo n2 n=min(min(n1),min(n2)):max(max(n1),max(n2)); y=zeros(1,length(n));y2=y1 y1=(find(n>=min(n1)&(n<=max(n1)==1)=x1; %x1 con duracin de y y2=(find(n>=min(n2)&(n<=max(n2)==1)=x2; %x2 con duracin de y y=y1+y2;

31

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

2. Multiplicacin de seales: se trata del producto muestra-muestra o producto punto

Esta operacin se puede implementar en MatLab utilizando el operador punto .*. Nuevamente es necesario garantizar la misma longitud y referencia de tiempo de las seales que actan como factores, tal como se observa en la funcin multsec() que se presenta a continuacin. Su aplicacin se muestra en el Ejemplo 1.5.

function [y,n]=multsec(x1,n1,x2,n2) %Genera el producto y(n)=x1(n)*x2(n) %[y,n]=multsec(x1,n1,x2,n2) %y=secuencia producto en intervalo n, que incluye n1 y n2 %x1=primera secuencia en el intervalo n1 %x2=segunda secuencia en el intervalo n2 (n2 debe ser diferente de n1) n=min(min(n1),min(n2)):max(max(n1),max(n2));%duracin de y(n) y1=zeros(1,length(n));y2=y1; y1=(find((n>=min(n1))&(n<=max(n1))==1))=x1; y2=(find((n>=min(n2))&(n<=max(n2))==1))=x2; y=y1.*y2;

3. Escalamiento: En esta operacin, cada muestra de una secuencia es multiplicada por un escalar a.

Para implementar esta operacin en MatLab, basta con utilizar el operador *.

4. Desplazamiento: En esta operacin, cada muestra de x(n) es desplazada, un numero de posiciones n0, hacia adelante o hacia atrs, para obtener y(n):

La operacin de adelanto o atraso de una seal solo es posible si sus valores estn almacenados en un dispositivo. Sin embargo, en tiempo real, el adelanto de una seal no es realizable. Si sutituimos m = n-n0 la expresin anterior se reduce a:

Por lo tanto esta operacin no afecta el vector x; simplemente el vector n es cambiado sumando n 0 a cada elemento. Esta propiedad se demuestra en la funcin despsec(), presentada a continuacin
function [y,n]=despsec(x,m,n0) generar y(n)=x(n-n0) El %Para uso de esta funcin se muestra en el Ejemplo 1.5 %[y,n]=despsec(x,m,n0) n=m+n0; y=x;

32

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

5. Reflexin: (se hace respecto del eje vertical) En esta operacin cada muestra de x(n) es intercambiada alrededor de n=0 para obtener la seal plegada.

En MatLab esta operacin puede ser implementada utilizando la funcin fliplr() que es una funcin propia de MatLab, tal como se muestra en la funcin desarrollada reflsec().

function [y,n]=reflsec(x,n) %Para implementar y(n)=x(-n) %[y,n]=reflsec(x,n) y=fliplr(x); n=-fliplr(n);

El uso de esta funcin ser demostrado en el ejemplo siguiente. Nota: Las operaciones de reflexin y retardo no son conmutativas. Ejemplo 1.5: Sea a) b) Genere y dibuje las siguientes secuencias:

Solucin: La secuencia x(n) est definida en el intervalo [-2,10] a)

>> n=-2:10;x=[1:7,6:-1:1]; >> [x11,n11]=despsec(x,n,5); >> [x12,n12]=despsec(x,n,-4); >> [x1,n1]=sumasec(2*x11,n11,-3*x12,n12); >> subplot(2,1,1);stem(n1,x1)

b)

>> n=-2:10;x=[1:7,6:-1:1]; >> [x21,n21]=reflsec(x,n); 33

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>> [x21,n21]=despsec(x21,n21,3); >> [x22,n22]=despsec(x,n,2); >> [x22,n22]=multsec(x,n,x22,n22); >> [x2,n2]=sumasec(x21,n21,x22,n22); >> subplot(2,1,2);stem(n2,x2);

2012

6. Suma de muestras: Esta operacin difiere de la suma de secuencias. Se trata de obtener la suma de las muestras, en un intervalo [n1,n2]:

Esta operacin puede ser implementada utilizando la funcin sum(x(n1:n2)) 7. Producto de muestras: Esta operacin tambin difiere del producto de seales. Se trata de obtener el producto de todas las muestras, en un intervalo [n1,n2]:

Esta operacin puede ser implementada utilizando la funcin prod(x(n1:n2)) 8. Energa de una seal: La energa de una secuencia x(n) est dada por:

La energa de una secuencia finita puede ser calculada en MatLab utilizando: >>Ex=sum(x.*conj(x)); >>Ex=sum(abs(x).^2) 9. Potencia de una seal: La potencia media de una secuencia peridica con periodo fundamental N est dada por:

Otros aspectos importantes 34

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

En esta parte comentaremos algunos resultados importantes en el tratamiento de seales discretas y que son de utilidad en el DSP. 1. Sntesis de una secuencia arbitraria: Cualquier secuencia arbitraria x(n) puede ser sintetizada como una suma ponderada de secuencias impulso desplazadas y escaladas.

2. Componentes par e impar de una seal: Una secuencia real

se dice que tiene simetra par si:

De manera similar, una secuencia real

tiene simetra par si:

Cualquier secuencia real arbitraria x(n) puede ser descompuesta en componentes par e impar:

Este concepto es importante en el estudio de Mtodos de Transformacin de Fourier. La siguiente funcin parimp() desarrollada en MatLab permite obtener la componente par e impar de una seal discreta finita. Ejemplo 1.6: Sea . Descomponer en sus componentes par e impar

Solucin: La seal x(n), definida en el intervalo [0,10] es reconocida como pulso rectangular y tiene utilidad prctica en el anlisis de seales. >> n=[0:10];x=stepd(0,n)-stepd(10,n); >> [xp,xi,m]=parimp(x,n); >> subplot(2,2,1);stem(n,x);axis([-10,10,0,1.2]); >> subplot(2,2,2);stem(m,xp);axis([-10,10,0,1.2]); >> subplot(2,2,4);stem(m,xi);axis([-10,10,-1,1]);

35

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

3. Series geomtricas: Una secuencia exponencial unilateral de la forma , donde es una constante arbitraria, es reconocida como serie geomtrica. En DSP esta serie es utilizada para evaluar problemas de convergencia. Pueden ocurrir 2 situaciones especiales: Secuencia Infinita

Secuencia Finita

36

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

II PARTE: REPRESENTACIONES DE FOURIER PARA LAS SEALES (Material de Apoyo) Existen cuatro representaciones distintas de Fourier, cada una aplicable a diferentes tipos de seales. Estas cuatro clases estn definidas por las propiedades de periodicidad de una seal y si el tiempo es de tipo continuo o discreto. Las seales peridicas tienen representacin en series de Fourier. La Serie de Fourier (FS) aplica a seales peridicas de tiempo continuo mientras que la Serie Discreta de Fourier (DTFS) aplica a seales peridicas de tiempo discreto. Las seales no peridicas tienen representacin en forma de transformada. Si la seal es continua en el tiempo y no peridica, la representacin es llamada Transformada de Fourier (FT). Si la seal es discreta en el tiempo y no peridica entonces la representacin usada es la transformada de Fourier en tiempo discreto ( DTFT). La siguiente tabla ilustra la relacin entre las propiedades de tiempo de una seal y la representacin de Fourier adecuada.

Tiempo

Peridicas

No peridicas

Series de Fourier Continuas ( FS )

Transformada de Fourier ( FT )

Discretas

Series Fourier ( DTFS )

discretas

de Transformada de Fourier ( DTFT)

discreta

La siguiente tabla muestra las relaciones matemticas utilizadas para calcular las representaciones de Fourier. Tiempo Peridicas Series de Fourier No peridicas Transformada de Fourier

Continuas

37

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Series discretas de Fourier Transformada discreta de Fourier

2012

Discretas

La Transformada Discreta de Fourier (DTFS) La DTFS es la nica representacin de Fourier que es de valor discreto tanto en el tiempo como en la frecuencia y de esta manera implcitamente conveniente para una implementacin computacional en MATLAB. Las expresiones utilizadas para esta representacin son fcilmente implementables en MATLAB como archivos. Sin embargo los comandos built-in de MATLAB fft y ifft pueden tambin ser utilizados para evaluar la DTFS. Dado un vector llamado x de longitud N representando un periodo de una seal peridica x[n]. el comando: >> X=fft(x)/N Produce un vector llamado X de longitud N que contiene los coeficientes de la DTFS. Matlab asume que el periodo evaluado en la seal es desde 0 hasta N-1, de manera que el primer elemento de x y X corresponden a x[0] y X[0] respectivamente, mientras que los ltimos elementos corresponden a x[N-1] y X[N-1]. Ntese que la divisin por N es completamente necesaria, debido a que el comando fft evala la siguiente expresin sin realizar la divisin por N.

Similarmente, dados los coeficientes de una DTFS en un vector llamado X el comando: >>x=ifft(X)*N Produce un vector x que representa un periodo de la seal en el tiempo. Ntese que el comando ifft debe estar multiplicado por N para evaluar la siguiente ecuacin.

Los comandos fft e ifft son computados usando un algoritmo rpido o numricamente eficiente, conocido como Fast Fourier Transform. Considere el siguiente ejemplo:

38

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Determinar los coeficientes DTFS para la siguiente seal:

2012

La seal tiene un periodo de 24, de manera que tan solo se hace necesario definir un periodo y evaluar sobre este periodo la DTFS. Los comandos usados para realizar dicho clculo son: >> n = 0:23; >> x = ones(1,24) + sin( (n * pi / 12) + (3 * pi / 8 ) ); >> X = fft(x)/24; El resultado terico del ejemplo es el siguiente:

El resultado obtenido mediante los comandos presentados anteriormente es: X= Columns 1 through 5 1.0000 0.4619 - 0.1913i 0.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 + 0.0000i Columns 6 through 10 -0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i -0.0000 - 0.0000i Columns 11 through 15 -0.0000 - 0.0000i -0.0000 - 0.0000i 0 -0.0000 + 0.0000i -0.0000 + 0.0000i Columns 16 through 20 -0.0000 + 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i -0.0000 + 0.0000i 39

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Columns 21 through 24 -0.0000 - 0.0000i -0.0000 - 0.0000i 0.0000 - 0.0000i 0.4619 + 0.1913i Como se puede ver, tres componentes tienen valor diferente de cero.

2012

Un uso comn de la transformada de Fourier, es encontrar las componentes frecuenciales de una seal en el dominio del tiempo que esta contaminada con ruido. Considrese dos seales senoidales que tienen frecuencias fundamentales de 50Hz y 120Hz, luego considrese estas seales contaminadas con ruido aleatorio. Los comandos para generar una seal con las especificaciones anteriormente mostradas son los siguientes: >> t = 0:0.001:0.6; >> x = sin ( 2 * pi * 50 * t ) + sin ( 2 * pi * 120 * t ); >> y = x + 2 * randn ( size ( t ) ); >> plot( 1000 * t (1:50), y (1:50) )

Es de gran dificultad identificar las componentes de frecuencia mirando la seal original. Sin embargo al realizar la conversin de esta seal al dominio de la frecuencia, la identificacin de estas componentes se hace ms sencilla. La conversin de la seal al dominio de la frecuencia se hace calculando la Transformada Rpida de Fourier, tomando para el clculo los primeros 512 puntos de la seal. El espectro de potencia es una medida de la potencia a varias frecuencias, y este puede ser calculado con los siguientes comandos. >>Pyy = Y .* conj (Y) / 512; Para realizar la grfica se puede tener en cuenta que la informacin que aparece en el arreglo Pyy es por propiedades de la transformada, simtrica con respecto a la frecuencia media, es decir que si tenemos 512 puntos de muestra, la seal que esta almacenada en el arreglo es simtrica con respecto a la muestra 256,

40

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

por lo tanto dibujar las ultimas 256 muestras del arreglo ser completamente innecesario. De manera que para visualizar el espectro de potencia los comandos deben ser como se muestran a continuacin: >> f = 1000*(0:256)/512; >> plot(f,Pyy(1:257))

Para ver todas las muestras y entender la caracterstica de simetra descrita anteriormente se pueden utilizar los siguientes comandos: >> f = 1000*(0:511)/512; >> plot(f,Pyy);

Del espectro de potencia se puede visualizar que las componentes con mayor frecuencia se encuentran a los 50 y 120 Hz respectivamente. Comprobando as que las seales de las cuales se formo la seal contaminada con ruido tienen estas frecuencias fundamentales.

41

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Representacin en el dominio del tiempo

2012

Los computadores digitales son ideales para la implementacin de descripciones en el dominio del tiempo de sistemas discretos, porque naturalmente el computador almacena y manipula secuencias de nmeros. Por ejemplo, la suma de convolucin describe la relacin entre la entrada y la salida de un sistema de tiempo discreto, y es fcilmente evaluada en un computador como la suma de productos de nmeros. En contraste, los sistemas de tiempo continuo, son descritos en trminos de funciones continuas, las cuales no son fcilmente representadas o manipuladas en un computador digital. Por ejemplo, la salida de un sistema en tiempo continuo esta descrita por la integral de convolucion. La evaluacin de la integral de convolucion con un computador requiere el uso de integracin numrica o de tcnicas de manipulacin simblica, ambas fuera del alcance de este tutorial. Por lo tanto la exploracin con Matlab se centra en el estudio de sistemas en tiempo discreto. Una segunda limitacin en la exploracin de seales y sistemas es la que se impone por la memoria finita o por la capacidad de almacenamiento finita que es inherente en un computador digital. Por lo tanto se manejaran nicamente seales de duracin finita. Por ejemplo si la respuesta al impulso de un sistema tiene duracin infinita y la entrada es de duracin infinita, entonces la suma de convolucin equivale a la suma de un infinito nmero de productos. Aun si fuese posible almacenar seales de longitud infinita en el computador, la suma infinita podra no ser calculada en una cantidad finita de tiempo. Debido a esta limitacin, el comportamiento de un sistema en respuesta una seal de longitud infinita podra a menudo ser inferida de su respuesta a una seal de longitud finita que presente ciertas particularidades. CONVOLUCIN Es de recordar que la suma convolucin expresa la salida de un sistema de tiempo discreto en trminos de la entrada y la respuesta al impulso del sistema. Matlab tiene una funcin llamada conv que evala la convolucin de seales de tiempo discreto de duracin finita. Si x y h son vectores representado seales, entonces el siguiente comando de Matlab genera un vector llamado y representando la convolucin de la seales representadas por x y h. y = conv(x, h) El nmero de elementos en el vector y es dado por la suma de el numero de elementos en x y h menos uno. Ntese que se debe conocer el tiempo de origen de las seales representadas por x y h con el fin de determinar el tiempo de origen de la convolucin. En general, si el primer elemento de x corresponde al tiempo n=kx y el primer elemento de h corresponde a n=kh, entonces el primer elemento de y corresponde al tiempo n= kx+kh. Para ilustrar este hecho, considere el siguiente ejemplo: Asuma el sistema LTI el cual tiene la siguiente respuesta al impulso.

42

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Determine la salida de este sistema en respuesta a la siguiente entrada.

Aqu el primer elemento diferente de cero en la respuesta al impulso del sistema ocurre en el tiempo n = 1 y el primer elemento de la entrada x ocurre en el tiempo n = 0. La anterior convolucin se puede calcular en Matlab de la siguiente manera: >> h = [1, 2, 1]; >> x = [2, 3, -2]; >> y = conv(x,h) y= 2 7 6 -1 -2 >> n = -1:3; >> stem(n,y);

El primer elemento en el vector y corresponde al tiempo n = 0 + (-1 ) = -1. En el siguiente ejemplo, se determinar la salida de un sistema con respuesta al impulso dada por:

Y entrada

Se puede en este caso usar el comando conv para calcular la respuesta del sistema. En este caso, la respuesta al impulso consiste de diez unos consecutivos comenzando en el tiempo n = 0, y la entrada consiste de cinco unos consecutivos comenzando en el tiempo n = 2. Estas seales pueden ser definidas en Matlab usando los siguientes comandos: 43

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>> h = ones(1,10); >> x = ones(1,5); La salida se obtiene y es graficada usando los siguientes comandos: >> n = 2:15; >> y = conv(x, h); >> stem(n, y);

2012

En este ejemplo, el primer elemento del vector y corresponde al tiempo n = 2 + 0 como se muestra en la siguiente figura. RESPUESTAS EN ESTADO ESTABLE A ENTRADAS ESCALN UNITARIO La respuesta escaln, es la salida de un sistema en respuesta a una seal de entrada escaln unitario. Esta respuesta es infinita en general. Sin embargo, es posible evaluar los primeros p valores de la respuesta escaln usando la funcin conv. Si la respuesta al impulso es cero para los tiempos n<kh, entonces el clculo se realiza convolucionando los primeros p valores de h[n] con una seal paso de longitud p. Es decir se construye un vector h con los primeros p valores diferentes de cero de la respuesta al impulso h, luego se define una seal paso de duracin p con el siguiente comando u=ones(1,p), y entonces se evala la siguiente convolucin s = conv(u,h). El primer elemento de s corresponde a el tiempo kh y los primeros p valores de s representan los primeros p valores de la respuesta paso. Los valores sobrantes de s no corresponden a la respuesta paso. Por ejemplo se podra determinar los 50 primeros valores de la respuesta paso del sistema con la siguiente respuesta al impulso:

Con a = 0.9 los comandos de Matlab seran: >> h = (-0.9).^[0:49]; >> u = ones(1,50); >> s= conv(u, h); El vector s tienen 99 valores, los primeros 50 corresponden a la respuesta impulso y es mostrada en la siguiente figura usando el siguiente comando: 44

Mdulo de Actualizacin Anlisis de Seales -MATLAB


>>stem([0:49],s(1:50)); En este ultimo comando se pasan a la funcin stem dos parmetros diferentes a los mostrados en los anteriores ejemplos, el primero es un vector annimo de 50 posiciones desde 0 hasta 49 que representa el tiempo, se dice que el vector es annimo puesto que no se le ha definido algn nombre. El segundo parmetro es el vector s que se haba calculado anteriormente, pero en este caso se agrega la fraccin de cdigo (1:50) que indica a Matlab que debe usar tan solo los elementos de s que estn almacenados desde la posicin 1 hasta la 50.

2012

Ejercicios de Seales y Anlisis de Fourier Seales Ejercicio 1 Genere una secuencia de instantes de tiempo que parta de t=0s y llegue hasta t=0.25s en intervalos de 1ms. Construya una funcin seno en esa base de tiempo de amplitud 1 y frecuencia 5Hz. Use plot para dibujar la forma de onda. Adems, destaque cada punto de la grfica con *. >> Tinicial=0; % Definimos el tiempo inicial >> Tfinal=0.25; % Definimos el tiempo final >> step=0.001; % Definimos el paso entre instantes de tiempo >> t=Tinicial:step:Tfinal-step; % Se genera el vector de tiempos >> y=1*sin(5*2*pi*t); % Se genera y >> plot(t,y); hold on; % Dibujamos y >> plot(t,y,*); % Dibujamos las muestras de y Ejercicio 2 Vamos a ver otra posible forma de representar en MATLAB algunas seales analgicas tpicas. SEAL ESCALN % Ejemplo de seal escalon >> t=-10:0.01:10; >> f_escalon=[zeros(1,1000),ones(1,1001)]; >> plot(t,f_escalon); SEAL PULSO % Ejemplo de seal pulso >> t=-10:0.01:10; >> f_pulso=[zeros(1,950),ones(1,101),zeros(1,950)]; >> plot(t,f_pulso); 45

Mdulo de Actualizacin Anlisis de Seales -MATLAB


SEAL SAMPLING % Ejemplo de seal sampling >> t=-10:0.01:10; % Seal sampling nula en t=n*pi, n=1,2,... >> f_sampling=sin(t)./t; >> plot(t,f_sampling); % Seal sinc nula en t=n, n=1,2,... >> f_sinc=sinc(t); >> plot(t,f_sinc); SEAL IMPULSO O DELTA DE DIRAC % Ejemplo de seal impulso >> t=-10:0.01:10; >> f_impulso=[zeros(1,1000),1,zeros(1,1000)]; >> plot(t,f_impulso); SEAL DIENTE DE SIERRA % Ejemplo de seal diente de sierra de periodo 0.1Hz % sawtooth(x,width) seal en diente de sierra con periodo 2*pi para los % elementos del vector x. El parmetro width es un escalar entre % 0 y 1, y describe la fraccin del periodo 2*pi en el que ocurre el % mximo. >> t=-10:0.01:10; >> width=0.10; >> f_sierra=sawtooth(2*pi*0.1*t,width); >> plot(t,f_sierra); SEAL TRIANGULAR % Ejemplo de seal triangular de periodo 0.1Hz % Es un caso particular de seal diente de sierra con width=0.5 >> t=-10:0.01:10; >> f_triangular=sawtooth(2*pi*0.1*t,0.5); >> plot(t,f_triangular); SEAL EXPONENCIAL % Ejemplo de seal exponencial decreciente >> t=-10:0.01:10; % tau: constante de tiempo (RC) >> tau=200e-2; >> f_expon=exp(-t/tau); >> plot(t,f_expon); SEAL CUADRADA % Ejemplo de seal cuadrada de frecuencia 0.5Hz % square(x,duty) genera una onda cuadrada de periodo 2*pi con un duty cycle dado >> t=-10:0.01:10; >> duty=50; % porcentaje del periodo en el que la seal es positiva >> f_cuadrada=square(2*pi*0.5*t,duty); >> plot(t,f_cuadrada);

2012

46

Mdulo de Actualizacin Anlisis de Seales -MATLAB


Anlisis de Fourier

2012

Las series de Fourier permiten describir seales peridicas como una combinacin de seales armnicas (sinusoides). Con esta herramienta, podemos analizar una seal peridica en trminos de su contenido frecuencial o espectro. Adems, nos permite establecer la dualidad entre tiempo y frecuencia, de forma que operaciones realizadas en el dominio del tiempo tienen su dual en el dominio frecuencial. Utilizando operaciones sobre vectores, se pueden calcular fcilmente los coeficientes de Fourier correspondientes a una seal. En el ejercicio 2, se definen el vector n, que contiene los ndices de los coeficientes, y el vector cn, que contiene los coeficientes. Los coeficientes cn, son los coeficientes espectrales de la seal. La grfica de esos coeficientes en funcin del ndice armnico n o de las frecuencias nwo se denomina espectro. Hay dos tipos de grficos, uno con la magnitud de los coeficientes y otro de la fase. Ambas funciones son discretas en frecuencia. Ejercicio 1 Escriba un archivo MATLAB que proporcione los coeficientes de Fourier de una seal cuadrada de periodo 0.2s (frecuencia 5Hz) y amplitud igual a 1V. % Obtener los coeficientes de Fourier para una seal cuadrada de periodo % 0.2s y amplitud 1. clear; % frecuencia de la seal cuadrada (=1/T) f=5; T=1/f; % Indice de los coeficientes n=1:10; % Coeficientes de Fourier cn=2*(cos(n*pi)-1)./(-2*j*n*pi); co=1; subplot(2,1,1); stem(n,abs(cn)); ylabel('Magnitud de cn'); subplot(2,1,2); stem(n,angle(cn)); ylabel('fase de cn'); xlabel('n'); A partir de la serie de Fourier, es posible reconstruir una seal peridica. Cuanto mayor sea el nmero de armnicos utilizado en el desarrollo en serie, mejor ser la reconstruccin. Un parmetro importante en la reconstruccin de seales es la velocidad de convergencia, o lo que es lo mismo, la velocidad con la que los coeficientes de Fourier tienden a 0. Ejercicio 2 Escriba un archivo en MATLAB para dibujar n armnicos de una seal cuadrada de periodo 0.2s y amplitud 1. % Desarrollo en serie de Fourier de una seal cuadrada de periodo 0.2s y amplitud 1 clear; 47

Mdulo de Actualizacin Anlisis de Seales -MATLAB


% frecuencia de la seal cuadrada (=1/T) f=5; T=1/f; % Indice de los coeficientes n=1:10; % Generamos la serie de Fourier t=-1:0.01:1; % vector de tiempos for i=1:50 for k=1:size(t,2) s(i,k)=(2*(1-cos(pi*i))/(pi*i))*sin(2*pi*i*f*t(k)); end end for k=1:size(t,2) st(k)=sum(s(:,k)); end st(1)=st(1)+1; plot(t,st,'r'); hold on; % Seal cuadrada original f_cuadrada=square(2*pi*f*t,50); plot(t,f_cuadrada); xlabel(tiempo); ylabel(Amplitud);

2012

MATLAB est equipado con funciones especiales que nos van a permitir realizar un anlisis de Fourier de funciones definidas por un conjunto de valores discretos. Por ejemplo, el comando fft() nos permite obtener la transformada rpida de Fourier (fast Fourier Transform) de una secuencia de nmeros definida por el vector x. Por ejemplo: >> X=fft(x); donde X es un vector de nmeros complejos ordenados desde k=0...N-1. Si queremos que sea ms eficiente en el clculo de la ffT, la longitud del vector x deber ser una potencia de 2. Podemos rellenar de ceros el vector x para que tenga la longitud apropiada. Esto se consigue automticamente haciendo: >> X=fft(x,N); donde N es exponente de 2. Mientras ms largo sea x, ms fina ser la escala para la ffT. Debido a un fenmeno de plegamiento del espectro, slo la primera mitad de los puntos obtenidos son de utilidad. La funcin fftshift() reordena el vector X en orden creciente de frecuencia. Si X es el vector resultante de hacer una ffT, utilizando esta funcin reordenamos los puntos en funcin de la frecuencia. >> X=fftshift(X);

Ejercicio 3 Obtenga la transformada de Fourier de una seal exponencial modulada en amplitud con una frecuencia de portadora de 200Hz, x(t)=exp(-2t)sin(2pi200t).

48

Mdulo de Actualizacin Anlisis de Seales -MATLAB


% Ejemplo de una ffT de una seal exponencial modulada en amplitud % con una frecuencia portadora de 200Hz. % Definicion de la seal t=-0.25:0.001:0.25; x=exp(-2*t).*sin(2*pi*200*t); % Representacion en el tiempo subplot(3,1,1); plot(t,x); title('x(t)=exp(-2t)sin(2pi200t)'); xlabel('Tiempo (t)');ylabel('x(t)'); % Transformada de Fourier X=fftshift(fft(x)); % Magnitud y fase de la transformada Xm=abs(X); Xf=unwrap(angle(X))*180/pi; % Base de frecuencias delta_t = t(2)-t(1); f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t; % Representacion en frecuencia subplot(3,1,2); plot(f,Xm,'r'); title('Mdulo de transformada de Fourier de x(t)'); xlabel('frecuencia (Hz)');ylabel('|X(jw)|'); subplot(3,1,3); plot(f,Xf,'r');zoom; title('fase de la transformada de Fourier de x(t)'); xlabel('frecuencia (Hz)');ylabel('fase X(jw)');

2012

A partir de la transformada de Fourier, es posible reconstruir la seal en el dominio del tiempo. El comando ifft() sirve para obtener la transformada inversa de Fourier de una serie de nmeros complejos: >> x=ifft(X); Ejercicio 4 Obtenga la transformada de Fourier de una seal exponencial modulada en amplitud, x(t)=exp(2t)sin(2pi3t). Realice la transformada inversa y obtenga la seal en el tiempo a partir de su transformada. % Ejemplo de una ffT de una seal exponencial modulada en amplitud % Obtencin de la seal en el tiempo a partir de su transformada % Definicion de la seal t=-0.25:0.001:0.25; x=exp(-2*t).*sin(2*pi*3*t); % Representacion en el tiempo figure(1); plot(t,x); title('x(t)=exp(-2t)sin(2pi200t)'); xlabel('Tiempo (t)');ylabel('x(t)'); % Transformada y representacion en frecuencia Xt=fft(x); X=fftshift(Xt); 49

Mdulo de Actualizacin Anlisis de Seales -MATLAB


% Magnitud y fase de la transformada Xm=abs(X); Xf=unwrap(angle(X))*180/pi; % Base de frecuencias delta_t = t(2)-t(1); f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t; figure(2); subplot(2,1,1); plot(f,Xm,'r');zoom; title('Mdulo de transformada de Fourier de x(t)'); xlabel('frecuencia (Hz)');ylabel('|X(jw)|'); subplot(2,1,2); plot(f,Xf,'r');zoom; title('fase de la transformada de Fourier de x(t)'); xlabel('frecuencia (Hz)');ylabel('fase X(jw)'); % Obtener la seal en el dominio del tiempo a partir de su transformada xrec=ifft(Xt); figure(3); plot(t,xrec); title('Transformada inversa') xlabel('Tiempo (t)');ylabel('xrec(t)'); Producto de Convolucin

2012

La convolucin es una potente herramienta matemtica utilizada en el procesado de seales. Aunque en general se define como un operador que permite determinar la respuesta de un sistema lineal, invariante en el tiempo ante una determinada entrada, tambin se puede aplicar a dos seales arbitrarias. La Convolucin de f y g se denota por f*g y se define como la integral del producto de ambas funciones despus de que una sea invertida y desplazada. En MATLAB contamos con la funcin conv() que realiza la la convolucin de los vectores x y h. El vector resultante tiene un tamao igual a length(x)+length(h)-1. >> y=conv(x,h);

Ejercicio 1 Genere un archivo MATLAB donde realice la convolucin de una seal coseno de frecuencia 100Hz y una seal escaln. Compruebe que se verifican las propiedades de la transformada de Fourier respecto al producto de convolucin. % Ejemplo de una ffT de una seal exponencial modulada en amplitud % Obtencin de la seal en el tiempo a partir de su transformada % Definicion de las seales t = -pi:0.001:pi; g_escalon=[zeros(1,1000*pi+1), ones(1,1000*pi+1)]; w = 2*pi; g = cos(w*100*t); g_conv = conv(g,g_escalon); figure(1); subplot(3,1,1); 50

Mdulo de Actualizacin Anlisis de Seales -MATLAB


plot(t,g_escalon); title('SEAL ESCALON'); xlabel('Tiempo (t)');ylabel('e(t)'); subplot(3,1,2); plot(t,g); title('cos(2pit)'); xlabel('Tiempo (t)');ylabel('cos(2*pi*100*t)'); % Convolucion g_conv = conv(g,g_escalon); subplot(3,1,3); plot(t,g_conv(1:length(g)),'r') title('Convolucion'); xlabel('Tiempo (t)'); % Transformada y representacion en frecuencia de la convolucion G_conv=fftshift(fft(g_conv)); % Magnitud de la transformada Gm_conv=abs(G_conv); % Base de frecuencias delta_t = t(2)-t(1); f = ((1:length(g_conv)) - ceil(length(g_conv)/2)) / length(g_conv) / delta_t; figure(2); subplot(2,1,1); plot(f,Gm_conv,'r');zoom; title('Transformada de Fourier del producto de convolucion)'); xlabel('frecuencia (Hz)');ylabel('|X(jw)|'); % Obtener G_conv como el producto de los espectros G_escalon=fftshift(fft(g_escalon)); G=fftshift(fft(g)); G_conv2=G.*G_escalon; % Base de frecuencias delta_t = t(2)-t(1); f2 = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t; subplot(2,1,2); plot(f2,abs(G_conv2),'r');zoom; title('Producto de las transformadas de Fourier)'); xlabel('frecuencia (Hz)');ylabel('|X(jw)|'); Espectros de densidad de potencia y energa Las seales se pueden clasificarse segn sean de energa o de potencia. Energa de una seal:

2012

Potencia de una seal:

51

Mdulo de Actualizacin Anlisis de Seales -MATLAB

2012

Una seal se dice que es de energa si su E es finita, lo que implica que su potencia es cero. Por ejemplo, los pulsos limitados en el tiempo. Una seal se dice que es de potencia si su potencia es finita, lo que implica que su energa es infinita. Un ejemplo de este tipo de seales lo encontramos en las seales peridicas. Para el clculo de estos espectros disponemos, adems de las funciones para el anlisis de Fourier anteriores, de la funcin psd(), que proporciona la densidad espectral de potencia de una seal en dB. >>Sg=psd(x,);

Ejercicio 1 Genere un archivo en MATLAB donde realice la densidad espectral de potencia de una seal coseno de frecuencia 100Hz. % Densidad espectral de potencia t=-pi:0.001:pi; w=2*pi*100; g=cos(w*t); PSD=psd(g,2^10,lenght(g)); plot(PSD);

Clculo Simblico Durante la prctica hemos representado las seales mediante vectores y hemos manipulado las seales esencialmente mediante operaciones con vectores. Esta es la forma habitual de trabajar con MATLAB. No obstante, aunque en principio MATLAB no se diseo para realizar operaciones simblicas, s es posible definir y manipular seales (y funciones en general) de manera simblica, si disponemos del Toolbox para el clculo simblico. As, como en el ejercicio siguiente, podemos definir una funcin seno o delta de dirac y calcular su transformada de Fourier de forma simblica. Definir una funcin seno de forma simblica y calcular su transformada de Fourier.
% Anlsis de Fourier con clculo simblico syms t % crear variable simblica g=sin(2*pi*t); G=Fourier(g); % Transformada de Fourier ezplot(g); ginv=iFourier(G); % Transformada inversa

52

Vous aimerez peut-être aussi