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