AnalisisSenalesMATLAB_2012

download AnalisisSenalesMATLAB_2012

of 52

Transcript of AnalisisSenalesMATLAB_2012

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    1

    UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA

    VICE-RECTORADO ACADEMICO

    DECANATO DE POSTGRADO

    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 2012

    2

    Fundamentos de Anlisis de Seales.

    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 Dominio de la Frecuencia

    Seales Discretas

    - Series de Fourier

    - Transformadas de Fourier

    - Transformada Z

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    3

    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

    4

    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

    5

    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

    6

    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

    7

    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

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    8

    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

    9

    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.

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    10

    1.4. Seales en tiempo continuo y discreto en MatLab.

    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;

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    11

    >> t = 0:0.001:1;

    >> sq = A*square(w*t+rho);

    >> plot(t,sq);

    El resultado se puede observar en la siguiente grfica:

    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.

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    12

    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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    13

    SEALES EXPONENCIALES

    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 ) ;

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    14

    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 );

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    15

    SEALES SENOSOIDALES.

    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);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    16

    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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    17

    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)

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    18

    SEALES IMPULSO, PASO Y RAMPA.

    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)

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    19

    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);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    20

    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)

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    21

    >> delta = [ zeros( 1 , 1000 ), 1 , zeros( 1 , 1000 ) ];

    >> t=-1:0.001:1;

    >> plot(t,delta)

    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)

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    22

    >> t1=0:0.1:10;

    >> rampa1=t1;

    >> rampa=[zeros(1,101),rampa1];

    >> t2=-10:0.1:0;

    >> t=[t2,t1];

    >> plot(t,rampa)

    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

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    23

    Actividad I

    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

    en el intervalo

    [-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.

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    24

    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:

    2. Secuencia escaln unitario

    Se representa como u(n) y su definicin algebraica es:

    %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];

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    25

    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:

    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:

    %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];

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    26

    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));

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    27

    >> 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);

    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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    28

    ;

    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.

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

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

    cuando

    Ejemplo 1.3: Generar y dibujar la secuencia , para y valores de

    .

    Solucin: Los comandos bsicos de MatLab son:

    >> n=[-20:20];

    >> wo=pi/4; % Cambiar para otros casos.

    >> xn=5*cos(wo*n);

    >> subplot(2,2,2);stem(n,xn)

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    29

    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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    30

    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) , donde es una secuencia aleatoria

    Gaussiana , con media 0 y varianza 1.

    b)

    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.

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    31

    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=min(n2)&(n

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    32

    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.

    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 n0 a cada

    elemento. Esta propiedad se demuestra en la funcin despsec(), presentada a continuacin

    El uso de esta funcin 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=min(n2))&(n

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    33

    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().

    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 Genere y dibuje las siguientes secuencias:

    a)

    b)

    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);

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

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    34

    >> [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);

    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

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    35

    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]);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    36

    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

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    37

    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

    Continuas

    Series de Fourier

    ( FS )

    Transformada de Fourier

    ( FT )

    Discretas

    Series discretas de

    Fourier

    ( DTFS )

    Transformada discreta

    de Fourier

    ( DTFT)

    La siguiente tabla muestra las relaciones matemticas utilizadas para calcular las representaciones de

    Fourier.

    Tiempo Peridicas No peridicas

    Continuas

    Series de Fourier

    Transformada de Fourier

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    38

    Discretas

    Series discretas de Fourier

    Transformada discreta de Fourier

    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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    39

    Determinar los coeficientes DTFS para la siguiente seal:

    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

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    40

    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.

    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,

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    41

    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.

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    42

    Representacin en el dominio del tiempo

    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.

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    43

    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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    44

    >> 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);

    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> 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:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    45

    >>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.

    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);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    46

    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);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    47

    Anlisis de Fourier

    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;

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    48

    % 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);

    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).

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    49

    % 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)');

    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);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    50

    % 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

    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);

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    51

    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:

    Potencia de una seal:

  • Mdulo de Actualizacin Anlisis de Seales -MATLAB 2012

    52

    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