Académique Documents
Professionnel Documents
Culture Documents
La seleccin del intervalo est condicionada por dos requisitos contrapuestos. Por una parte,
cuanto ms pequeo sea, ms precisa ser la representacin de la funcin; en otras palabras,
la representacin tendr un aspecto ms continuo, mientras que, cuanto ms grande sea, la
representacin se parecer ms a un conjunto de puntos (los valores de la funcin para los
distintos instantes) unidos por lneas.
La operacin de unir los diferentes puntos de la representacin es ejecutada automtica-
mente por Matlab. Por otro lado, cuanto ms pequeo sea el intervalo, ms tiempo tardar
Matlab en completar la instruccin y mayor espacio de memoria se ocupar en el ordenador.
Para intervalos excesivamente pequeos, que den origen a un gran nmero de valores en la
base, la instruccin puede ser rechazada por el programa, ya que ste impone un lmite mxi-
mo (que depende de la versin concreta de Matlab de la que se trate) al nmero de elementos
que puede contener un vector.
Una forma equivalente para definir la base de tiempos consiste en utilizar la instruccin
t = linspace(valorinicial, valor final, nmeropuntos) % Define la base
% de tiempos
% valorinicial: primer valor del tiempo para el que queremos representar la funcin
% valorfinal: ltimo valor del tiempo para el que queremos representar la funcin
% nmeropuntos: nmero de valores del tiempo incluidos en la base de tiempos
Obsrvese que ambas formas son completamente equivalentes ya que existe una relacin
inmediata entre la separacin entre dos valores de la base de tiempos y el nmero de puntos
incluidos en ella. Obviamente, en la instruccin linspace los valores del tiempo estn equies-
paciados en la base.
Antes de continuar conviene precisar que estas formas de definir la base de tiempos se de-
nominan lineales, ya que la variacin entre los distintos valores del tiempo incluidos en la
base es lineal. Existen otras formas de variar los valores del tiempo (o de otras variables) en la
base, pero sern tratadas ms adelante.
Relacionados con la base de tiempos hay otros aspectos que conviene destacar. El primero
de ellos es cmo determinar el nmero total de valores del tiempo incluidos en la base. Para
ello puede usarse la instruccin
length(t) % Determina la longitud del vector t
% t: vector base de tiempos definido antes de la ejecucin de esta instruccin
Para determinar en qu posicin de la base se encuentra un determinado valor del
tiempo puede usarse la instruccin
po = find(t == to) % Determina la posicin dentro de la base de tiempos
% en la que se encuentra el valor t0 de t
Esta instruccin debe usarse con precaucin. Dependiendo de la base de tiempos y de los
redondeos internos del ordenador, puede ocurrir que no haya ningn valor de t que coincida
exactamente con , con lo cual esta sentencia no producira ningn resultado y las que vayan
a continuacin de ella conduciran a resultados no esperados.
Las posiciones en la base de tiempo estn numeradas automticamente, de forma que la
posicin 1 corresponde al valor inicial y la posicin ( ) corresponde al valor final. En con-
secuencia, para determinar el valor del tiempo correspondiente a una determinada posicin
puede utilizarse la instruccin
T = 1;
V = 0.5;
H = 2;
tt = H*(-(t+T));
y = V*funccomb(tt); % Operacin combinada
subplot (3, 2, 6); % Recuadro
plot (t, y, 'b', 'LineWidth', 2); % Funcin en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Combinacin', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([(3/4)*tmin, (3/4)*tmax, -(2/3)*max(y), (3/2)*max(y)]); % rea de dibujo
clear all; % Elimina las variables utilizadas en esta rutina
offset=ones(1,length(t));
y1=2.5*(offset+sawtooth(2*pi*1e3*t));
plot(t,y1)
grid on
P6) Generar una seal diente de sierra con flanco a la derecha, de 5 voltios de amplitud, y
perodo de 10 segundos. La seal se almacenara en la variable ( ).
P7) z=exp(y);
plot(t1,z)
P8) p=y.*y;
plot(t1,p)
P9) Generar una seal diente de sierra con flanco a la derecha, izquierda; y una seal trian-
gular simtrica.
y=sawtooth(t,0);
subplot(1,3,1)
plot(t1,y)
subplot(1,3,2)
y=sawtooth(t,1);
plot(t1,y)
subplot(1,3,3)
y=sawtooth(t,.4);
plot(t1,y)
P10) Para generar 2 segundos de un pulso triangular (respectivamente rectangular) a una tasa
de muestra de 10 kHz (t =1/fs=0.0001) y un ancho de 20 ms, use:
fs = 10000;
t = -1:1/fs:1;
x1 = tripuls(t,20e-3);
x2 = rectpuls(t,20e-3);
subplot(211),plot(t,x1), axis([-0.1 0.1 -0.2 1.2])
ING. ARMANDO ALBERTO CAJAHUARINGA CAMACO Pgina 7
ANALISIS DE SEALES Y SISTEMAS GENERACION DE SEALES
xlabel('Tiempo (seg)');
ylabel('Amplitud');
title('Pulso Triangular Aperiodico')
subplot(212),plot(t,x2), axis([-0.1 0.1 -0.2 1.2])
xlabel('Tiempo (seg)');
ylabel('Amplitud');
title('Pulso Rectangular Aperiodico')
% set(gcf,'Color',[1 1 1]),
La funcin sawtooth genera una onda diente de sierra con picos de 1 con un periodo de
2*pi. Un parmetro opcional width especifica a mltiplo fraccional de 2*pi para el cual ocurre
los mximos de la seal.
La funcin square genera una onda cuadrada con un periodo of 2*pi. Un parmetro opcional
especifica el duty cycle, el porcentaje del periodo para el cual la seal es positiva.
P11) Generar 1.5 segundos de una onda diente de sierra (respectivamente cuadrada) a 50 Hz
(ancho de 1/50=0.02) con una tasa de muestreo de 10 kHz (incremento, 1/10 KHz=0.1 ms),
use:
fs = 10000;
t = 0:1/fs:1.5;
x1 = sawtooth(2*pi*50*t);
x2 = square(2*pi*50*t);
subplot(211),plot(t,x1), axis([0 0.2 -1.2 1.2])
xlabel('Time (sec)');
ylabel('Amplitude');
title('Sawtooth Periodic Wave')
fc=2e9;
fs = 20e9; % sample freq
D = [2.5 10 17.5]' * 1e-9; % pulse delay times
t = 0 : 1/fs : 2500/fs; % signal evaluation time
w = 4e-9; % width of each pulse
yp = pulstran(t,D,@rectpuls,w);
if we plot this using matlab.. it will generate rectangular pulse train with amplitude varying
from 0 to 1.. But how to modify this code so that it has to generate a pulse (amplitude) vary-
ing from (-1 to 1);
Muhammad Hanif
plot(t,y)
P13) Ejemplo 2
This example generates a periodic Gaussian pulse signal at 10 kHz, with 50% bandwidth. The
pulse repetition frequency is 1 kHz, sample rate is 50 kHz, and pulse train length is 10 msec.
The repetition amplitude should attenuate by 0.8 each time:
t = 0:1/50E3:10e-3;
d = [0:1/1E3:10e-3; 0.8.^(0:10)]';
y = pulstran(t,d,'gauspuls',10e3,0.5);
plot(t,y)
P14) Ejemplo3
Se genera un arco de parbola en t1 y se 0.09
t1=0:1/fs:0.3; 0.03
y=t1.^2;
0.02
d=[0 0.3 0.6 0.9];
v=pulstran(t,d,y,fs); 0.01
plot(t,v) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
a) ( )= ( ), Escaln unitario.
.
b) ( )= Seal exponencial real.
.
c) ( )= Exponencial real que empieza en t=0.
.
d) ( )= (6 ) Sinusoide amortiguada.
5
.
e) ( )= (6 ) Sinusoide amortiguada que empieza en t=0.
5
f) ( )= Exponencial compleja. Graficar parte real e imaginaria.
Hay que calcular la ecuacin para la recta que va entre t=-2 y t=0. Esta recta tendr
la ecuacin tpica: r(t) = mt + b donde:
ING. ARMANDO ALBERTO CAJAHUARINGA CAMACO Pgina 11
ANALISIS DE SEALES Y SISTEMAS GENERACION DE SEALES
Por tanto, ( ) entre -2 y 0 (y slo entre -2 y 0) es igual a la expresin: t/2+1. Por supuesto,
( ) es igual a 1 entre 0 y 2 e igual a cero en el resto de intervalos. Veamos como crear el
vector de seal.
L = length(t); % Averiguar la longitud
x = zeros(l,L); % Primero todo ceros
pl = find(t==-2); % Busco el -2
p2 = find(t==0); % Busco el 0
p3 = find(t==2); % Busco el 2
% Con el incremento elegido; -2, 0 y 2 estarn
% en la base de tiempos
x(pl:p2) = t(pl:p2)/2+1; % Parte de recta creciente
x(p2:p3) = 1; % Parte constante
% x en t=0 lo hemos calculado con dos formulas
% dando el mismo resultado
Una vez que tenemos la seal ( ) en matlab vamos a realizar algunas operaciones simples
con ella.
Solucin 1:
Sabemos que la seal es la misma pero todos los puntos se trasladan de tiempo t a tiempo
t+3. Esto es: basta con sumar 3 a la base de tiempos.
t1 = t + 3;
xl = x;
Solucin 2:
Movemos el vector de valores 3 unidades de tiempo hacia delante (y hacemos crecer la base
de tiempos).
t_aux = 0.05:0.05:3; % Tres unidades de tiempo
% No empieza en cero porque lo vamos a
% aadir por la derecha
L3 = length(t_aux);
ING. ARMANDO ALBERTO CAJAHUARINGA CAMACO Pgina 12
ANALISIS DE SEALES Y SISTEMAS GENERACION DE SEALES
Ntese que haciendo esto hemos dividido por dos el "incremento temporal" de la base de
tiempos (los tiempos ahora estn separados 0.025 segundos).
Lextra = length(t1)-length(t);
% Diferencia de longitudes temporales
% (en numero de valores)
t = t1; % Extendemos la base de tiempos de
x = [x zeros(1,Lextra)]; % Aadimos ceros
t4 = t;
x4 = x + x1; % Calcular la seal suma (x4)
EJERCICIO
Generar la seal ( ) de la figura y calcular y representar
las seales: 1( ) = ( 2), 2( ) = ( /3), 3( ) =
( ), 4( ) = ( ) 1( ).
Concepto de Sistema
Ahora vamos a realizar en Matlab un par de sistemas sencillos. Los textos de teora
definen un sistema como cualquier ente capaz de transformar seales. Para afianzar la idea de
que un sistema transforma seales vamos a usar el concepto de "funcin de Matlab" (que ya
conocemos de la prctica introductoria) para crear nuestros primeros sistemas.
Un sistema lo vamos a definir como una funcin que podemos crear con el editor de Matlab
(o con cualquier otro editor) utilizando una cabecera del tipo:
Ntese que hemos querido reforzar la idea de que una seal en Matlab es una base de
tiempos y un vector de valores. La funcin recibe como argumentos los dos vectores de la
seal ( ) (entrada) y devuelve como resultados los dos vectores de la seal ( ) (salida).
Por ejemplo, para implementar el sistema que eleva al cuadrado ( ( ) = [ ( )] )
podemos usar la funcin:
function [y,ty] = Cuadrado(x,tx)
ty = tx; % La base de tiempos es la misma
y = x.^2; % Los valores se elevan al cuadrado
Si se conservan las variables del apartado anterior se puede probar esta funcin:
[y,ty] = Cuadrado(x,t);
% Fijaos en la diferencia entre el nombre
% de la variable t y el del argumento tx
Ejercicio
Crear una funcin que desplace la seal de entrada unidades de tiempo hacia la derecha (es
decir: implementad el sistema: ( )= ( )). Ntese que la funcin deber recibir al me-
nos , como parmetro de entrada adicional, con lo que la cabecera ser:
Nota.- Probablemente, tambin ser necesario conocer el incremento temporal que existe en-
tre los valores de la base de tiempos de entrada. Pueden aadirlo como parmetro pero Se
puede deducirlo a partir de ?