Está en la página 1de 34

Prácticas de circuitos como sistemas lineales.

Ejercicios sencillos con Matlab 1

1 Representación de señales
En esta sección vamos a proporcionar las bases para representar gráficamente funcio-
nes con ayuda de Matlab. El caso de mayor interés en la asignatura a la que se refiere este
manual es aquél en el que tales funciones son señales dependientes del tiempo. Es decir, se
trata de obtener gráficas en las que el eje de abscisas corresponde al tiempo, y el eje de or-
denadas indica los valores que toma una determinada magnitud eléctrica (corriente, tensión,
potencia, etcétera) en función del tiempo.
En el primer apartado de la sección indicaremos cómo definir la base de tiempos; en
otras palabras, mostraremos cómo establecer el rango de valores de la variable tiempo para
el que interesa representar los valores de la magnitud considerada. Seguiremos exponiendo
la forma de obtener una representación básica, y a continuación detallaremos cómo editar la
figura resultante y cómo combinar distintas funciones en una sola gráfica.
En el segundo apartado proporcionaremos unos cuantos códigos de Matlab que pue-
den usarse para representar algunas de las señales más utilizadas en el estudio de sistemas li-
neales. Para cada código detallaremos algunos aspectos particulares que pueden tener rele-
vancia en la representación de otras señales. El tercer y último apartado contiene algunos
ejercicios propuestos que el lector puede intentar resolver para comprobar el grado de asi-
milación de los contenidos de esta sección.
Cabe mencionar que en ninguna parte de este manual se habla de la convolución, pese
a la importancia que tiene esta operación en análisis de sistemas lineales y a que Matlab con-
tiene una instrucción relacionada con ella. Esta ausencia está justificada por el hecho de que
la convolución presenta diferencias cuando se aplica a señales continuas y a discretas. El tra-
tamiento de Matlab corresponde a estas últimas, que no se contemplan en este manual.

1.1 Elementos básicos de una representación gráfica

Base de tiempos

La definición de la base de tiempos se hace creando un vector que almacena los valo-
res del tiempo para los que se desea obtener una representación de la función. Por ejemplo,
si queremos representar la variación de una función entre -10 s y 10 s, los valores inicial y
final del vector correspondiente a la base de tiempos serán precisamente los que acabamos
de indicar. Idealmente, querríamos que dicho vector fuera un conjunto infinito en el que es-

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
2 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

tuvieran incluidos todos los valores comprendidos entre -10 s y 10 s. De esa forma obten-
dríamos una representación absolutamente precisa de la función. Sin embargo, Matlab no
permite semejante posibilidad, ya que es una herramienta discreta. En consecuencia, a la
hora de definir la base de tiempos hemos de especificar el intervalo entre dos valores conse-
cutivos del tiempo. Así, si en el ejemplo que estamos considerando especificamos un inter-
valo de 0.01 s, los valores del tiempo contenidos en el vector de la base de tiempos son -10
s, -9.99 s, -9.98 s,... -0.01 s, 0 s, 0.01 s,... 9.98 s, 9.99 s y 10 s. Teniendo en cuenta estas
consideraciones, la instrucción para definir la base de tiempos es

t = valorinicial: intervalo: valorfinal % Define la base de tiempos

% valorinicial: primer valor del tiempo para el que queremos representar la función
% intervalo: separación entre dos valores consecutivos del vector base de tiempos
% valorfinal: último valor del tiempo para el que queremos representar la función

La selección del intervalo está condicionada por dos requisitos contrapuestos. Por una
parte, cuanto más pequeño sea, más precisa será la representación de la función; en otras
palabras, la representación tendrá un aspecto más continuo, mientras que, cuanto más gran-
de sea, la representación se parecerá más a un conjunto de puntos (los valores de la función
para los distintos instantes) unidos por líneas. La operación de unir los diferentes puntos de
la representación es ejecutada automáticamente por Matlab. Por otro lado, cuanto más pe-
queño sea el intervalo, más tiempo tardará Matlab en completar la instrucción y mayor es-
pacio de memoria se ocupará en el ordenador. Para intervalos excesivamente pequeños,
que den origen a un gran número de valores en la base, la instrucción puede ser rechazada
por el programa, ya que éste impone un límite máximo (que depende de la versión concre-
ta de Matlab de la que se trate) al número de elementos que puede contener un vector.
Una forma equivalente para definir la base de tiempos consiste en utilizar la instrucción

t = linspace (valorinicial, valor final, númeropuntos) % Define la base


% de tiempos

% valorinicial: primer valor del tiempo para el que queremos representar la función
% valorfinal: último valor del tiempo para el que queremos representar la función
% númeropuntos: número de valores del tiempo incluidos en la base de tiempos

Obsérvese que ambas formas son completamente equivalentes ya que existe una rela-
ción inmediata entre la separación entre dos valores de la base de tiempos y el número de
puntos incluidos en ella. Obviamente, en la instrucción linspace los valores del tiempo están
equiespaciados en la base.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 3

Antes de continuar conviene precisar que estas formas de definir la base de tiempos se
denominan lineales, ya que la variación 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 serán tratadas más adelante.
Relacionados con la base de tiempos hay otros aspectos que conviene destacar. El pri-
mero de ellos es cómo determinar el número total de valores del tiempo incluidos en la
base. Para ello puede usarse la instrucción

length (t) % Determina la longitud del vector t

% t: vector base de tiempos definido antes de la ejecución de esta instrucción

Para determinar en qué posición de la base se encuentra un determinado valor del


tiempo puede usarse la instrucción

p0 = find(t == t0) % Determina la posición dentro de la base de tiempos


% en la que se encuentra el valor t0 de t

Esta instrucción debe usarse con precaución. Dependiendo de la base de tiempos y de


los redondeos internos del ordenador, puede ocurrir que no haya ningún valor de t que
coincida exactamente con t0, con lo cual esta sentencia no produciría ningún resultado y las
que vayan a continuación de ella conducirían a resultados no esperados.
Las posiciones en la base de tiempo están numeradas automáticamente, de forma que
la posición 1 corresponde al valor inicial y la posición length(t) corresponde al valor final.
En consecuencia, para determinar el valor del tiempo correspondiente a una determinada
posición puede utilizarse la instrucción

t(i) % Determina el valor de t que se encuentra en la posición i en la base de tiempos

% i: número indicativo de una determinada posición en la base de tiempos

Representación de una función

La definición previa de la base de tiempos no es necesaria cuando se quiere represen-


tar una función de la forma más sencilla posible. Ésta consiste en definir una función me-
diante un vector de valores de la función y luego hacer la representación en función de las
posiciones que ocupan dichos valores en el vector correspondiente. Es decir, habríamos de
ejecutar las instrucciones

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
4 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

y = y1:y2:...yn; % Define un vector de valores de la función y


plot (y) % Representa la función

De esta forma tendríamos en el eje de abscisas las posiciones del vector y en el eje de
ordenadas los valores correspondientes a dichas posiciones. Este tipo de representación grá-
fica apenas tiene interés con relación a los objetivos del presente manual.
La forma habitual de representar gráficamente una función consiste en utilizar la ins-
trucción

plot (t, y) % Representa la función y(t)

% t: base de tiempos definida con anterioridad a la aplicación de esta instrucción


% y: función matemática definida con anterioridad a la aplicación de esta instrucción

Con esta instrucción obtenemos los valores del tiempo (no los de posiciones) en el eje
de abscisas, mientras que en el de ordenadas tenemos los valores de la función correspon-
dientes a los diferentes instantes.
En este tipo de representación Matlab intenta presentar al usuario una curva continua
(recuérdese lo indicado más arriba a propósito de la influencia de la selección del intervalo
en la definición de la base de tiempos). Sin embargo, por distintos motivos puede interesar
prescindir de dicha representación continua y obtener en su lugar una representación dis-
creta. En ese caso utilizaríamos la instrucción

stem (t, y) % Representa únicamente los valores de la función y(t)


% correspondientes a los valores del tiempo incluidos en la base

% t: base de tiempos definida con anterioridad a la aplicación de esta instrucción


% y: función matemática definida con anterioridad a la aplicación de esta instrucción

Así obtendríamos un conjunto de puntos, denotados por pequeños círculos, tales que
cada uno está definido por un par de valores de t y de y. La representación se completa
con líneas verticales que unen los distintos puntos con el eje de abscisas.
Con lo indicado hasta aquí basta para obtener una representación gráfica de cualquier
función real continua. Sin embargo, en numerosos casos de interés práctico conviene editar
la representación (es decir, alterar algunos aspectos adicionales de la misma) a fin de desta-
car ciertos detalles de aquélla o facilitar su interpretación.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 5

Edición: características de la línea representativa de la función

Una posibilidad de edición consiste en fijar el color de la curva representativa de y(t).


Pueden utilizarse diversos colores, como el negro (k), el azul (b), el amarillo (y), el rojo (r),
el verde (g), etcétera. La instrucción correspondiente es

plot (t, y, ‘i’) % Representa la curva con el color i

% i: color elegido para la representación de una función

En principio, Matlab hace las representaciones con línea continua. Pero también es po-
sible conseguir una representación a puntos o a rayas discontinuas de la curva. En ese caso,
la instrucción a utilizar es

plot (t, y, ‘s’) % Representa la función y(t) de forma no continua


% s = .: la línea es representada a puntos
% s = --: la línea es representada con raya discontinua

También puede variarse el grosor de la línea representativa de la función y(t). Para ello
puede utilizarse la instrucción

plot (t, y, ‘LineWidth’, i) % Hace que la línea representativa de la función y(t)


% tenga un grosor de i puntos

% i: grosor (en puntos) de la línea representativa de la función y(t)

A falta de indicación respecto al grosor a utilizar, Matlab representa la función automá-


ticamente con un grosor de 1 punto.

Edición: ejes coordenados

Otro elemento de edición es la alteración de los valores extremos que definen los ejes
coordenados. En principio, Matlab establece automáticamente los ejes, adjudicando a sus
extremos los valores extremos de la base de tiempos y de la función. Por ejemplo, si se re-
presenta la variación de una función entre los instantes 2.5 s y 7.3 s y dicha variación está
comprendida entre -1.8 y 3, el eje de abscisas de la representación cubrirá el intervalo 2.5-
7.3 s y el eje de ordenadas, el intervalo -1.8-3. Si se desea alterar los límites de los ejes de
coordenadas puede utilizarse la instrucción

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
6 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

axis ([xo, xn, yo, yn]) % Define los límites extremos de los ejes de coordenadas

% xo xn: valores extremos del eje de abscisas


% yo yn: valores extremos del eje de ordenadas
% Esta instrucción debe ir después de la instrucción plot

Con la curva representada en la gráfica Matlab asigna automáticamente los identificati-


vos correspondientes a los ejes de abscisas y de ordenadas (por ejemplo, “tiempo” y “co-
rriente”, respectivamente), al igual que lo hace con los números que han de figurar en tales
ejes. Tales identificativos pueden ser modificados mediante la instrucción

xlabel (‘texto’, ‘FontName’, ‘f’, ‘Fontsize’, s) % Etiqueta el eje de abscisas


ylabel (‘texto’, ‘FontName’, ‘f’, ‘Fontsize’, s) % Etiqueta el eje de ordenadas

% texto: texto que se desea que figure como indicativo del eje
% f: tipo de letra (Helvética, Times, Courier, etcétera)
% s: tamaño de letra (10, 12, 14,... puntos)

Para modificar las características de los números que aparecen en los ejes puede utili-
zarse la instrucción

set (gca, ‘FontName’, ‘f’, ‘Fontsize’, s) % Cambia las características


% de los números de los ejes

% f: tipo de letra (Helvética, Times, Courier, etcétera)


% s: tamaño de letra (10, 12, 14,... puntos)

El proceso de edición relativo a los ejes puede completarse añadiendo la instrucción

title (‘texto’) % Genera un título para la figura

% texto: el texto que se desea que aparezca como título de la figura

Con esta instrucción aparece un texto centrado en la parte superior de la figura, fuera
del espacio delimitado por los ejes. Naturalmente, las características particulares de este
texto (tipo, tamaño y color de letra) pueden ser variadas de la misma forma que se indicó
anteriormente para otras instrucciones.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 7

Edición: enmallado de la figura

Otra posibilidad de edición consiste en añadir una malla a la figura. Esto puede conse-
guirse utilizando simplemente la instrucción

grid on % Introduce una rejilla en la figura

Las rectas que definen la malla parten de los puntos de los ejes a los que se ha asigna-
do números en la representación.
En ocasiones puede interesarnos tener, no una malla completa, sino una restringida. Es
decir, se trata de marcar determinados puntos especiales en los ejes y hacer que salgan úni-
camente de ellos las rectas de la malla. Además, podemos querer etiquetar los puntos de los
ejes desde los que parten las rectas de la malla. Ambas funciones pueden realizarse de
forma combinada mediante la instrucción

set (gca, ‘xtick’, [x1 x2 ... xn], % Etiqueta los ejes coordenados
‘XTickLabel’, {‘tx1’; ‘tx2’; ... ‘txn’}, % y define una malla
‘ytick’, [y1 y2 ... ym], % especificada por el usuario
‘YTickLabel’, {‘ty1’; ‘ty2’; ... ‘tym}’)

% x1 x2 ... xn: puntos del eje de abscisas de los cuales han de partir las rectas de la malla
% tx1 tx2 ... txn: textos asignados a los puntos del eje de abscisas
de los cuales han de partir las rectas de la malla
% y1 y2 ... ym: puntos del eje de ordenadas de los cuales han de partir las rectas de la malla
% ty1 ty2 ... tym: textos asignados a los puntos del eje de ordenadas
de los cuales han de partir las rectas de la malla
% Esta instrucción ha de ir precedida de la de grid on

Evidentemente, esta instrucción puede incluir las características de las letras (tipo y ta-
maño) que se desean. Para ello basta incluir las especificaciones correspondientes, indicadas
más arriba, a continuación de la especificación de los textos de cada eje.

Obtención de distintas curvas con una sola rutina

En principio, si damos a Matlab las instrucciones para representar distintas curvas


como resultado de la ejecución de una única rutina, el programa nos presentará sólo la últi-
ma. Para poder ver todas las curvas generadas como consecuencia de la ejecución de la ru-
tina hay distintas posibilidades.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
8 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

La primera de ellas consiste en utilizar la instrucción

figure % Permite obtener distintas figuras mediante la ejecución de una sola rutina

% La instrucción ha de insertarse separando los bloques


% correspondientes a las especificaciones de cada representación

Las distintas figuras son presentadas de forma agrupada, de modo que en principio
sólo se ve la última. Desplazando el cuadro correspondiente a ésta, aparece a la vista la figu-
ra precedente.
Una alternativa a esta posibilidad consiste en utilizar la instrucción

pause on % Genera figuras secuencialmente

% Separa los bloques correspondientes a dos figuras

En este caso cada figura desaparece antes de ser presentada la siguiente, pero sólo
cuando el usuario pulsa la tecla de retorno; mientras no lo hace, se mantiene la imagen de la
última figura generada. Para evitar la interacción entre dos programas que contienen esta
instrucción y que se ejecutan secuencialmente conviene cerrar cada uno de ellos con la ins-
trucción

pause off % Cancela los efectos de instrucciones pause anteriores

Otra posibilidad consiste en utilizar la instrucción

hold on % Representa diversas funciones en una sola figura

% Ha de ir precedida de la sentencia plot correspondiente a la primera función a representar


% Va seguida de las características de los ejes y del enmallado

Con esta instrucción todas las curvas generadas durante la ejecución de la rutina se
presentan en una única figura, cuyas características de ejes y enmallado son las definidas
para la representación de la primera curva. A este respecto debe tomarse la precaución de
asegurar previamente que todas las funciones pueden representarse en el cuadrado seleccio-
nado por la definición de los ejes (si está presente) correspondientes a la primera figura; si
una de ellas cae fuera del área de dibujo (la definida por los ejes o la establecida automática-
mente por Matlab si tal definición no está presente), naturalmente no será representada.
Al igual que ocurría con la instrucción pause conviene terminar el programa con la
instrucción

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 9

hold off % Cancela los efectos de instrucciones hold on anteriores

Una cuarta posibilidad de visualizar las distintas curvas generadas durante la ejecución
de una rutina consiste en dividir una figura en diversos recuadros y representar una o más
curvas (mediante la aplicación de la instrucción hold on) en cada uno de ellos. La definición
de los recuadros se hace mediante la instrucción

subplot (filas, columnas, cuadro) % Divide la figura en recuadros


% y selecciona uno de ellos

% filas: número de filas de la matriz que constituye el conjunto de recuadros


% columnas: número de columnas de la matriz que constituye el conjunto de recuadros
% cuadro: número identificativo del recuadro seleccionado
% La numeración de recuadros se hace por filas y luego por columnas
(en una matriz 2 x 2 el recuadro 3 es el correspondiente a la fila 2 y la columna 1)
% Esta instrucción precede a la de plot

Combinación de diversas funciones en una sola

En ocasiones se desea combinar dos funciones del tiempo en una sola. Por ejemplo,
puede interesarnos combinar las funciones y1 = 3t - 2 e y2 = t + 1 en una única función
y(t).
Una posibilidad es la ya comentada en el epígrafe anterior a propósito de la utilización
de la sentencia hold on.
Otra posibilidad consiste en definir cada función por separado (con su correspondiente
base de tiempos, que no tiene por qué ser igual para ambas) y a continuación aplicar las ins-
trucciones

t = [t1 t2 ... tn]; % Combina las bases de tiempo en una sola


y = [y1 y2 ... yn]; % Combina las distintas funciones en una sola
plot (t, y) % Representa la función combinada

La diferencia entre ambas posibilidades es que la primera permite observar claramente


cualquier discontinuidad que haya entre las funciones que se combinan, mientras que en la
segunda Matlab añade una línea de conexión entre aquéllas, con lo que las discontinuidades
entre ellas, si existen, quedan enmascaradas.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
10 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

1.2 Algunas funciones de interés en sistemas lineales

A continuación vamos a presentar los códigos correspondientes a rutinas que pueden


ser utilizadas para representar funciones continuas del tiempo. El propósito principal de esta
sección es ilustrar con ejemplos concretos la utilización de las instrucciones mencionadas en
la sección anterior. En consecuencia, se recomienda encarecidamente al lector que examine
detenidamente los distintos códigos y que se asegure de que entiende por qué se utilizan
unas sentencias y no otras en cada caso concreto. Un ejercicio interesante en este sentido es
tratar de conseguir el mismo objetivo fijado para cada rutina, pero utilizando juegos de ins-
trucciones diferentes.
Por otro lado, es preciso tener en cuenta que, como es obvio, algunas de las sentencias
incluidas en dichos códigos han de estar presentes obligatoriamente si se desea que tales có-
digos ejecuten las funciones para las que fueron diseñados. Sin embargo, otras sentencias (o
partes de sentencias) son de carácter voluntario. Cada programador tiene su propio estilo,
que no necesariamente coincide con el de otras personas, y eso se refleja, entre otras cosas,
en las opciones tomadas para representar figuras (malla, ejes, tamaño y tipo de letra, color
de las curvas, etcétera). En lo que sigue se aplica un estilo determinado, pero se sugiere al
lector que pruebe a alterar las características de edición de las distintas figuras.
Obsérvese, además, que todos los códigos empiezan y terminan con la instrucción

clear all % Elimina información de todas las variables

Esta instrucción tiene por objeto suprimir de Matlab la información relativa a cualquie-
ra de las variables utilizadas en una determinada rutina, de forma que no se altere inadverti-
damente la ejecución de otra rutina distinta. La sentencia del principio evita la posible in-
fluencia de variables procedentes de otras rutinas.

Coseno

El código adjunto puede utilizarse para generar la función coseno mostrada en la figu-
ra. Cabe observar que la curva no pasa por el origen de los ejes coordenados porque la fase
de la función no es nula.
También conviene destacar que no deben confundirse el periodo de la función (el de
cualquier función periódica), que es t0 en este caso, con el periodo de muestreo para efec-
tuar la representación (lo que hemos denominado intervalo más arriba), que vale 10-9 s en
este caso.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 11

%%%%% COSENO %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

t = -2*10^(-6):10^(-9):2*10^(-6); % Base de tiempos

T = 10^(-6); % Periodo de la función


f = 1/T; % Frecuencia de la función
w = 2*pi*f; % Frecuencia angular de la función
fase = pi/4; % Fase de la función
am = 2; % Amplitud de la función
y = am*cos(w*t + fase); % Función

plot (t, y, 'b', 'LineWidth', 2); % La curva aparece en azul con grosor 2
axis ([-1.5e-6, 1.5e-6, -2.5, 2.5]); % Define el área de dibujo
xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Etiq. abs.
ylabel ('coseno de periodo T', 'FontName', 'Times', 'Fontsize', 14) % Etiq. ord.
set (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto ejes
grid on; % Malla
set (gca, 'xtick', [-10^(-6) 0 10^(-6)], 'XTickLabel', {'-T'; '0'; 'T'}, 'FontName',
'Times', 'Fontsize', 12);
set (gca, 'ytick', [-2 0 2], 'YTickLabel', {'-A'; '0'; 'A'});
title ('Función coseno', 'FontName', 'Times', 'Fontsize', 24) % Título

clear all; % Elimina las variables utilizadas en esta rutina

Función coseno

y = Acos(ωt + ϕ)

ω = 2πf
coseno de periodo T

f = 1/T
0

Datos:

T, A

-A

-T 0 T
t (segundos)

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
12 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Exponenciales reales

El código adjunto permite obtener los cuatro tipos posibles de exponenciales reales.
Cada exponencial está caracterizada por el coeficiente del exponente y por el coeficiente de
la exponencial. Obsérvese que se ha utilizado la sentencia subplot para representar las cua-
tro curvas en una sola figura. Obsérvese también que la base de tiempos es única para todas
las figuras.
%%%%% FUNCIONES EXPONENCIALES %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

t = linspace (-2, 2, 1000); % Base de tiempos

c = -0.5; % Coeficiente del exponente


A = 2; % Coeficiente de la exponencial
y1 = A*exp(c*t); % Función

subplot (2, 2, 1); % Selección de recuadro


plot (t, y1, 'b', 'LineWidth', 2); % Curva en azul con grosor 2
xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisas
ylabel ('A > 0 c < 0', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadas
set (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejes
grid on; % Malla
axis ([-2, 2, -1, 7]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [0 2], 'YTickLabel', {'0'; 'A'}, 'FontName', 'Times', 'Fontsize',
12);
title ('Exponenciales decrecientes', 'FontName', 'Times', 'Fontsize', 24)% Título

c = 0.5; % Coeficiente del exponente


A = 2; % Coeficiente de la exponencial
y2 = A*exp(c*t); % Función

subplot (2, 2, 2); % Selección de recuadro


plot (t, y2, 'b', 'LineWidth', 2); % Curva en azul con grosor 2
xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisas
ylabel ('A > 0 c > 0', 'FontName', 'Times', 'Fontsize', 14); % Ejee ordenadas
set (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejes
grid on; % Malla
axis ([-2, 2, -1, 7]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [0 2], 'YTickLabel', {'0'; 'A'}, 'FontName', 'Times', 'Fontsize',
12);
title ('Exponenciales crecientes', 'FontName', 'Times', 'Fontsize', 24) % Título

c = 0.5; % Coeficiente del exponente


A = -2; % Coeficiente de la exponencial
y3 = A*exp(c*t); % Función

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 13

subplot (2, 2, 3); % Selección de recuadro


plot (t, y3, 'b', 'LineWidth', 2); % Curva en azul con grosor 2
xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisas
ylabel ('A < 0 c > 0', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadas
set (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejes
grid on; % Malla
axis ([-2, 2, -7, 1]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-2 0], 'YTickLabel', {'A'; '0'}, 'FontName', 'Times', 'Fontsi-
ze', 12)

c = -0.5; % Coeficiente del exponente


A = -2; % Coeficiente de la exponencial
y3 = A*exp(c*t); % Función

subplot (2, 2, 4); % Selección de recuadro


plot (t, y3, 'b', 'LineWidth', 2); % Curva en azul con grosor 2
xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisas
ylabel ('A < 0 c < 0', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadas
set (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejes
grid on; % Malla
axis ([-2, 2, -7, 1]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-2 0], 'YTickLabel', {'A'; '0'}, 'FontName', 'Times', 'Fontsi-
ze', 12);

clear all; % Elimina las variables utilizadas en esta rutina

Exponenciales decrecientes Exponenciales crecientes


A>0 c<0

A>0 c>0

A A

y = Aexp(ct) 0 0

0 0
t (segundos) t (segundos)
Datos:

c, A 0 0
A<0 c>0

A<0 c<0

A A

0 0
t (segundos) t (segundos)

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
14 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Exponenciales complejas

Las dos primeras curvas muestran la variación con el tiempo de las partes real e imagi-
naria de una función exponencial compleja. Obsérvese que para obtener tales partes se hace
uso de las instrucciones real e imag. Obsérvese también que tal variación es muy similar en
ambos casos; la única diferencia significativa es la existencia de un desfase entre ambas re-
presentaciones (se alejan en distinta medida del eje de ordenadas).
Las restantes cuatro curvas muestran la influencia de los signos de los parámetros en
la variación con el tiempo de las partes real e imaginaria de una función exponencial com-
pleja. Obsérvese que en este caso, al contrario que en el anterior, se hace uso de las instruc-
ciones cos y sin, respectivamente, para representar las partes real e imaginaria de una fun-
ción. Obviamente, ambos tipos de representaciones son completamente equivalentes. Obsér-
vese también que en esta rutina aparecen instrucciones de la forma
y = A*exp(sigma*t).*sin(w*t + fase) % Operación elemento a elemento

Mediante el operador .* se multiplican elemento a elemento los componentes de los


dos vectores que figuran en la instrucción. Más adelante veremos otros casos en los que se
utilizan operadores precedidos por puntos.

%%%%% FUNCIÓN EXPONENCIAL COMPLEJA (partes real e imaginaria) %%%%%

clear all % Elimina variables utilizadas en otras rutinas

t = -3*10^(-3): 10^(-5): 3*10^(-3) % Base de tiempos

am = 0.5; % Módulo de la amplitud compleja


fase = pi/4; % Fase de la amplitud compleja
A = am*exp(j*fase); % Amplitud compleja
sigma = 0.5*10^3; % Parte real del coeficiente del exponente
T = 10^(-3); % Periodo de la función
f = 1/T; % Frecuencia
w = 2*pi*f; % Frecuencia angular
s = sigma + j*w; % Coeficiente del exponente
y = A*exp(s*t); % Función

subplot (2, 1, 1); % Recuadro parte real


plot (t, real(y), 'b', 'LineWidth', 2); % Curva en azul de grosor 2
hold on
plot (t, abs(y), 'r'); % Envolvente de la parte superior (en rojo)
plot (t, -abs(y), 'r'); % Envolvente de la parte inferior (en rojo)
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisas
ylabel ('Parte real', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadas
grid on; % Malla
axis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 15

'Fontsize', 12);
title ('Exponencial compleja', 'FontName', 'Times', 'Fontsize', 24) % Título

subplot (2, 1, 2); % Recuadro parte imaginaria


plot (t, imag(y), 'b', 'LineWidth', 2); % Curva en azul de grosor 2
hold on
plot (t, abs(y), 'r'); % Envolvente de la parte superior (en rojo)
plot (t, -abs(y), 'r'); % Envolvente de la parte inferior (en rojo)
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisas
ylabel ('Parte imaginaria', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadas
grid on; % Malla
axis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',
'Fontsize', 12);
hold off

clear all; % Elimina las variables utilizadas en esta rutina

Exponencial compleja
y = Aexp(st)
Parte real

a
A = aejϕ
-a
s = σ + jω

ω = 2πf
0
t
f = 1/T
Parte imaginaria

Datos:
a
a, ϕ, σ, T -a

0
t

%%%%% FUNCIÓN EXPONENCIAL COMPLEJA (influencia de los parámetros) %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

t = -3*10^(-3): 10^(-5): 3*10^(-3); % Base de tiempos

am = 0.5; % Módulo de la amplitud compleja


fase = 0; % Fase de la amplitud compleja

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
16 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

A = am*exp(j*fase); % Amplitud compleja


sigma = 0.5*10^3; % Parte real del coeficiente del exponente
T = 10^(-3); % Periodo de la función
f = 1/T; % Frecuencia
w = 2*pi*f; % Frecuencia angular
s = sigma + j*w; % Coeficiente del exponente
env = A*exp(sigma*t); % Envolvente superior
y = A*exp(sigma*t).*cos(w*t + fase);% Función

subplot (2, 2, 1); % Recuadro parte real


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
hold on;
plot (t, env, 'r'); % Envolvente de la parte superior (en rojo)
plot (t, -env, 'r'); % Envolvente de la parte inferior (en rojo)
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Parte real (sigma > 0)', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',
'Fontsize', 12);
title ('Exponenciales crecientes', 'FontName', 'Times', 'Fontsize', 24) % Título

sigma = -0.5*10^3; % Parte real del coeficiente del exponente


env = A*exp(sigma*t); % Envolvente superior
y = A*exp(sigma*t).*cos(w*t + fase);% Función

subplot (2, 2, 2); % Recuadro parte real


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
hold on;
plot (t, env, 'r'); % Envolvente de la parte superior (en rojo)
plot (t, -env, 'r'); % Envolvente de la parte inferior (en rojo)
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Parte real (sigma < 0)', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',
'Fontsize', 12);
title ('Exponenciales amortiguadas', 'FontName', 'Times', 'Fontsize', 24)% Título

sigma = 0.5*10^3; % Parte real del coeficiente del exponente


env = A*exp(sigma*t); % Envolvente superior
y = A*exp(sigma*t).*sin(w*t + fase);% Función

subplot (2, 2, 3); % Recuadro parte imaginaria


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
hold on;
plot (t, env, 'r'); % Envolvente de la parte superior (en rojo)
plot (t, -env, 'r'); % Envolvente de la parte inferior (en rojo)
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Parte imaginaria (sigma > 0)', 'FontName', 'Times', 'Fontsize', 14);% Ord
grid on; % Malla
axis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',
'Fontsize', 12);

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 17

sigma = -0.5*10^3; % Parte real del coeficiente del exponente


env = A*exp(sigma*t); % Envolvente superior
y = A*exp(sigma*t).*sin(w*t + fase);% Función

subplot (2, 2, 4); % Recuadro parte imaginaria


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
hold on;
plot (t, env, 'r'); % Envolvente de la parte superior (en rojo)
plot (t, -env, 'r'); % Envolvente de la parte inferior (en rojo)
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Parte imaginaria (sigma < 0)', 'FontName', 'Times', 'Fontsize', 14); % Ord
grid on; % Malla
axis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',
'Fontsize', 12);

hold off;

clear all; % Elimina las variables utilizadas en esta rutina

Exponenciales crecientesExponenciales amortiguadas


y = Aexp(σt) x
Parte real (sigma > 0)

Parte real (sigma < 0)


x cos(ωt + ϕ)
a a
y = Aexp(σt) x
x sen(ωt + ϕ) -a -a

A = aejϕ
0 0
s = σ + jω t t
Parte imaginaria (sigma > 0)

Parte imaginaria (sigma < 0)

ω = 2πf

f = 1/T
a a

-a -a
Datos:

a, ϕ, σ, T
0 0
t t

Pulso rectangular

El código que sigue permite representar un pulso rectangular de amplitud y periodo


dados, centrado en el origen de coordenadas. Se recomienda prestar una atención específica
a la forma de definir el intervalo en el que la función tiene un valor no nulo.

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
18 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

%%%%% FUNCIÓN PULSO RECTANGULAR %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

t = -4: 0.001: 4; % Base de tiempos

y = zeros (1, length(t)); % Comienza anulando la función


A = 1; % Amplitud
T = 2; % Periodo

% Rango de valores de t para los que la función no es nula

rango = find ((t >= -T/2) & (t <= T/2));

y(rango) = A; % Valor de la función en el rango de tiempo no nulo

plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2


xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([-3, 3, -A/2, 2*A]); % Área de dibujo
set (gca, 'xtick', [-T/2 0 T/2], 'XTickLabel', {'-T/2', '0', 'T/2'}, 'FontName',
'Times', 'Fontsize', 12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsi-
ze', 12);
title ('Pulso rectangular', 'FontName', 'Times', 'Fontsize', 24) % Título

clear all; % Elimina las variables utilizadas en esta rutina

Pulso rectangular

Para
- T/2 < t < T/2 A
Amplitud

y=A

Datos:

T, A 0

-T/2 0 T/2
t

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 19

Pulso triangular

El código que sigue permite representar un pulso triangular de amplitud y periodo


definidos por el usuario, centrado en el origen de coordenadas.

%%%%% FUNCIÓN PULSO TRIANGULAR %%%%%

clear all % Elimina variables utilizadas en otras rutinas

% Base de tiempos

tmin = -4;
tmax = 4;
puntos = 10000;
t = linspace (tmin, tmax, puntos);

y = zeros (1, length(t)); % Comienza anulando la función


A = 1; % Amplitud
T = 2; % Periodo

% Rango de valores de t para los que la función no es nula

rango = find ((t >= -T/2) & (t <= T/2));

y(rango) = A*(1 - abs(t(rango))/(T/2)); % Función en el rango de tiempo no nulo

plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2


xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([-1.5*T, 1.5*T, -A/2, 2*A]); % Área de dibujo
set (gca, 'xtick', [-T/2 0 T/2], 'XTickLabel', {'-T/2', '0', 'T/2'}, 'FontName',
'Times', 'Fontsize', 12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsi-
ze', 12);
title ('Pulso triangular', 'FontName', 'Times', 'Fontsize', 24) % Título

clear all; % Elimina las variables utilizadas en esta rutina

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
20 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Pulso triangular

Para
- T/2 < t < T/2

y=Ax Amplitud A

x (1 - abs(t))/(T/2))

Datos:

T, A
0

-T/2 0 T/2
t

Función escalón

La rutina que sigue permite representar la función escalón. Obsérvese que hay dos po-
sibilidades de definirla; en realidad, una es la función reflejada de la otra (véase más adelante
otro ejemplo de funciones reflejadas). La rutina también permite observar las variaciones de
la representación en función de que el parámetro T sea positivo o negativo. Obsérvese que
la discontinuidad se halla a la izquierda del cero para valores negativos de T y la derecha
para valores positivos.

%%%%% FUNCIÓN ESCALÓN %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

% Base de tiempos

tmin = -4;
tmax = 4;
puntos = 1000;
t = tmin: 1/puntos: tmax;

y = zeros (1, length(t)); % Comienza anulando la función


A = 1; % Amplitud

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 21

T = 2; % Tiempo de discontinuidad

% Rango de valores de t para los que la función no es nula

rango = find (t >= T);

y(rango) = A; % Valor de la función en el rango de tiempo no nulo

subplot (2, 2, 1);


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('T > 0', 'FontName', 'Times', 'Fontsize', 14);% Ordenadas
grid on; % Malla
axis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujo
set (gca, 'xtick', [0 T], 'XTickLabel', {'0', 'T'}, 'FontName', 'Times', 'Fontsize',
12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsi-
ze', 12);
title ('Escalón u(t - T)', 'FontName', 'Times', 'Fontsize', 24); % Título

y = zeros (1, length(t)); % Comienza anulando la función


A = 1; % Amplitud
T = -2; % Tiempo de discontinuidad

% Rango de valores de t para los que la función no es nula

rango = find (t >= T);

y(rango) = A; % Valor de la función en el rango de tiempo no nulo

subplot (2, 2, 3);


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('T < 0', 'FontName', 'Times', 'Fontsize', 14);% Ordenadas
grid on; % Malla
axis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujo
set (gca, 'xtick', [T 0], 'XTickLabel', {'T', '0'}, 'FontName', 'Times', 'Fontsize',
12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsi-
ze', 12);

y = zeros (1, length(t)); % Comienza anulando la función


A = 1; % Amplitud
T = 2; % Tiempo de discontinuidad

% Rango de valores de t para los que la función no es nula

rango = find (t <= T);

y(rango) = A; % Valor de la función en el rango de tiempo no nulo

subplot (2, 2, 2);


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('T > 0', 'FontName', 'Times', 'Fontsize', 14) % Ordenadas
grid on; % Malla
axis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujo
set (gca, 'xtick', [0 T], 'XTickLabel', {'0', 'T'}, 'FontName', 'Times', 'Fontsize',

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
22 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsi-
ze', 12);
title ('Escalón u(T - t)', 'FontName', 'Times', 'Fontsize', 24); % Título

y = zeros (1, length(t)); % Comienza anulando la función


A = 1; % Amplitud
T = -2; % Tiempo de discontinuidad

% Rango de valores de t para los que la función no es nula

rango = find (t <= T);

y(rango) = A; % Valor de la función en el rango de tiempo no nulo

subplot (2, 2, 4);


plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('T < 0', 'FontName', 'Time & Ordenadas
grid on; % Malla
axis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujo
set (gca, 'xtick', [T 0], 'XTickLabel', {'T', '0'}, 'FontName', 'Times', 'Fontsize',
12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsi-
ze', 12);

clear all; % Elimina las variables utilizadas en esta rutina

Escalón u(t - T) Escalón u(T - t)

Para t < T
A A
T>0

T>0

u(t - T) = 0
u(T - t) = A
0 0
Para t > T
0 T 0 T
u(t - T) = A t t
u(T - t) = 0

Datos:
A A
T<0

T<0

T, A
0 0

T 0 T 0
t t

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 23

Signo

La rutina siguiente permite representar la función signo. En realidad, la rutina, al igual


que ocurre con la destinada a representar la función coseno, no hace más que establecer las
condiciones de representación por cuanto la función está disponible directamente en Matlab.
Obsérvese que, con relación a esta función, podríamos obtener cuatro representaciones dis-
tintas similares a las obtenidas en el caso de la función escalón. Obsérvese también que en la
representación gráfica aparece una pequeña discontinuidad en la línea vertical, que es debi-
da a que la resolución utilizada no permite mayor precisión.

%%%%% FUNCIÓN SIGNO %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

% Base de tiempos

tmin = -4;
tmax = 4;
puntos = 10000;
t = linspace (tmin, tmax, puntos);

A = 1;

y = A*sign(t); % Función

plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2


xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([(3/4)*tmin, (3/4)*tmax, -2*A, 2*A]); % Área de dibujo
set (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [-A 0 A], 'YTickLabel', {' -A'; ' 0'; ' A'}, 'FontName', 'Ti-
mes', 'Fontsize', 12);
title ('Función signo', 'FontName', 'Times', 'Fontsize', 24); % Título

clear all; % Elimina las variables utilizadas en esta rutina

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
24 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Función signo

y = Asign(t)
Amplitud

Datos:
0

-A

0
t

Sinc

La función sinc también está disponible directamente en Matlab, con lo que la rutina
que sigue tiene por objeto únicamente establecer las condiciones de la representación.

%%%%% FUNCIÓN SINC %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

% Base de tiempos

tmin = -8;
tmax = 8;
puntos = 10000;
t = linspace (tmin, tmax, puntos);

A = 1;
y = A*sinc(t); % Función

plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2


xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([tmin, tmax, -(1/2)*A, (5/4)*A]); % Área de dibujo
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Font-

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 25

size', 12);
title ('Función sinc', 'FontName', 'Times', 'Fontsize', 24); % Título

clear all; % Elimina las variables utilizadas en esta rutina

Función sinc

y = Asinc(t)
Amplitud

Datos:

A
0

-8 -6 -4 -2 0 2 4 6 8
t

Función combinada

El siguiente ejemplo combina dos funciones en una. A fin de poder utilizar la función
combinada sin necesidad de repetirla en otros momentos, el ejemplo consta de dos rutinas.
La primera es una función que puede ser invocada desde otras rutinas; su ejecución aislada
no produce ningún resultado. La segunda es la presentación de la función combinada.

function x = funccomb(t)
n = length(t);
x = zeros(1,n);
i = find(t < 0);
x(i) = 0;
i = find(t > 0 & t < 1);
x(i) = 1 - exp (-t(i)); % Primera función
i = find(t >= 1);
x(i) = -exp(-t(i)) + exp(-t(i) + 1); % Segunda función

return;

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
26 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

%%%%% FUNCIÓN COMBINADA %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

T1 = 0; % Comienzo de la primera función


T2 = 1; % Comienzo de la segunda función

% Base de tiempos

tmin = -3;
tmax = 3;
puntos = 1000;
t = linspace(tmin, tmax, puntos);

y = funccomb(t); % Llama a la función combinada


plot (t, y, 'b', 'LineWidth', 2);
% Curva en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([(3/4)*tmin, (3/4)*tmax, -(1/3)*max(y), (3/2)*max(y)]); % Área de dibujo
set (gca, 'xtick', [T1 T2], 'XTickLabel', {'T1'; 'T2'}, 'FontName', 'Times', 'Font-
size', 12);
set (gca, 'ytick', [0], 'YTickLabel', {' 0'}, 'FontName', 'Times', 'Fontsize', 12);
title ('Función combinada', 'FontName', 'Times', 'Fontsize', 24); % Título

clear all; % Elimina las variables utilizadas en esta rutina

Función combinada

Para T1 < t < T2


y = 1 - e-(t-T1)

Para t > T2
y = - e-t + e-(t-T2)
Amplitud

Datos:

T1, T2

T1 T2
t

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 27

Partes par e impar de una función

La rutina siguiente muestra cómo obtener las partes par e impar de una función. La
función considerada es la funccomb que hemos definido más arriba. Obsérvese que hemos
introducido un pequeño desplazamiento vertical en cada una de las curvas representadas a
fin de que puedan ser mostradas todas en la figura.

%%%%% PARTES PAR E IMPAR DE UNA FUNCIÓN %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

T1 = 0; % Comienzo de la primera función


T2 = 1; % Comienzo de la segunda función

% Base de tiempos

tmin = -3;
tmax = 3;
puntos = 1000;
t = linspace(tmin, tmax, puntos);

y = funccomb(t) + 0.02; % Función original

plot (t, y, 'k'); % Función en negro


hold on;
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Función (negro), Par (rojo), Impar (verde), Suma (azul)', 'FontName', 'Ti-
mes', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([(3/4)*tmin, (3/4)*tmax, -(2/3)*max(y), (3/2)*max(y)]); % Área de dibujo
set (gca, 'xtick', [T1 T2], 'XTickLabel', {'T1'; 'T2'}, 'FontName', 'Times', 'Font-
size', 12);
set (gca, 'ytick', [0], 'YTickLabel', {' 0'}, 'FontName', 'Times', 'Fontsize', 12);

tt = -t;
yy = funccomb(tt);
ypar = 0.005 + (y + yy)/2; % Parte par
plot (t, ypar, 'r');
hold on;
yimpar = (y - yy)/2 - 0.005; % Parte impar
plot (t, yimpar, 'g');
hold on;

ytotal = ypar + yimpar - 0.02;


plot (t, ytotal, 'b', 'Linewidth', 2); % Suma en azul de grosor 2
hold off;
title ('Partes par e impar de una función', 'FontName', 'Times', 'Fontsize', 24);
% Título

clear all; % Elimina las variables utilizadas en esta rutina

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
28 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Partes par e impar de una función

Función (negro), Par (rojo), Impar (verde), Suma (azul)

T1 T2
t

Reflexión, desplazamiento y escalado de una función

La rutina que sigue permite realizar diversas operaciones (reflexión, escalados horizon-
tal y vertical, desplazamiento) con una función, así como combinar todas o algunas de estas
operaciones. La función elegida como ejemplo es la funccomb descrita anteriormente. En
este caso, al contrario que en los precedentes, no se han etiquetado los ejes, a fin de que el
etiquetado automático realizado por Matlab permita comprobar el efecto de cada operación.

%%%%% OPERACIONES CON UNA FUNCIÓN %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

T1 = 0; % Comienza la primera función


T2 = 1; % Comienza la segunda función

% Base de tiempos
tmin = -3;
tmax = 3;
puntos = 1000;
t = linspace(tmin, tmax, puntos);

y = funccomb(t); % Función original


subplot (3, 2, 1); % Recuadro

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 29

plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2


xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Original', '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

tt = -t;
y = funccomb(tt); % Función reflejada
subplot (3, 2, 2); % Recuadro
plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Reflexión', '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

V = 0.5;
y = V*funccomb(t); % Función con escalado vertical
subplot (3, 2, 3); % Recuadro
plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Escalado y', '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

H = 2;
tt = H*t;
y = funccomb(tt); % Función con escalado horizontal
subplot (3, 2, 4); % Recuadro
plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Escalado t', '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

T = 1;
tt = t+T;
y = funccomb(tt); % Función desplazada
subplot (3, 2, 5); % Recuadro
plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Desplazamiento', '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

T = 1;
V = 0.5;
H = 2;
tt = H*(-(t+T));
y = V*funccomb(tt); % Operación combinada
subplot (3, 2, 6); % Recuadro
plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2
xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Combinación', '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

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
30 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

0.8 0.8

Reflexión
0.6 0.6
y(t)

Original
0.4 0.4
0.2 0.2
0 0
y(-t) -0.2 -0.2
-0.4 -0.4
-2 -1 0 1 2 -2 -1 0 1 2
t t
0.4 0.8
Vy(t) Escalado y

Escalado t
0.6
0.2 0.4
0.2
0 0
y(Ht) -0.2
-0.2 -0.4
-2 -1 0 1 2 -2 -1 0 1 2
t t
Desplazamiento

0.8 0.4
y(t + T)

Combinación
0.6
0.4 0.2
0.2
V[-H(t + T)] 0 0
-0.2
-0.4 -0.2
-2 -1 0 1 2 -2 -1 0 1 2
t t

Funciones periódicas

La primera función que vimos en este apartado es periódica (la función coseno). Dicha
función, como otras trigonométricas, tiene una definición establecida en la que la periodici-
dad está implícita. Sin embargo, para otras funciones la periodicidad ha de ser definida ex-
plícitamente. Es el caso, por ejemplo, del paso del pulso rectangular a un tren de pulsos rec-
tangulares. La siguiente rutina ilustra cómo definir esta función periódica.
%%%%% TREN DE PULSOS RECTANGULARES %%%%%

clear all; % Elimina variables utilizadas en otras rutinas

A = 1; % Amplitud
P = 2; % Duración del pulso
T = 6; % Periodo

tmin = -7*P; % Base de tiempos


tmax = 7*P;
puntos = 10000;
t = linspace (tmin, tmax, puntos);

y = zeros (1, length(t)); % Anula la función

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 31

n = 0; % Número de periodos para t < 0


while n*T>tmin
n = n - 1;
end
tc1 = (n: 0)*T; % Instantes centrales de los pulsos

m = 1; % Número de periodos para t > 0


while m*T<tmax
m = m + 1;
end
tc2 = (0: m)*T; % Instantes centrales de los pulsos

tc = [tc1 tc2]; % Instantes centrales de todos los pulsos

k = 1; % Amplitud de cada pulso


while k<=length(tc)
rango = find((t >= tc(k) - P/2) & (t <= tc(k) + P/2));
y(rango) = A;
k = k + 1;
end

plot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2


xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisas
ylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadas
grid on; % Malla
axis ([tmin, tmax, -A/3, (3/2)*A]); % Área de dibujo
set (gca, 'xtick', [-T/2 -P/2 0 P/2 T/2], 'XTickLabel', {'-T/2'; '-P/2'; '0'; 'P/2';
'T/2'}, 'FontName', 'Times', 'Fontsize', 12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Font-
size', 12);
title ('Tren de pulsos rectangulares', 'FontName', 'Times', 'Fontsize', 24);
% Título

clear all; % Elimina las variables utilizadas en esta rutina

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
32 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Tren de pulsos rectangulares

Amplitud

-T/2 -P/2 0 P/2 T/2


t

1.3 Ejercicios propuestos


Ejercicio 1 Rectificación de onda completa

Escribir un código Matlab


que permita obtener A
la figura adjunta.
Amplitud

-T/2 0 T/2
t

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 33

Ejercicio 2 Rectificación de media onda

Escribir un código Matlab


que permita obtener A
la figura adjunta.

Amplitud
0

-T/2 -P/2 0 P/2 T/2


t

Ejercicio 3 Sucesión de pulsos exponenciales

Escribir un código Matlab


que permita obtener A
la figura adjunta.
Amplitud

T-Texp T T+Texp
t

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
34 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab

Ejercicio 4 Pulso trapezoidal

Escribir un código Matlab


que permita obtener A
la figura adjunta.

Amplitud
0

T1 T2 T3 T4
t

Ejercicio 5 Función combinada


ymax
Escribir un código Matlab
Amplitud

0
que permita obtener
las figuras adjuntas. ymin

0 T 2T 3T
t

ymax
Amplitud

ymin

-3T -2T -T 0
t

Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO

También podría gustarte