Está en la página 1de 59

DESCRIPCION BASICA DEL MATLAB

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 valores 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 tuvieran incluidos todos los valores comprendidos entre -10 s y 10 s. De esa forma
obtendrí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 consecutivos del tiempo. Así, si en el ejemplo que
estamos considerando especificamos un intervalo de 0.01 s, los valores del tiempo contenidos en el vector de
la base de tiempos son -10s, -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 grande 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
pequeño sea el intervalo, más tiempo tardará Matlab en completar la instrucción y mayor espacio 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 concreta 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 relació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.
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 primero 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 representar una función de la
forma más sencilla posible. Ésta consiste en definir una función mediante 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

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 instrucció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 correspondientes 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 discreta.
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 destacar ciertos detalles de aquélla o facilitar su
interpretación.

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 posible 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 representa 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
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 identificativos correspondientes a
los ejes de abscisas y de ordenadas (por ejemplo, “tiempo” y “corriente”, 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 utilizarse 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.
Edición: enmallado de la figura
Otra posibilidad de edición consiste en añadir una malla a la figura. Esto puede conseguirse 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 asignado 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 únicamente 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 tamañ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 última. Para poder ver todas las curvas
generadas como consecuencia de la ejecución de la rutina hay distintas posibilidades.

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 figura 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 instrucció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 seleccionado 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áticamente 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

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 instrucciones

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.

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 instrucciones 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 cualquiera de las variables
utilizadas en una determinada rutina, de forma que no se altere inadvertidamente la ejecución de otra rutina
distinta. La sentencia del principio evita la posible influencia de variables procedentes de otras rutinas.

Coseno
El código adjunto puede utilizarse para generar la función coseno mostrada en la figura.
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 efectuar la representación (lo que hemos
denominado intervalo más arriba), que vale 10-9 s en este caso.

%%%%% 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 1
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
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 cuatro 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
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', 'Fontsize',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', 'Fontsize',
12);
clear all; % Elimina las variables utilizadas
en esta rutina
Exponenciales complejas
Las dos primeras curvas muestran la variación con el tiempo de las partes real e imaginaria 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 representaciones (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 compleja.
Obsérvese que en este caso, al contrario que en el anterior, se hace uso de las instrucciones cos y sin,
respectivamente, para representar las partes real e imaginaria de una función.
Obviamente, ambos tipos de representaciones son completamente equivalentes. Obsérvese 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', '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
%%%%% 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
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);
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
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.

%%%%% 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', 'Fontsize',12);
title ('Pulso rectangular', 'FontName', 'Times', 'Fontsize', 24) % Título
clear all; % Elimina las variables utilizadas
en esta rutina
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', 'Fontsize',12);
title ('Pulso triangular', 'FontName', 'Times', 'Fontsize', 24) % Título
clear all; % Elimina las variables utilizadas en
esta rutina
Función escalón
La rutina que sigue permite representar la función escalón. Obsérvese que hay dos posibilidades 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
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', 'Fontsize',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', 'Fontsize',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',12);
set (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Fontsize',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', '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', 'Fontsize',12);
clear all; % Elimina las variables utilizadas en esta rutina
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 distintas
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 debida
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', 'Times','Fontsize', 12);
title ('Función signo', 'FontName', 'Times', 'Fontsize', 24); % Título
clear all; % Elimina las variables utilizadas
en esta rutina
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-size', 12);
title ('Función sinc', 'FontName', 'Times', 'Fontsize', 24); % Título
clear all; % Elimina las variables utilizadas
en esta rutina
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;
%%%%% 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', 'Fontsize',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
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',
'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
set (gca, 'xtick', [T1 T2], 'XTickLabel', {'T1'; 'T2'}, 'FontName', 'Times', 'Fontsize',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
Reflexión, desplazamiento y escalado de una función
La rutina que sigue permite realizar diversas operaciones (reflexión, escalados horizontal 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

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
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 periodicidad está implícita. Sin embargo, para
otras funciones la periodicidad ha de ser definida explícitamente.
Es el caso, por ejemplo, del paso del pulso rectangular a un tren de pulsos rectangulares.
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

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', 'Fontsize',12);
title ('Tren de pulsos rectangulares', 'FontName', 'Times', 'Fontsize', 24); % Título
clear all; % Elimina las variables utilizadas
en esta rutina
Series de Fourier
Sabemos que utilizando el análisis de Fourier podemos descomponer una señal en sus
componentes armónicos.

si tenemos una señal cuadrada la cual podemos escribir como


4v ∞ 1 4v 1 1
f (t )= ∑ senn ω0 t = (senω 0 t+ sen3 ω 0 t+ sen5 ω 0 t+. .. )
π n=1 n π 3 5
Vamos a graficar los armónicos de esta función generando uno por uno y posteriormente
haremos un programa para obtenerlos

t = 0:.1:10;

y = sin(t);

plot(t,y),

Primer armónico

y = sin(t) + sin(3*t)/3;

plot(t,y)
Adición de dos armónicos

y = sin(t) + sin(3*t)/3 + sin(5*t)/5 + sin(7*t)/7 + sin(9*t)/9;

plot(t,y)

adición de tres armónicos

t = 0:.02:3.14;
y = zeros(10,max(size(t))); %abriendo espacio para almacenar los valores de los
armónicos

x = zeros(size(t));

% programa para generar los armónicos de una señal cuadrada

%Programa para obtener los armónicos de una señal cuadrada

%con un periodo de T = 1 seg

T = 1;

Wo = 2*pi/T;

t = 0:0.001:pi;

y = square(2*pi*t/T);

plot(t,y,'r-')

grid

hold on

x = 0;

for k = 1:2:10

x = x + (4*sin(k*Wo*t))/(pi*k);

y((k+1)/2,:) = x;

plot(t,x), pause
end

title('componentes armónicos')

xlabel('tiempo'), ylabel('amplitud')

% Leccion 1

% 1.1 USO DE sin(x),cos(x),tan(x)

clear;

close all;

nn=0:20;

x=2*pi*nn/20;

x1=sin(x);

x2=cos(x);

x3=tan(x);

figure(1)

subplot(311),stem(nn,x1)

subplot(312),stem(nn,x2)

subplot(313),stem(nn,x3)
% 1.2 USO DE exp(z),abs(z),real(z),imag(z),angle(x),conj(x)

clear;

close all;

nn=0:20;p=-1;

x=p*nn/20;

y=2*pi*nn/20;

z=x+j*y;

xx=exp(z);

xc=conj(xx);

x1=abs(xx);

x2=real(xx);

x3=imag(xx);

x4=imag(xc);

x5=angle(xx);

x6=angle(xc);

subplot(321),stem(nn,x1),grid

subplot(322),stem(nn,x2),grid
subplot(323),stem(nn,x3),grid

subplot(324),stem(nn,x4),grid

subplot(325),stem(nn,x5),grid

subplot(326),stem(nn,x6),grid

% 1.3 USO DE sum(z),prod(z)

clear;

close all;

nn=0:5;p=-1;

x=p*nn/20;

y=2*pi*nn/20;

z=x+j*y;

xx=exp(z);

x1=real(xx)

x2=imag(xx)

xs=sum(xx)

xp=prod(xx)
% 1.4 USO DE log(x),log10(x),sqrt(x)

clear;

close all;

nn=0:20;p=-1;

x=p*nn/20;

y=2*pi*nn/20;

z=x+j*y;

xx=exp(z);

x1=abs(xx);

x2=sqrt(x1);

x3=log10(x1);

x4=log(x1);

x5=x;

subplot(321),stem(nn,x1),grid

subplot(322),stem(nn,x2),grid

subplot(323),stem(nn,x3),grid

subplot(324),stem(nn,x4),grid
subplot(325),stem(nn,x5),gris

% Leccion 2

% 2.1 USO DE conv(z,h)

clear;

close all;

nn=0:20;p=0;m=0;

x=p*nn/20;

y=2*pi*nn/20*m;

z=exp(x+j*y);

h=nn;

x1=z;

x2=h;

x3=conv(z,h)

figure(1)

subplot(311),stem(nn,x1)

subplot(312),stem(nn,x2)

nn=0:40;
subplot(313),stem(nn,x3)

% 2.2 USO DE filter(a,b,x)

% Resuelve ecuaciones de diferencias tipo:

% b0*y(n)+b1*y(n-1)+b2*y(n-2)+...+bN*y(n-N)=a0*x(n)+a1*x(n-1)+...+aM*x(n-M)

%Haciendo a=[a0 a1 a2 ....aM] , b=[b0 b1 b2....bN]

% x secuencia de entrada , y secuencia de salida

nn=0:20;

x=ones(nn);

b=[1 1 1];

a=[1 1 1];

y=filter(a,b,x);

x1=x;

x2=y;

figure(2)
subplot(211),stem(nn,x1)

subplot(212),stem(nn,x2)

% 2.3 USO DE filter(1,b,x)

% Resuelve ecuaciones de diferencias tipo:

% b0*y(n)+b1*y(n-1)+b2*y(n-2)+...+bN*y(n-N)=x(n)

%Haciendo b=[b0 b1 b2....bN]

% x secuencia de entrada y y secuencia de salida

nn=0:20;

x=ones(nn);

b=[1 1 1]

y=filter(1,b,x);

x1=x;

x2=y;

figure(3)
subplot(211),stem(nn,x1)

subplot(212),stem(nn,x2)

% 2.4 USO DE filter(a,1,x) FIR

% Resuelve ecuaciones de diferencias tipo:

% y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+...+aM*x(n-M)

%Haciendo a=[a0 a1 a2....aM]

% x secuencia de entrada y y secuencia de salida

nn=0:20;

x=ones(nn);

a=[1 1 1]

y=filter(a,1,x);

x1=x;

x2=y;
figure(4)

subplot(211),stem(nn,x1)

subplot(212),stem(nn,x2)

% 2.5 USO DE rand(1,N)

% Generador de números casuales con distribución uniforme entre 0 y 1

% USO DE randn(1,N)

% Generador de números casuales con distribución Gauss con promedio 0

% y varianza 1

% x secuencia de salida ; y secuencia de salida

N=20;

nn=0:N-1;

x=rand(1,N);

y=randn(1,N);

x1=x;
x2=y;

figure(5)

subplot(211),stem(nn,x1)

subplot(212),stem(nn,x2)

% USO DE xcorr(x)

% Ejecuta la autocorrelación de x

% USO DE xcorr(x,y)

% Ejecuta la correlación cruzada entre x e y

x3=xcorr(x);

x4=xcorr(y);

x5=xcorr(x,y);

figure(6)

subplot(311),stem(x3)

subplot(312),stem(x4)

subplot(313),stem(x5)

También podría gustarte