Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEÑALES ELEMENTALES
t = 0:0.001:1;
Para generar un vector llamado n de valores que representan la variable tiempo para una
señal discreta en el intervalo de 0 a 1000, se puede usar el siguiente comando.
n = 0:1000;
En MATLAB una señal discreta en el tiempo se representa exactamente, porque los valores
de la señal son representados como los elementos de un vector. Sin embargo las señales de
tiempo continuo en MATLAB son tan solo aproximaciones. La aproximación consiste de
un vector cuyos elementos son muestras de la verdadera señal de tiempo continuo. Cuando
se usa esta técnica para la representación de señales continuas es importante escoger el
intervalo de muestreo lo suficientemente pequeño para asegurar que las muestras capturan
todos los detalles de la señal.
SEÑALES PERIODICAS
>> A = 1;
>> w = 10 * pi;
>> rho = 0.5;
>> t = 0:0.001:1;
>> sq = A*square(w*t+rho);
>> plot(t,sq);
En la segunda línea, pi es una función interna de matlab que calcula el número más cercano
a la constante PI en formato de coma flotante. El último comando es usado para ver la señal
generada. El comando plot dibuja líneas conectando los valores sucesivos de la señal y así
da la apariencia de una señal en tiempo continuo.
A * sawtooth(w * t + Wdt)
>> 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 gráfica.
a :
>> A = 1;
>> omega = pi / 4;
>> rho = 0.5;
>>n = -10:10;
>>x = A*square(omega*n +rho);
>>stem(n,x);
SEÑALES EXPONENCIALES
B * exp(-a*t);
B * exp( a * t);
>> B = 5;
>> a = 6;
>> t = 0:0.001:1;
>> x = B * exp( -a * t ); % señal exponencial decreciente.
>> plot( t, x );
Siendo el resultado como sigue:
Para la generación de una señal 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 ) ;
SEÑALES SENOISOIDALES.
MATLAB también contiene funciones trigonométricas que pueden ser usadas para generar
señales senosoidales. Una señal 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 función seno para generar una señal senosoidal
usando el siguiente comando:
A * sin ( w0 * t + phi );
>> 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);
Debido a que tanto la componente senosoidal de la señal como la exponencial son vectores,
el procedimiento para la generación de la señal final requiere de una multiplicación de dos
vectores elemento por elemento. En MATLAB este tipo de multiplicación se representa
usando el símbolo punto (.) seguido por el símbolo asterisco (*). Así el comando para
generar la ecuación anterior sería;
>> A = 60;
>> w0 = 20 * pi;
>> phi = 0;
>> a = 6;
>> expsen = A * sin( w0 * t + phi) .* exp ( -a * t);
>>plot(t,expsen);
>> A = 10;
>> a = -0.1;
>> w0 = 2 * pi / 12;
>> phi = 0;
>> n = -10 : 10;
Señal Paso:
Una señal paso de amplitud uno, puede ser generada con el siguiente comando.
Para la versión continua creamos un vector que represente el tiempo el cual tenga muestras
de un intervalo separados por valores muy pequeños mientras que para la representación de
esta señal 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 señal se muestran a continuación:
>> u=[zeros(1,10),ones(1,11);
>> t=-1:0.1:1;
>> plot(t,u)
1 21 1 21 1 21
Señal Impulso:
La versión discreta de la señal impulso se puede también generar con ayuda de las
funciones zeros() y ones(), realizando una composición como sigue:
Una versión continua podría evidentemente generarse usando la misma técnica que se usó
en el apartado anterior, sin embargo es necesario aumentar el número de muestras a fin de
maximizar la pendiente de la señal, en seguida se verán dos ejemplos con diferentes
número 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
tamaño de muestras del vector que representa el tiempo es necesario aumentar el valor de
ceros y de unos con el cual se esta creando la señal.
Señal Rampa
Para generar la señal rampa, tan solo es necesario recordar que esta función puede ser
creada, como la composición 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 versión discreta y continua se muestran a
continuación:
>> rampa1=n1;
>> n1=0:30;
>> rampa1=n1;
>> rampa = [zeros(1,29),rampa1];
>> stem(n,rampa)
>> t1=0:0.1:10;
>> rampa1=t1;
>> rampa=[zeros(1,101),rampa1];
>> t2=-10:0.1:0;
>> t=[t2,t1];
>> plot(t,rampa)
EXPERIMENTOS
4. Una señal senosoidal con amortiguación exponencial esta definida por la siguiente
expresión:
Transformada de
Series de Fourier
Continuas Fourier
( FS )
( FT )
La siguiente tabla muestra las relaciones matemáticas utilizadas para calcular las
representaciones de Fourier.
Continuas
Series discretas de Fourier Transformada discreta de Fourier
Discretas
>> X=fft(x)/N
>>x=ifft(X)*N
La señal 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 cálculo son:
>> n = 0:23;
>> x = ones(1,24) + sin( (n * pi / 12) + (3 * pi / 8 ) );
>> X = fft(x)/24;
El resultado teórico del ejemplo es el siguiente:
X=
Columns 1 through 5
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
Columns 16 through 20
Columns 21 through 24
>> 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 señal
original. Sin embargo al realizar la conversión de esta señal al dominio de la
frecuencia, la identificación de estas componentes se hace más sencilla. La
conversión de la señal al dominio de la frecuencia se hace calculando la
Transformada R ápida de Fourier, tomando para el cálculo los primeros 512
puntos de la señal. El espectro de potencia es una medida de la potencia a varias
frecuencias, y este puede ser calculado con los siguientes comandos.
Para realizar la gráfica se puede tener en cuenta que la información que aparece
en el arreglo Pyy es por propiedades de la transformada, simétrica con respecto a
la frecuencia media, es decir que si tenemos 512 puntos de muestra, la señal que
esta almacenada en el arreglo es simétrica con respecto a la muestra 256, 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 continuación:
>> f = 1000*(0:256)/512;
>> plot(f,Pyy(1:257))
>> 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 señales de las cuales se formo la señal contaminada con ruido tienen estas
frecuencias fundamentales.
CONVOLUCIÓN
y = conv(x, h)
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
convolución se puede calcular en Matlab de la siguiente manera:
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
señales pueden ser definidas en Matlab usando los siguientes comandos:
>> h = ones(1,10);
>> x = ones(1,5);
>> n = 2:15;
>> y = conv(x, h);
>> stem(n, y);
Si la respuesta al impulso es cero para los tiempos n<kh, entonces el cálculo se realiza
convolucionando los primeros p valores de h[n] con una señal paso de longitud p. Es decir
se construye un vector h’ con los primeros pvalores diferentes de cero de la respuesta al
impulso h, luego se define una señal paso de duración p con el siguiente
comando u=ones(1,p), y entonces se evalúa la siguiente convolución s = conv(u,h). El
primer elemento de s corresponde a el tiempo kh y los primeros p valores de s representan
los primeros p valores de la respuesta paso. Los valores sobrantes de s no corresponden a la
respuesta paso.
Por ejemplo se podría determinar los 50 primeros valores de la respuesta paso del sistema
con la siguiente respuesta al impulso:
>> h = (-0.9).^[0:49];
>> u = ones(1,50);
>> s= conv(u, h);
>>stem([0:49],s(1:50));
En este ultimo comando se pasan a la función stem dos parámetros diferentes a los
mostrados en los anteriores ejemplos, el primero es un vector anónimo de 50 posiciones
desde 0 hasta 49 que representa el tiempo, se dice que el vector es anónimo puesto que no
se le ha definido algún nombre. El segundo parámetro es el vector s que se había calculado
anteriormente, pero en este caso se agrega la fracción de código (1:50) que indica a Matlab
que debe usar tan solo los elementos de s que están almacenados desde la posición 1 hasta
la 50.