1 representación de señales - essindenrique.sanchez.webs.uvigo.es/pdfs/211_matlab-senales.pdf ·...

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

Upload: vankhue

Post on 26-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

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