1 Representación de señales - ESSindenrique.sanchez.webs.uvigo.es/PDFs/211_Matlab-senales.pdf ·...
Transcript of 1 Representación de señales - ESSindenrique.sanchez.webs.uvigo.es/PDFs/211_Matlab-senales.pdf ·...
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 estemanual es aquél en el que tales funciones son señales dependientes del tiempo. Es decir, setrata 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; enotras palabras, mostraremos cómo establecer el rango de valores de la variable tiempo parael que interesa representar los valores de la magnitud considerada. Seguiremos exponiendola forma de obtener una representación básica, y a continuación detallaremos cómo editar lafigura 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 algunosejercicios 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, pesea 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 quela 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 yfinal del vector correspondiente a la base de tiempos serán precisamente los que acabamosde indicar. Idealmente, querríamos que dicho vector fuera un conjunto infinito en el que es-
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 1
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 nopermite semejante posibilidad, ya que es una herramienta discreta. En consecuencia, a lahora 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 -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 estasconsideraciones, 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 unaparte, cuanto más pequeño sea, más precisa será la representación de la función; en otraspalabras, 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ónpara los distintos instantes) unidos por líneas. La operación de unir los diferentes puntos dela 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 rechazadapor 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 depuntos incluidos en ella. Obviamente, en la instrucción linspace los valores del tiempo estánequiespaciados en la base.
2 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Antes de continuar conviene precisar que estas formas de definir la base de tiempos sedenominan lineales, ya que la variación entre los distintos valores del tiempo incluidos en labase es lineal. Existen otras formas de variar los valores del tiempo (o de otras variables) enla 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 labase. 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 deltiempo 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 delos redondeos internos del ordenador, puede ocurrir que no haya ningún valor de t quecoincida exactamente con t0, con lo cual esta sentencia no produciría ningún resultado y lasque 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 quela 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 determinadaposició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 lasposiciones que ocupan dichos valores en el vector correspondiente. Es decir, habríamos deejecutar las instrucciones
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 3
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
y = y1:y2:...yn;plot (y)
% Define un vector de valores de la función y% Representa la función
De esta forma tendríamos en el eje de abscisas las posiciones del vector y en el eje deordenadas 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 ejede 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 intervaloen la definición de la base de tiempos). Sin embargo, por distintos motivos puede interesarprescindir 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 quecada uno está definido por un par de valores de t y de y. La representación se completacon 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 cualquierfunción real continua. Sin embargo, en numerosos casos de interés práctico conviene editarla 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.
4 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 ellopuede 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 ejescoordenados. En principio, Matlab establece automáticamente los ejes, adjudicando a susextremos 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 decoordenadas puede utilizarse la instrucción
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 5
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 talesejes. Tales identificativos pueden ser modificados mediante la instrucción
xlabel (‘texto’, ‘FontName’, ‘f’, ‘Fontsize’, s)ylabel (‘texto’, ‘FontName’, ‘f’, ‘Fontsize’, s)
% Etiqueta el eje de abscisas% 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, fueradel espacio delimitado por los ejes. Naturalmente, las características particulares de estetexto (tipo, tamaño y color de letra) pueden ser variadas de la misma forma que se indicóanteriormente para otras instrucciones.
6 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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. Esdecir, 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 losejes desde los que parten las rectas de la malla. Ambas funciones pueden realizarse deforma combinada mediante la instrucción
set (gca, ‘xtick’, [x1 x2 ... xn], ‘XTickLabel’, {‘tx1’; ‘tx2’; ... ‘txn’},‘ytick’, [y1 y2 ... ym], ‘YTickLabel’, {‘ty1’; ‘ty2’; ... ‘tym}’)
% Etiqueta los ejes coordenados % y define una malla% especificada por el usuario
% 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, indicadasmá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 curvascomo 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.
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 7
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 principiosó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ólocuando 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 estainstrucció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 sepresentan en una única figura, cuyas características de ejes y enmallado son las definidaspara la representación de la primera curva. A este respecto debe tomarse la precaución deasegurar 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; siuna 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 lainstrucción
8 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
hold off % Cancela los efectos de instrucciones hold on anteriores
Una cuarta posibilidad de visualizar las distintas curvas generadas durante la ejecuciónde una rutina consiste en dividir una figura en diversos recuadros y representar una o máscurvas (mediante la aplicación de la instrucción hold on) en cada uno de ellos. La definiciónde 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óny(t).
Una posibilidad es la ya comentada en el epígrafe anterior a propósito de la utilizaciónde la sentencia hold on.
Otra posibilidad consiste en definir cada función por separado (con su correspondientebase de tiempos, que no tiene por qué ser igual para ambas) y a continuación aplicar las ins-trucciones
t = [t1 t2 ... tn];y = [y1 y2 ... yn];plot (t, y)
% Combina las bases de tiempo en una sola% Combina las distintas funciones en una sola% Representa la función combinada
La diferencia entre ambas posibilidades es que la primera permite observar claramentecualquier discontinuidad que haya entre las funciones que se combinan, mientras que en lasegunda Matlab añade una línea de conexión entre aquéllas, con lo que las discontinuidadesentre ellas, si existen, quedan enmascaradas.
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 9
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
1.2 Algunas funciones de interés en sistemas lineales
A continuación vamos a presentar los códigos correspondientes a rutinas que puedenser utilizadas para representar funciones continuas del tiempo. El propósito principal de estasección es ilustrar con ejemplos concretos la utilización de las instrucciones mencionadas enla sección anterior. En consecuencia, se recomienda encarecidamente al lector que examinedetenidamente los distintos códigos y que se asegure de que entiende por qué se utilizanunas sentencias y no otras en cada caso concreto. Un ejercicio interesante en este sentido estratar 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 sentenciasincluidas 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 (opartes 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, colorde las curvas, etcétera). En lo que sigue se aplica un estilo determinado, pero se sugiere allector 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 fasede la función no es nula.
También conviene destacar que no deben confundirse el periodo de la función (el decualquier 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 eneste caso.
10 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
%%%%% 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ónf = 1/T; % Frecuencia de la funciónw = 2*pi*f; % Frecuencia angular de la funciónfase = pi/4; % Fase de la funciónam = 2; % Amplitud de la funcióny = am*cos(w*t + fase); % Función
plot (t, y, 'b', 'LineWidth', 2); % La curva aparece en azul con grosor 2axis ([-1.5e-6, 1.5e-6, -2.5, 2.5]); % Define el área de dibujoxlabel ('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 ejesgrid on; % Mallaset (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
y = Acos(ωt + ϕ)
ω = 2πf
f = 1/T
Datos:
T, A
-T 0 T
-A
0
A
Función coseno
t (segundos)
cose
no d
e pe
riod
o T
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 11
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 dela 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 todaslas figuras.
%%%%% FUNCIONES EXPONENCIALES %%%%%
clear all; % Elimina variables utilizadas en otras rutinas
t = linspace (-2, 2, 1000); % Base de tiempos
c = -0.5; % Coeficiente del exponenteA = 2; % Coeficiente de la exponencialy1 = A*exp(c*t); % Función
subplot (2, 2, 1); % Selección de recuadroplot (t, y1, 'b', 'LineWidth', 2); % Curva en azul con grosor 2xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisasylabel ('A > 0 c < 0', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadasset (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejesgrid on; % Mallaaxis ([-2, 2, -1, 7]); % Área de dibujoset (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 exponenteA = 2; % Coeficiente de la exponencialy2 = A*exp(c*t); % Función
subplot (2, 2, 2); % Selección de recuadroplot (t, y2, 'b', 'LineWidth', 2); % Curva en azul con grosor 2xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisasylabel ('A > 0 c > 0', 'FontName', 'Times', 'Fontsize', 14); % Ejee ordenadasset (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejesgrid on; % Mallaaxis ([-2, 2, -1, 7]); % Área de dibujoset (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 exponenteA = -2; % Coeficiente de la exponencialy3 = A*exp(c*t); % Función
12 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
subplot (2, 2, 3); % Selección de recuadroplot (t, y3, 'b', 'LineWidth', 2); % Curva en azul con grosor 2xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisasylabel ('A < 0 c > 0', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadasset (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejesgrid on; % Mallaaxis ([-2, 2, -7, 1]); % Área de dibujoset (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 exponenteA = -2; % Coeficiente de la exponencialy3 = A*exp(c*t); % Función
subplot (2, 2, 4); % Selección de recuadroplot (t, y3, 'b', 'LineWidth', 2); % Curva en azul con grosor 2xlabel ('t (segundos)', 'FontName', 'Times', 'Fontsize', 14); % Eje abscisasylabel ('A < 0 c < 0', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadasset (gca, 'FontName', 'Times', 'Fontsize', 12); % Texto en ejesgrid on; % Mallaaxis ([-2, 2, -7, 1]); % Área de dibujoset (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
y = Aexp(ct)
Datos:
c, A
0
0
A
t (segundos)
A >
0
c <
0
Exponenciales decrecientes
0
0
A
t (segundos)
A >
0
c >
0Exponenciales crecientes
0
A
0
t (segundos)
A <
0
c >
0
0
A
0
t (segundos)
A <
0
c <
0
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 13
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 haceuso de las instrucciones real e imag. Obsérvese también que tal variación es muy similar enambos 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 enla 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 losdos vectores que figuran en la instrucción. Más adelante veremos otros casos en los que seutilizan 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 complejafase = pi/4; % Fase de la amplitud complejaA = am*exp(j*fase); % Amplitud complejasigma = 0.5*10^3; % Parte real del coeficiente del exponenteT = 10^(-3); % Periodo de la funciónf = 1/T; % Frecuenciaw = 2*pi*f; % Frecuencia angulars = sigma + j*w; % Coeficiente del exponentey = A*exp(s*t); % Función
subplot (2, 1, 1); % Recuadro parte realplot (t, real(y), 'b', 'LineWidth', 2); % Curva en azul de grosor 2hold onplot (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 abscisasylabel ('Parte real', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadasgrid on; % Mallaaxis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujoset (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times',
14 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
'Fontsize', 12);title ('Exponencial compleja', 'FontName', 'Times', 'Fontsize', 24) % Título
subplot (2, 1, 2); % Recuadro parte imaginariaplot (t, imag(y), 'b', 'LineWidth', 2); % Curva en azul de grosor 2hold onplot (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 abscisasylabel ('Parte imaginaria', 'FontName', 'Times', 'Fontsize', 14); % Eje ordenadasgrid on; % Mallaaxis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujoset (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
y = Aexp(st)
A = aejϕ
s = σ + jω
ω = 2πf
f = 1/T
Datos:
a, ϕ, σ, T
0
-a
a
t
Part
e re
al
Exponencial compleja
0
-a
a
t
Part
e im
agin
aria
%%%%% 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 complejafase = 0; % Fase de la amplitud compleja
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 15
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
A = am*exp(j*fase); % Amplitud complejasigma = 0.5*10^3; % Parte real del coeficiente del exponenteT = 10^(-3); % Periodo de la funciónf = 1/T; % Frecuenciaw = 2*pi*f; % Frecuencia angulars = sigma + j*w; % Coeficiente del exponenteenv = A*exp(sigma*t); % Envolvente superiory = A*exp(sigma*t).*cos(w*t + fase);% Función
subplot (2, 2, 1); % Recuadro parte realplot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2hold 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); % Abscisasylabel ('Parte real (sigma > 0)', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujoset (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 exponenteenv = A*exp(sigma*t); % Envolvente superiory = A*exp(sigma*t).*cos(w*t + fase);% Función
subplot (2, 2, 2); % Recuadro parte realplot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2hold 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); % Abscisasylabel ('Parte real (sigma < 0)', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujoset (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 exponenteenv = A*exp(sigma*t); % Envolvente superiory = A*exp(sigma*t).*sin(w*t + fase);% Función
subplot (2, 2, 3); % Recuadro parte imaginariaplot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2hold 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); % Abscisasylabel ('Parte imaginaria (sigma > 0)', 'FontName', 'Times', 'Fontsize', 14);% Ordgrid on; % Mallaaxis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujoset (gca, 'xtick', [0], 'XTickLabel', {'0'}, 'FontName', 'Times', 'Fontsize', 12);set (gca, 'ytick', [-0.5 0.5], 'YTickLabel', {' -a'; ' a'}, 'FontName', 'Times','Fontsize', 12);
16 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
sigma = -0.5*10^3; % Parte real del coeficiente del exponenteenv = A*exp(sigma*t); % Envolvente superiory = A*exp(sigma*t).*sin(w*t + fase);% Función
subplot (2, 2, 4); % Recuadro parte imaginariaplot (t, y, 'b', 'LineWidth', 2); % Curva en azul de grosor 2hold 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); % Abscisasylabel ('Parte imaginaria (sigma < 0)', 'FontName', 'Times', 'Fontsize', 14); % Ordgrid on; % Mallaaxis ([-2*10^(-3), 2*10^(-3), -3, 3]); % Área de dibujoset (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
y = Aexp(σt) xx cos(ωt + ϕ)
y = Aexp(σt) xx sen(ωt + ϕ)
A = aejϕ
s = σ + jω
ω = 2πf
f = 1/T
Datos:
a, ϕ, σ, T
0
-a
a
t
Part
e re
al (
sigm
a >
0)
Exponenciales crecientes
0
-a
a
t
Part
e re
al (
sigm
a <
0)
Exponenciales amortiguadas
0
-a
a
t
Part
e im
agin
aria
(si
gma
> 0
)
0
-a
a
t
Part
e im
agin
aria
(si
gma
< 0
)
Pulso rectangular
El código que sigue permite representar un pulso rectangular de amplitud y periododados, centrado en el origen de coordenadas. Se recomienda prestar una atención específicaa la forma de definir el intervalo en el que la función tiene un valor no nulo.
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 17
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
%%%%% 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ónA = 1; % AmplitudT = 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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([-3, 3, -A/2, 2*A]); % Área de dibujoset (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
Para- T/2 < t < T/2
y = A
Datos:
T, A
-T/2 0 T/2
0
A
t
Am
plitu
d
Pulso rectangular
18 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Pulso triangular
El código que sigue permite representar un pulso triangular de amplitud y periododefinidos 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ónA = 1; % AmplitudT = 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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([-1.5*T, 1.5*T, -A/2, 2*A]); % Área de dibujoset (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
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 19
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Para- T/2 < t < T/2
y = A xx (1 - abs(t))/(T/2))
Datos:
T, A
-T/2 0 T/2
0
A
t
Am
plitu
d
Pulso triangular
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 adelanteotro ejemplo de funciones reflejadas). La rutina también permite observar las variaciones dela representación en función de que el parámetro T sea positivo o negativo. Obsérvese quela discontinuidad se halla a la izquierda del cero para valores negativos de T y la derechapara 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ónA = 1; % Amplitud
20 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('T > 0', 'FontName', 'Times', 'Fontsize', 14);% Ordenadasgrid on; % Mallaaxis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujoset (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ónA = 1; % AmplitudT = -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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('T < 0', 'FontName', 'Times', 'Fontsize', 14);% Ordenadasgrid on; % Mallaaxis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujoset (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ónA = 1; % AmplitudT = 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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('T > 0', 'FontName', 'Times', 'Fontsize', 14) % Ordenadasgrid on; % Mallaaxis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujoset (gca, 'xtick', [0 T], 'XTickLabel', {'0', 'T'}, 'FontName', 'Times', 'Fontsize',
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 21
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
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ónA = 1; % AmplitudT = -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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('T < 0', 'FontName', 'Time & Ordenadasgrid on; % Mallaaxis ([-1.5*abs(T), 1.5*abs(T), -A/2, 2*A]); % Área de dibujoset (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
Para t < Tu(t - T) = 0u(T - t) = A
Para t > Tu(t - T) = Au(T - t) = 0
Datos:
T, A
0 T
0
A
t
T >
0
Escalón u(t - T)
T 0
0
A
t
T <
0
0 T
0
A
t
T >
0Escalón u(T - t)
T 0
0
A
t
T <
0
22 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Signo
La rutina siguiente permite representar la función signo. En realidad, la rutina, al igualque ocurre con la destinada a representar la función coseno, no hace más que establecer lascondiciones 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 larepresentació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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(3/4)*tmin, (3/4)*tmax, -2*A, 2*A]); % Área de dibujoset (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
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 23
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
y = Asign(t)
Datos:
A
0
-A
0
A
t
Am
plitu
d
Función signo
Sinc
La función sinc también está disponible directamente en Matlab, con lo que la rutinaque 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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([tmin, tmax, -(1/2)*A, (5/4)*A]); % Área de dibujoset (gca, 'ytick', [0 A], 'YTickLabel', {' 0'; ' A'}, 'FontName', 'Times', 'Font-
24 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
size', 12);title ('Función sinc', 'FontName', 'Times', 'Fontsize', 24); % Título
clear all; % Elimina las variables utilizadas en esta rutina
y = Asinc(t)
Datos:
A
-8 -6 -4 -2 0 2 4 6 8
0
A
t
Am
plitu
d
Función sinc
Función combinada
El siguiente ejemplo combina dos funciones en una. A fin de poder utilizar la funcióncombinada 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 aisladano 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óni = find(t >= 1);x(i) = -exp(-t(i)) + exp(-t(i) + 1); % Segunda función
return;
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 25
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
%%%%% FUNCIÓN COMBINADA %%%%%
clear all; % Elimina variables utilizadas en otras rutinas
T1 = 0; % Comienzo de la primera funciónT2 = 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 combinadaplot (t, y, 'b', 'LineWidth', 2);% Curva en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(3/4)*tmin, (3/4)*tmax, -(1/3)*max(y), (3/2)*max(y)]); % Área de dibujoset (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
Para T1 < t < T2y = 1 - e-(t-T1)
Para t > T2y = - e-t + e-(t-T2)
Datos:
T1, T2
T1 T2
0
t
Am
plitu
d
Función combinada
26 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Partes par e impar de una función
La rutina siguiente muestra cómo obtener las partes par e impar de una función. Lafunción considerada es la funccomb que hemos definido más arriba. Obsérvese que hemosintroducido un pequeño desplazamiento vertical en cada una de las curvas representadas afin 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ónT2 = 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 negrohold on;xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Función (negro), Par (rojo), Impar (verde), Suma (azul)', 'FontName', 'Ti-mes', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(3/4)*tmin, (3/4)*tmax, -(2/3)*max(y), (3/2)*max(y)]); % Área de dibujoset (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 parplot (t, ypar, 'r');hold on;yimpar = (y - yy)/2 - 0.005; % Parte imparplot (t, yimpar, 'g');hold on;
ytotal = ypar + yimpar - 0.02;plot (t, ytotal, 'b', 'Linewidth', 2); % Suma en azul de grosor 2hold 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
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 27
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
T1 T2
0
t
Func
ión
(neg
ro),
Par
(ro
jo),
Im
par
(ver
de),
Sum
a (a
zul)
Partes par e impar de una función
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 estasoperaciones. La función elegida como ejemplo es la funccomb descrita anteriormente. Eneste caso, al contrario que en los precedentes, no se han etiquetado los ejes, a fin de que eletiquetado 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ónT2 = 1; % Comienza la segunda función
% Base de tiempostmin = -3;tmax = 3;puntos = 1000;t = linspace(tmin, tmax, puntos);
y = funccomb(t); % Función originalsubplot (3, 2, 1); % Recuadro
28 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
plot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Original', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(3/4)*tmin, (3/4)*tmax, -(2/3)*max(y), (3/2)*max(y)]); % Área de dibujo
tt = -t;y = funccomb(tt); % Función reflejadasubplot (3, 2, 2); % Recuadroplot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Reflexión', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(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 verticalsubplot (3, 2, 3); % Recuadroplot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Escalado y', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(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 horizontalsubplot (3, 2, 4); % Recuadroplot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Escalado t', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(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 desplazadasubplot (3, 2, 5); % Recuadroplot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Desplazamiento', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(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 combinadasubplot (3, 2, 6); % Recuadroplot (t, y, 'b', 'LineWidth', 2); % Función en azul de grosor 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Combinación', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([(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
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 29
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
y(t)
y(-t)
Vy(t)
y(Ht)
y(t + T)
V[-H(t + T)]
-2 -1 0 1 2-0.4-0.2
00.20.40.60.8
t
Ori
gina
l
-2 -1 0 1 2-0.4-0.2
00.20.40.60.8
t
Ref
lexi
ón
-2 -1 0 1 2-0.2
0
0.2
0.4
t
Esc
alad
o y
-2 -1 0 1 2-0.4-0.2
00.20.40.60.8
t
Esc
alad
o t
-2 -1 0 1 2-0.4-0.2
00.20.40.60.8
t
Des
plaz
amie
nto
-2 -1 0 1 2-0.2
0
0.2
0.4
t
Com
bina
ción
Funciones periódicas
La primera función que vimos en este apartado es periódica (la función coseno). Dichafunció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; % AmplitudP = 2; % Duración del pulsoT = 6; % Periodo
tmin = -7*P; % Base de tiempostmax = 7*P;puntos = 10000;t = linspace (tmin, tmax, puntos);
y = zeros (1, length(t)); % Anula la función
30 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
n = 0; % Número de periodos para t < 0while n*T>tminn = n - 1;end
tc1 = (n: 0)*T; % Instantes centrales de los pulsos
m = 1; % Número de periodos para t > 0while m*T<tmaxm = 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 pulsowhile 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 2xlabel ('t', 'FontName', 'Times', 'Fontsize', 14); % Abscisasylabel ('Amplitud', 'FontName', 'Times', 'Fontsize', 14); % Ordenadasgrid on; % Mallaaxis ([tmin, tmax, -A/3, (3/2)*A]); % Área de dibujoset (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
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 31
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
-T/2 -P/2 0 P/2 T/2
0
A
t
Am
plitu
d
Tren de pulsos rectangulares
1.3 Ejercicios propuestos
Ejercicio 1
Escribir un código Matlab que permita obtener la figura adjunta.
-T/2 0 T/2
0
A
t
Am
plit
ud
Rectificación de onda completa
32 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Ejercicio 2
Escribir un código Matlab que permita obtener la figura adjunta.
-T/2 -P/2 0 P/2 T/2
0
A
t
Am
plitu
d
Rectificación de media onda
Ejercicio 3
Escribir un código Matlab que permita obtener la figura adjunta.
T-Texp T T+Texp
0
A
t
Am
plitu
d
Sucesión de pulsos exponenciales
Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab 33
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO
Ejercicio 4
Escribir un código Matlab que permita obtener la figura adjunta.
T1 T2 T3 T4
0
A
t
Am
plitu
d
Pulso trapezoidal
Ejercicio 5
Escribir un código Matlab que permita obtener las figuras adjuntas.
0 T 2T 3T
ymin
0
ymax
t
Am
plitu
dFunción combinada
-3T -2T -T 0
ymin
0
ymax
t
Am
plitu
d
34 Prácticas de circuitos como sistemas lineales. Ejercicios sencillos con Matlab
Dpto. Teoría de la Señal y Comunicaciones. Escuela Técnica Superior de Ing. Telecomunicación. UNIVERSIDAD DE VIGO