Documente Academic
Documente Profesional
Documente Cultură
Introduccin:
Este manual se ha elaborado con el propsito de proveer al estudiante las destrezas y conocimientos necesarios para el diseo y anlisis de sistemas de seales y comunicaciones electrnicas, mediante herramientas de diseo electrnico asistido por computadoras. Esta asignatura de laboratorio de Teora de Comunicaciones es la primera entrega de una serie de experimentos en el rea de las comunicaciones electrnica. Al finalizar este programa de prcticas, el estudiante estar en condiciones de representar seales y sistemas de comunicaciones utilizando Matlab. Podr realizar simulaciones de sistemas especficos de comunicaciones y establecer diferencias en el funcionamiento de los mismos. Este manual de laboratorio que sirve de gua, en el aparecen preguntas que deben ser contestadas por los estudiantes. El instructor facilita la realizacin de las prcticas, orientando a los estudiantes. Las prcticas estn basadas en experimentos donde se utiliza el software Matlab.
3 Procederemos a describir cada una de las principales herramientas que posee el entorno de trabajo de MATLAB.
Siendo la parte mas importante de la ventana inicial el Command Window, la cual, aparece en la parte derecha. En esta sub-ventana es donde se ejecutan los comandos de MATLAB, a continuacin del prompt (aviso) caracterstico (>>), que indica que el programa est preparado para recibir instrucciones. En la pantalla mostrada en la Figura, se ha ejecutado el comando A=magic(6), mostrndose a continuacin el resultado proporcionado por MATLAB.
4 En la parte superior izquierda de la pantalla aparecen dos ventanas tambin muy tiles: en la parte superior aparece la ventana Current Directory, que se puede alternar con Workspace clicando en la pestaa correspondiente. La ventana Current Directory muestra los ficheros del directorio activo o actual. El directorio activo se puede cambiar desde la Command Window, o desde la propia ventana (o desde la barra de herramientas, debajo de la barra de mens) con los mtodos de navegacin de directorios propios de Windows. Clicando dos veces sobre alguno de los ficheros *.m del directorio activo se abre el editor de ficheros de MATLAB, herramienta fundamental para la programacin sobre la que se volver en las prximas pginas. El Workspace contiene informacin sobre todas las variables que se hayan definido en esta sesin y permite ver y modificar las matrices con las que se est trabajando. En la parte inferior derecha aparece la ventana Command History que muestra los ltimos comandos ejecutados en la Command Window. Estos comandos se pueden volver a ejecutar haciendo doble clic sobre ellos. Clicando sobre un comando con el botn derecho del ratn se muestra un men contextual con las posibilidades disponibles en ese momento. Para editar uno de estos comandos hay que copiarlo antes a la Command Window. Para apreciar desde el principio la potencia e iniciar nuestra practica de MATLAB, se puede comenzar por escribir en la Command Window la siguiente lnea, A=rand(6), B=inv(A), B*A , a continuacin del prompt es decir, (>>). Al final hay que pulsar intro.
5 En realidad, en la lnea de comandos anterior se han escrito tres instrucciones diferentes, separadas por comas. Como consecuencia, la respuesta del programa tiene tres partes tambin, cada una de ellas correspondiente a una de las instrucciones. Con la primera instruccin se define una matriz cuadrada (66) llamada A, cuyos elementos son nmeros aleatorios entre cero y uno (aunque aparezcan slo 4 cifras, han sido calculados con 16 cifras de precisin). En la segunda instruccin se define una matriz B que es igual a la inversa de A. Finalmente se ha multiplicado B por A, y se comprueba que el resultado es la matriz unidad. Es con grandes matrices o grandes sistemas de ecuaciones como MATLAB obtiene toda la potencia del ordenador. Otro de los puntos fuertes de MATLAB son los grficos, que se vern con ms detalle en las proximas practicas. A ttulo de ejemplo, se puede teclear la siguiente lnea y pulsar intro
>> x=-4:.01:4; y=sin(x); plot(x,y), grid, title('Funcin seno(x)')
En la Figura se puede observar que se abre una nueva ventana en la que aparece representada la funcin sin(x). Esta figura tiene un ttulo "Funcin seno(x)" y una cuadrcula o "grid". En realidad la lnea anterior contiene tambin varias instrucciones separadas por comas o puntos y comas. En la primera se crea un vector x con 801 valores reales entre -4 y 4, separados por una centsima. A continuacin se crea un vector y, cada uno de cuyos elementos es el seno del correspondiente elemento del vector x. Despus se dibujan los valores de y en ordenadas frente a los de x en abscisas. Las dos ltimas instrucciones establecen la cuadrcula y el ttulo.
Cuando damos un click con el puntero del Mouse sobre la opcion HELP. Este nos abre otra ventana, la cual nos presenta todo el contenido de la opcion help.
7 1. Full Product Family Help, Se abre la ventana de la Figura, en la que se puede buscar informacin general sobre MATLAB o sobre otros productos de la familia a los que se tenga acceso. La forma de la ventana de ayuda es tpica y comn con otros niveles de ayuda. La mayor parte de las pginas de ayuda estn en formato HTML. 2. MATLAB Help. Es por medio de la cual, se puede buscar ayuda general sobre MATLAB o sobre la funcin o el concepto que se desee. La portada de esta ayuda tiene tres captulos principales: Functions, que contiene informacin de referencia sobre las funciones por orden alfabtico o por categoras; Ande Graphics, que permite acceder a informacin concreta sobre las distintas propiedades de los objetos grficos; Documentation Set, que da acceso a versiones completas de los manuales del programa en formato de pantalla fcilmente navegable (con apartados de Getting Started, User Guides, Programming Tips y Examples in Documentation). Product Demos (con una coleccin de ejemplos programados que se pueden ejecutar y cuyo cdigo se puede examinar para ver cmo estn programados), What's New (con las novedades de esta versin respecto a la anterior), Printing the Documentation Set (que permite abrir documentos PDF (Portable Document Format), que se corrresponden con las versiones en papel de los manuales del programa, y que precisan del programa Adobe Acrobat Reader 5.0 o superior.) y un apartado final sobre The MathWorks Web Site Resources (que permite acceder a una amplsima coleccin de informaciones adicionales disponibles en la web de la empresa que ha desarrollado MATLAB). En la parte izquierda de la ventana, cuando est seleccionada la pestaa Contents, aparece un ndice temtico estructurado en forma de rbol que puede ser desplegado y recorrido con gran facilidad. Las restantes pestaas de esta ventana dan acceso a un ndice por palabras (Index), a un formulario de bsqueda (Search) y a la coleccin de ejemplos ya programados antes citada (Demos). 3. Using the Desktop. Se abre una ventana de ayuda con un formato similar a las de las Figuras anteriores con informacin detallada sobre cmo utilizar y configurar el entorno de desarrollo o Desktop. Las distintas herramientas disponibles se describen sucesivamente. Cada pgina dispone de flechas y enlaces que permiten ir a la pgina siguiente o volver a la anterior. Es posible tambin imprimir aquellas pginas que se desee consultar o archivar sobre papel. Una caracterstica muy importante es la posibilidad de organizar las ventanas con gran flexibilidad, agrupndolas o independizndoles segn los propios gustos o deseos. 4. Using the Command Window. Esta opcin del men Help da acceso a la informacin necesaria para aprovechar las capacidades de la Command Window, que es el corazn de MATLAB. 5. Web Resources. La Error! No se encuentra el origen de la referencia. muestra algunas direcciones de Internet con informacin interesante sobre MATLAB. Todas ellas corresponden a distintas secciones de la web de The Mathworks (la empresa que desarrolla y comercializa MATLAB), cuya pgina de inicio se muestra en primer lugar. 6. Check for Updates. MATLAB se conecta con The Mathworks y comprueba si has versiones ms recientes de los productos instalados. Si se es un usuario registrado, es posible descargar las versiones ms actuales. 7. Demos. Se abre una ventana como la mostrada en la Figura, que da acceso a un buen nmero de ejemplos resueltos con MATLAB, cuyos resultados se presentan grficamente de diversas
8 formas. Es muy interesante recorrer estos ejemplos para hacerse idea de las posibilidades del programa, tanto en clculo como en grficos. Es asimismo muy instructivo analizar los ficheros *.m de los ejemplos de caractersticas similares a las de la aplicacin de se desea desarrollar. Adems, de una forma muy inmediata, es posible tambin recurrir al Help desde la lnea de comandos de la Command Window. Se aconseja practicar un poco al respecto. Por ejemplo, obsrvese la respuesta a los siguientes usos del comando help:
>> help >> help lang
COMMAND WINDOW
sta es la ventana en la que se ejecutan interactivamente las instrucciones de MATLAB y en donde se muestran los resultados correspondientes, si es el caso. En cierta forma es la ventana ms importante y la nica que exista en las primeras versiones de la aplicacin. En esta nueva versin se han aadido algunas mejoras significativas, como las siguientes: 1. Se permiten lneas de comandos muy largas que automticamente siguen en la lnea siguiente al llegar al margen derecho de la ventana. Para ello hay que activar la opcin Wrap Lines, en el men File/Preferences/Command Window. 2. Clicando con el botn derecho sobre el nombre de una funcin que aparezca en esta ventana se tiene acceso a la pgina del Help sobre dicha funcin. Si el cdigo fuente (fichero *.m) est disponible, tambin se puede acceder al fichero correspondiente por medio del Editor/Debugger. 3. Comenzando a teclear el nombre de una funcin y pulsando la tecla Tab, MATLAB completa automticamente el nombre de la funcin, o bien muestra en la lnea siguiente todas las funciones disponibles que comienzan con las letras tecleadas por el usuario. 4. Cuando al ejecutar un fichero *.m se produce un error y se obtiene el correspondiente mensaje en la Command Window, MATLAB muestra mediante un subrayado un enlace a la lnea del fichero fuente en la que se ha producido el error. Clicando en ese enlace se va a la lnea correspondiente del fichero por medio del Editor/Debugger.
stas son las variables del espacio de trabajo base (el de la lnea de comandos de MATLAB). Ms adelante se ver que cada funcin tiene su propio espacio de trabajo, con variables cuyos nombres no interfieren con las variables de los otros espacios de trabajo.
10 La ventana Workspace constituye un entorno grfico para ver las variables definidas en el espacio de trabajo. Se activa con el comando View/Workspace.
La Figura muestra el aspecto inicial de la ventana Workspace cuando se abre desde un determinado programa. Haciendo doble clic por ejemplo sobre la matriz BARS aparece una nueva ventana (o pestaa, si la ventana ya exista) del ArrayEditor, en la que se muestran y pueden ser modificados los elementos de dicha matriz. Es importante insistir en que cada una de las funciones de MATLAB tiene su propio espacio de trabajo, al que en principio slo pertenecen las variables recibidas como argumentos o definidas dentro de la propia funcin. En la barra de herramientas de la ventana Workspace aparece una lista desplegable llamada Stack, con los espacios de trabajo del programa actual. Hay que tener en cuenta que cuando se termina de ejecutar una funcin y se devuelve el control al programa que la haba llamado, las variables definidas en la funcin dejan de existir (salvo que se hayan declarado como persistent) y tambin deja de existir su espacio de trabajo. Si se desean examinar otras matrices y/o vectores, al hacer doble clic sobre ellas el Array Editor las muestra en la misma ventana como subventanas con una pestaa diferente. Clicando con el botn derecho sobre alguna de las variables del Workspace Browser se abre un men contextual que ofrece algunas posibilidades interesantes, como por ejemplo la de representar grficamente dicha variable. El Array Editor no slo permite ver los valores de los elementos de cualquier matriz o vector definido en el programa: es tambin posible modificar estos valores clicando sobre la celda correspondiente. La ventana del Array Editor incluye una lista desplegable en la que se puede elegir el formato en el que se desea ver los datos. El Array Editor es muy til tambin para entender bien ciertos algoritmos, ejecutando paso a paso un programa y viendo cmo cambian los valores de las distintas variables. Es posible aparcar o situar las ventanas o pestaas del Array Editor en la misma ventana del Editor/Debugger.
11
EL EDITOR/DEBUGGER
En MATLAB tienen particular importancia los ya citados ficheros-M (o M-files). Son ficheros de texto ASCII, con la extensin *.m, que contienen conjuntos de comandos o definicin de funciones (estos ltimos son un poco ms complicados y se vern ms adelante). La importancia de estos ficheros-M es que al teclear su nombre en la lnea de comandos y pulsar Intro, se ejecutan uno tras otro todos los comandos contenidos en dicho fichero. El poder guardar instrucciones y grandes matrices en un fichero permite ahorrar mucho trabajo de tecleado. Aunque los ficheros *.m se pueden crear con cualquier editor de ficheros ASCII tal como Notepad, MATLAB dispone de un editor que permite tanto crear y modificar estos ficheros, como ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuracin).
La Figura muestra la ventana principal del Editor/Debugger, en la que se ha tecleado un fichero-M llamado Prueba1.m, que contiene un comentario y seis sentencias5. El Editor muestra con diferentes colores los diferentes tipos o elementos constitutivos de los comandos (en verde los comentarios, en violeta las cadenas de caracteres, etc.). El Editor se preocupa tambin de que las comillas o parntesis que se abren, no se queden sin el correspondiente elemento de cierre. Colocando el cursor antes o despus de una apertura o cierre de corchete o parntesis y pulsando las teclas () o (), el Editor muestra con qu cierre o apertura de corchete o parntesis se empareja el elemento considerado; si no se empareja con ninguno, aparece con una rayita de tachado. Seleccionando varias lneas y clicando con el botn derecho aparece un men contextual cuya sentencia
12 Comment permite entre otras cosas comentar con el carcter % todas las lneas seleccionadas. Estos comentarios pueden volver a su condicin de cdigo ejecutable seleccionndolos y ejecutando Uncomment en el men contextual. Otra opcin muy til de ese men contextual es Smart Indent, que organiza el sangrado de los bucles y bifurcaciones de las sentencias seleccionadas.
La Figura corresponde a una ejecucin de este fichero de comandos controlada con el Debugger. Dicha ejecucin se comienza eligiendo el comando Run en el men Debug, pulsando la tecla F5, clicando en el botn Continue ( ) de la barra de herramientas del Editor o tecleando el nombre del fichero en la lnea de comandos de la Command Window. Los puntos rojos que aparecen en el margen izquierdo son breakpoints (puntos en los que se detiene la ejecucin de programa); la flecha verde en el borde izquierdo indica la sentencia en que est detenida la ejecucin (antes de ejecutar dicha sentencia); cuando el cursor se coloca sobre una variable (en este caso sobre A) aparece una pequea ventana con los valores numricos de esa variable, tal como se ve en la Figura. En la Figura 21 puede apreciarse tambin que estn activados los botones que corresponden al Debugger. El significado de estos botones, que aparece al colocar sobre ellos el cursor, es el siguiente: Set/Clear Breakpoint. Coloca o borra un breakpoint en la lnea en que est el cursor. Clear All Breakpoints. Elimina todos los breakpoints que haya en el fichero. Step. Avanzar un paso sin entrar en las funciones de usuario llamadas en esa lnea. Step In. Avanzar un paso, y si en ese paso hay una llamada a una funcin cuyo fichero *.m est accesible, entra en dicha funcin. Step Out. Salir de la funcin que se est ejecutando en ese momento. Continue. Continuar la ejecucin hasta el siguiente breakpoint. Quit Debugging. Terminar la ejecucin del Debugger. Stack. En la parte derecha de la barra de herramientas aparece esta lista desplegable (visible en la Figura con las letras Pru...) mediante la cual se puede elegir el contexto, es decir el espacio de trabajo o el mbito de las variables que se quieren examinar.Ya se ha comentado que el espacio de trabajo base (el de las variables creadas desde la lnea de comandos) y el espacio de trabajo de cada funcin son diferentes. El Debugger es un programa que hay que conocer muy bien, pues es muy til para detectar y corregir errores. Es tambin enormemente til para aprender mtodos numricos y tcnicos de programacin. Para aprender a manejar el Debugger lo mejor es practicar.
13
Introduccin a las lneas de comandos, y a ejercicios prcticos donde pondremos en ejecucin dichos comandos
Lneas de comentarios Ya se ha indicado que para MATLAB el carcter tanto por ciento (%) indica comienzo de comentario. Cuando aparece en una lnea de comandos, el programa supone que todo lo que va desde ese carcter hasta el fin de la lnea es un comentario. Ms adelante se ver que los comentarios de los ficheros *.m tienen algunas peculiaridades importantes, pues pueden servir para definir help's personalizados de las funciones que el usuario vaya creando. MATLAB permite comentar bloques de sentencias, es decir, muchas sentencias contiguas de una vez. Una forma de hacerlo es seleccionar las sentencias que se desea comentar, clicar con el botn derecho, y elegir la opcin Comment en el men que se abre; las sentencias selecionadas se comentan individualmente con el carcter %. De forma similar se pueden eliminar los comentarios. Otra forma de comentar bloques de sentencias (similar a la utilizada en C/C++ con /* y */) es encerrar las lneas que se desea inutilizar entre los caracteres %{ y %}. Los bloques comentados pueden incluirse dentro de otros bloques comentados ms amplios (bloques anidados).
A partir de este momento la matriz A est disponible para hacer cualquier tipo de operacin con ella (adems de valores numricos, en la definicin de una matriz o vector se pueden utilizar expresiones y funciones matemticas). Por ejemplo, una sencilla operacin con A es hallar su matriz traspuesta. En MATLAB el apstrofo (') es el smbolo de transposicin matricial. Para calcular A' (traspuesta de A) basta teclear lo siguiente (se aade a continuacin la respuesta del programa):
Como el resultado de la operacin no ha sido asignado a ninguna otra matriz, MATLAB utiliza un nombre de variable por defecto (ans, de answer), que contiene el resultado de la ltima operacin. La variable ans puede ser utilizada como operando en la siguiente expresin que se introduzca. Tambin podra haberse asignado el resultado a otra matriz llamada B:
Ahora ya estn definidas las matrices A y B, y es posible seguir operando con ellas. Por ejemplo, se puede hacer el producto B*A (deber resultar una matriz simtrica):
En MATLAB se accede a los elementos de un vector poniendo el ndice entre parntesis (por ejemplo
15 x(3) x(i)). Los elementos de las matrices se acceden poniendo los dos ndices entre parntesis, separados por una coma (por ejemplo A(1,2) A(i,j)). Las matrices se almacenan por columnas (aunque se introduzcan por filas, como se ha dicho antes), y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un slo subndice. Por ejemplo, si A es una matriz (33) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4). Invertir una matriz es casi tan fcil como trasponerla. A continuacin se va a definir una nueva matriz A -no singular- en la forma:
Ahora se va a calcular la inversa de A y el resultado se asignar a B. Para ello basta hacer uso de la funcin inv( ) (la precisin o nmero de cifras con que se muestra el resultado se puede cambiar con el men File/Preferences/General):
De forma anloga a las matrices, es posible definir un vector fila x en la forma siguiente (si los tres nmeros estn separados por blancos o comas, el resultado ser un vector fila):
Por el contrario, si los nmeros estn separados por intros o puntos y coma (;) se obtendr un vector columna:
16
MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por ejemplo, si se intenta sumar los vectores x e y se obtendr el siguiente mensaje de error:
>> x+y ??? Error using ==> + Matrix dimensions must agree.
17
FUNCIONES DE LIBRERA
MATLAB tiene un gran nmero de funciones incorporadas. Algunas son funciones intrnsecas, esto es, funciones incorporadas en el propio cdigo ejecutable del programa. Estas funciones son particularmente rpidas y eficientes. Existen adems funciones definidas en ficheros *.m y *.mex12 que vienen con el propio programa o que han sido aportadas por usuarios del mismo. Estas funciones extienden en gran manera las posibilidades del programa. MATLAB dispone tambin de ficheros *.p, que son los ficheros *.m pre-compilados con la funcin pcode. Recurdese que para que MATLAB encuentre una determinada funcin de usuario el correspondiente fichero-M debe estar en el directorio actual o en uno de los directorios del search path. Caractersticas generales de las funciones de MATLAB El concepto de funcin en MATLAB es semejante al de C y al de otros lenguajes de programacin, aunque con algunas diferencias importantes. Al igual que en C, una funcin tiene nombre, valor de retorno y argumentos. Una funcin se llama utilizando su nombre en una expresin o utilizndolo como un comando ms. Las funciones se pueden definir en ficheros de texto *.m en la forma que se ver ms adelante. Considrense los siguientes ejemplos de llamada a funciones:
donde se han utilizado algunas funciones matemticas bien conocidas como el clculo del valor mximo, el seno, el coseno y la raz cuadrada. Los nombres de las funciones se han puesto en negrita. Los argumentos de cada funcin van a continuacin del nombre entre parntesis (y separados por comas si hay ms de uno). Los valores de retorno son el resultado de la funcin y sustituyen a sta en la expresin donde la funcin aparece. Una diferencia importante con otros lenguajes es que en MATLAB las funciones pueden tener valores de retorno matriciales mltiples (ya se ver que pueden recogerse en variables ad hoc todos o slo parte de estos valores de retorno), como en el primero de los ejemplos anteriores. En este caso se calcula el elemento de mximo valor en un vector, y se devuelven dos valores: el valor mximo y la posicin que ocupa en el vector. Obsrvese que los 2 valores de retorno se recogen entre corchetes, separados por comas.
18 Una caracterstica de MATLAB es que las funciones que no tienen argumentos no llevan parntesis, por lo que a simple vista no siempre son fciles de distinguir de las simples variables. En la segunda lnea de los ejemplos anteriores, eps es una funcin sin argumentos, que devuelve la diferencia entre 1.0 y el nmero de coma flotante inmediatamente superior. En lo sucesivo el nombre de la funcin ir seguido de parntesis si interesa resaltar que la funcin espera que se le pase uno o ms argumentos. Los nombres de las funciones de MATLAB no son palabras reservadas del lenguaje. Es posible crear una variable llamada sin o cos, que ocultan las funciones correspondientes. Para poder acceder a las funciones hay que eliminar (clear) las variables del mismo nombre que las ocultan, o bien haber definido previamente una referencia a funcin (function handle). MATLAB permite que una funcin tenga un nmero variable de argumentos y valores de retorno, determinado slo en tiempo de ejecucin. Ms adelante se ver cmo se hace esto. MATLAB tiene diversos tipos de funciones. A continuacin se enumeran los tipos de funciones ms importantes, clasificadas segn su finalidad: 1.- Funciones matemticas elementales. 2.- Funciones especiales. 3.- Funciones matriciales elementales. 4.- Funciones matriciales especficas. 5.- Funciones para la descomposicin y/o factorizacin de matrices. 6.- Funciones para anlisis estadstico de datos. 7.- Funciones para anlisis de polinomios. 8.- Funciones para integracin de ecuaciones diferenciales ordinarias. 9.- Resolucin de ecuaciones no-lineales y optimizacin. 10.- Integracin numrica. 11.- Funciones para procesamiento de seal. A continuacin se enumeran algunas caractersticas generales de todas las funciones de MATLAB: Los argumentos actuales13 de estas funciones pueden ser expresiones y tambin llamadas a otra funcin. Las funciones de MATLAB nunca devuelven modificadas las variables que se pasan como argumentos, a no ser que se incluyan tambin como valores de retorno. Si el usuario las modifica dentro de la funcin, previamente se sacan copias de esas variables (se modifican las copias, no las variables originales). Se podra decir que los argumentos de las funciones de MATLAB siempre se pasan por valor, nunca por referencia. MATLAB admite valores de retorno matriciales mltiples. Por ejemplo, en el comando: la funcin eig() calcula los valores y vectores propios de la matriz cuadrada A. Los vectores propios se devuelven como columnas de la matriz V, mientras que los valores propios son los elementos de la matriz diagonal D. En los ejemplos siguientes:
19 puede verse que la misma funcin max() puede ser llamada recogiendo dos valores de retorno (el mximo elemento de un vector y la posicin que ocupa) o un slo valor de retorno (el mximo elemento). Las operaciones de suma y/o resta de una matriz con un escalar consisten en sumar y/o restar el escalar a todos los elementos de la matriz. Recurdese que tecleando help nombre_funcion se obtiene de inmediato informacin sobre la funcin de ese nombre. En el Help Desk aparecen enlaces a Functions - By Cathegory y Functions Alphabetical List, en donde aparecen relaciones completas de las funciones disponibles en MATLAB.
Esta dualidad entre comandos y funciones es sobre todo til en programacin, porque permite construir los argumentos con las operaciones propias de las cadenas de caracteres.
20 sign(x) devuelve -1 si <0, 0 si =0 y 1 si >0. Aplicada a un nmero complejo, devuelve un vector unitario en la misma direccin rem(x,y) resto de la divisin (2 argumentos que no tienen que ser enteros) mod(x,y) similar a rem (Ver diferencias con el Help) round(x) redondeo hacia el entero ms prximo fix(x) redondea hacia el entero ms prximo a 0 floor(x) valor entero ms prximo hacia - ceil(x) valor entero ms prximo hacia + gcd(x) mximo comn divisor lcm(x) mnimo comn mltiplo real(x) partes reales imag(x) partes imaginarias abs(x) valores absolutos angle(x) ngulos de fase
21 Prctica No. 1 Generacin de Seales Peridicas Generar seales peridicas tales como Ondas Cuadradas o Triangulares empleando MATLAB. Considere primero la generacin de una onda cuadrada de amplitud A, frecuencia fundamental w0 (medida en radianes por segundo), y ciclo de trabajo rho. Es decir, rho es la fraccin de cada periodo en el cual la seal es positiva, pi es una funcin integrada en MATLAB que regresa el numero de punto flotante mas cercano a pi, el comando plot dibuja lneas que conectan los valores sucesivo de la seal y de ese modo brindan la apariencia de una seal en tiempo continuo. Para general tal seal de Onda Cuadrada usamos el comando bsico: >> A*square(w0*t + rho); Para generar una Onda Cuadrada en Tiempo Continuo, empleamos el siguiente conjunto completo de comandos: >>A = 1; %Representa la Amplitud que en este caso es de 1 >>w0 = 10*pi; %Frecuencia Fundamental >>rho = 0.5; % La fraccin de cada periodo en el cual la seal es positive. >>t = 0:.001:1; % Intervalo de muestreo F de 1 ms sobre el intervalo de 0 a 1s >>sq = A*square(w0*t + rho); % Para generar la Onda Cuadrada >>subplot (2,2,1), plot(t,sq,'r'); % Para Graficar el t (intervalo de muestreo) y sq (onda cuadrada) >>title('Onda Cuadrada'); %Titulo de la hoja grafica >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('Amplitud'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>gtext('<- T ->'); %Para agregar comentario
22 Para generar una Onda Cuadrada en Tiempo Discreto, empleamos el siguiente conjunto completo de comandos: >>A = 1; %Representa la Amplitud que en este caso es de 1 >>omega = pi/4; %Frecuencia Fundamental >>rho = 0.5; % Fraccin de cada periodo en el cual la seal es positiva. >>n = -10:10; % Intervalo de muestreo F de 1 ms sobre el intervalo de -10 a 10s >>x = A*square(omega*n + rho); % Para generar la Onda cuadrada en tiempo Discreto >>subplot (2,2,4), stem(n,x,'r'); % Para Graficar el n (intervalo de muestreo) y x (onda cuadrada) >>title('Onda Cuadrada'); %Titulo de la hoja grafica >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('Amplitud'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>gtext('<- T ->'); %Para agregar comentario
Para la generacin de una Onda Triangular de amplitud A, frecuencia fundamental w0, y ancho W. Sea T el periodo de la onda triangular, con el primer valor mximo ocurriendo en t = W.T. El comando bsico para generar esta seal peridica es: >> A*sawtooth(w0*t + W); Para generar una Onda Triangular, empleamos el siguiente conjunto completo de comandos: >>A = 1; %Representa la Amplitud que en este caso es de 1 >>w0 = 10*pi; %Frecuencia Fundamental >>W = 0.5; % Representa el Ancho >>t = 0:.001:1; % Intervalo de muestreo F de 1 ms sobre el intervalo de 0 a 1s >>tri = A*sawtooth(w0*t + W); % Para generar la Onda Triangular >>subplot (2,2,3), plot(t,tri,'y'); % Para Graficar el t y tri >>title('Onda Triangular'); %Titulo de la hoja grafica >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('Amplitud'); %Personifica el eje Y
Ejercicio Prctico: Genere una seal de Onda Triangular en Tiempo Continuo con corrimiento hacia la izquierda sea negativo, la cual tendr una A (amplitud) de 5, una Frecuencia Fundamental = 10*pi, y un ancho de 0. Resp: Para generar una Onda Triangular en Tiempo Continuo con corrimiento hacia la izquierda, utilizamos el siguiente conjunto de comandos. Tomando en cuenta que quien hace el corrimiento es La frecuencia fundamental. La cual si es positiva tendr corrimiento hacia la derecha sea positivo y si es negativa tendr un corrimiento hacia la izquierda sea negativo. A = 5; %Representa la Amplitud que en este caso es de 1 w0 = -10*pi; %Frecuencia Fundamental W = 1; % Representa el Ancho t = 0:.001:1; % Intervalo de muestreo F de 1 ms sobre el intervalo de 0 a 1s tri = A*sawtooth(w0*t + W); % Para generar la Onda Triangular plot(t,tri,'m'); % Para Graficar el t y tri title('Onda Triangular'); %Titulo de la hoja grafica xlabel('Tiempo t, en Segundos'); %personifica el eje X ylabel('Amplitud'); %Personifica el eje Y legend('Seal'); %personifica la seal gtext('<- T ->'); %Para agregar comentario
24
Ejercicio Prctico: Genere una seal de Onda Triangular en Tiempo Discreto, la cual tendr una A (amplitud) de 1, con una secuencia definida para n = -10:10, a una Frecuencia Fundamental = pi/4 Resp: Para generar una Onda Triangular en Tiempo Discreto, empleamos el siguiente conjunto completo de comandos: >>A = 1; %Representa la Amplitud que en este caso es de 1 >>omega = pi/4; %Frecuencia Fundamental >>W = 0.5; % Fraccin de cada periodo en el cual la seal es positiva. >>n = -10:10; % Intervalo de muestreo F de 1 ms sobre el intervalo de -10 a 10s >>tri = A*sawtooth(omega*n + W); % Para generar la Onda triangular en tiempo Discreto >>stem(n,tri,'g'); % Para Graficar el n y tri >>title('Onda Triangular'); %Titulo de la hoja grafica >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('Amplitud'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>gtext('<- T ->'); %Para agregar comentario
25
26 Prctica No. 2 Generacin de Seales Exponenciales Al generar las seales exponenciales, tenemos exponenciales que decaen y exponenciales crecientes. El comando MATLAB para generar una Exponencial que decae es: >>B*exp ( - a * t ); El comando MATLAB para generar una Exponencial Creciente es: >>B*exp ( a * t ); En ambos casos, el parmetro exponencial a es positivo. Para generar una Seal Exponencial Decreciente en Tiempo Continuo, empleamos el siguiente conjunto completo de comandos: >>B = 5; >>a = 6; >>t = 0:.001:1; >>x = B*exp(-a*t); >>subplot (2,2,1) , plot(t,x,m) % Para Graficar el t y tri >>title('Exponencial Decreciente); %Titulo de la hoja grafica >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal
27 Ejercicio Prctico: Genere una Seal Exponencial Decreciente en Tiempo Discreto, la cual tendr una A (amplitud) de 1, Un intervalo de tiempo de n= -0:25 , y un ancho de 0.85 Para generar una Seal Exponencial Decreciente en Tiempo Discreto, empleamos el siguiente conjunto completo de comandos, tomando en cuenta que para la representacin de la seal exponencial en Tiempo Discreto utilizamos la siguiente formula x = A(altura)*r(ancho).^n(tiempo Discreto): >>A = 1; >>r = 0.85; >>n = -0:25; >>x = A*r.^n; >>stem(n,x,c) % Para Graficar el t y tri >>title('Exponencial Creciente); %Titulo de la hoja grafica >>xlabel('Tiempo t); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal
28 Para generar una Seal Exponencial Creciente en Tiempo Continuo, empleamos el siguiente conjunto completo de comandos: >>B = 1; >>a = 5; >>t = 0:.001:1; >>x = B*exp(a*t); >>subplot (2,2,3) , plot(t,x,r) % Para Graficar el t y tri >>title('Exponencial Creciente); %Titulo de la hoja grafica >>xlabel('Tiempo t); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal
29 Para generar una Seal Exponencial Creciente en Tiempo Discreto, empleamos el siguiente conjunto completo de comandos: >>B = 1; >>r =0.85; >>n = -0:25; >>x = B*r.^-n; >>subplot (2,2,4) , stem(n,x,b) % Para Graficar el t y tri >>title('Exponencial Creciente); %Titulo de la hoja grafica >>xlabel('Tiempo t); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal
30 Prctica No. 3 Generacin de Seales Senoidales MATLAB contiene tambin funciones trigonometricas que pueden usarse para generar seales senoidales. Una seal Coseno de amplitud A, frecuencia w0(medida en radianes por segundo) y ngulo de fase phi (en radianes) se obtiene empleando el comando: >> A*cos(w0*t + phi); De modo alternativo, es posible utilizar la funcin seno para generar una seal senoidal empleando el comando. >> A*sin(w0*t + phi); Estos dos comandos se utilizan para generar las seales senoidales . Para generar una Seal Senoidal para la seal coseno en Tiempo Continuo, empleamos el siguiente conjunto completo de comandos: >> A = 4; >>w0 = 20*pi; >> phi = pi/6; >> t = 0:.001:1; >> coseno = A*cos(w0*t + phi); >> subplot (2,2,1) , plot(t,coseno,'y') % Para Graficar el t y coseno >> title('Seal Senoidal Coseno'); %Titulo de la hoja grafica >> xlabel('Tiempo t'); %personifica el eje X >> ylabel('x(t)'); %Personifica el eje Y >> legend('seal'); %personifica la seal >> gtext('<-T->')
Para generar una Seal Senoidal para la seal coseno en Tiempo Discreto, empleamos el siguiente conjunto completo de comandos:
31 >>A = 1; >>omega = 2*pi/12; %frecuencia angular >>phi = 0; >>n = -20:20; >>coseno = A*cos(omega*n); >>subplot (2,2,2) , stem (n,coseno,'r') % Para Graficar el n y coseno >>title('Seal Senoidal Coseno Tiempo Discreto'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('seal'); %personifica la seal >>gtext('<-T->')
Para generar una Seal Senoidal para la seal seno en Tiempo Continuo, empleamos el siguiente conjunto completo de comandos: >> A = 4; >>w0 = 20*pi; >> phi = pi/6; >> t = 0:.001:1; >> seno = A*sin(w0*t + phi); >> subplot (2,2,3) , plot(t,seno,'g') % Para Graficar el t y coseno >> title('Seal Senoidal seno'); %Titulo de la hoja grafica >> xlabel('Tiempo t'); %personifica el eje X >> ylabel('x(t)'); %Personifica el eje Y >> legend('seal'); %personifica la seal >> gtext('<-T->')
32
Para generar una Seal Senoidal para la seal seno en Tiempo Discreto, empleamos el siguiente conjunto completo de comandos >>A = 1; >>omega = 2*pi/12; %frecuencia angular >>phi = 0; >>n = -20:20; >>seno = A*sin(omega*n); >>subplot (2,2,4) , stem (n,seno,'b') % Para Graficar el n y seno >>title('Seal Senoidal seno Tiempo Discreto'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('seal'); %personifica la seal >>gtext('<-T->')
33
34
Prctica No. 4 Generacin de Seales Senoidales Amortiguadas Exponencialmente En las practicas anteriores, podemos ver que los comandos de generacin de seales, se ha generado la amplitud deseada multiplicando un escalar, A en un vector que representa un seal de amplitud unitaria (por ejemplo, sin(w0*t + phi)). Esta operacin se describe empleando un asterisco. Ahora consideremos la generacin de una seal que requiere la multiplicacin elemento por elemento de dos vectores. Suponga que multiplicamos una seal senoidal por una seal exponencial para producir una seal senoidal amortiguada exponencialmente. Con cada componente de la seal siendo representado por un vector, la generacin de tal seal producto requiere la multiplicacin de un vector por otro vector n una base de elemento por elemento. MATLAB representa la multiplicacin elemento por elemento utilizando un punto seguido por un asterisco. De tal modo, el comando para general la seal senoidal amortiguada exponencialmente. A*sin (w0*t + phi).*exp(-a*t); Un decaimiento exponencial, a es positiva, el conjunto completo de comandos es como sigue: >>A = 60; >>w0 = 20*pi; %frecuencia angular >>phi = 0; >>a = 6 >>t = 0:.001:1; >>expseno = A*sin(w0*t + phi).*exp(-a*t); >>subplot (2,2,1) , plot (t,expseno,'g') % Para Graficar el t y coseno >>title('Seal Senoidal amortiguadas exponencialmente'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('seal'); %personifica la seal
35 Prctica No. 5 Funcin Escaln, de Impulso y de Rampa En MATLAB, ones (M , N) es una matriz M x N de unos, y zeros (M , N) es una matriz de M x N de ceros. Podemos usar estas matrices para generar dos seales empleadas comnmente, del siguiente modo: Funcin Escaln. Una funcin escaln de magnitud unitaria se genera al escribir. u = [zeros (1,50), ones(1,50)]; Funcin en tiempo discreto: Un impulso en tiempo discreto de magnitud unitaria se genera escribiendo. Delta = [zeros (1,49), 1, zeros(1, 49)]; Para generar una secuencia de la rampa, simplemente escribimos Ramp = n; Ejercicio. Ilustrar como un par de funciones escaln recorridas en el tiempo, una con relacin a la otra, pueden utilizarse para producir un pulso rectangular. Reps: >>t= -1:1/500:1; %define los valores de tiempo de -1 seg a 1 seg >>u1 = [zeros(1,250), ones(1,751)]; %Genera funcin escaln de amplitud unitaria, con inicio en el tiempo t=-0.5 >>u2 = [zeros(1,751), ones(1,250)]; %Genera una segunda funcin escaln de amplitud unitaria con inicio en t = 0.5 seg >>u = (u1) - (u2); %Sustrae U2 de u1 para producir un pulso rectangular de amplitud y duracin unitarias centrado en el origen >>subplot (2,2,1), plot (u,'b') >>title('funciones escaln recorridas en el tiempo'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>hold on >>subplot (2,2,3), plot (u1,'r') >>title('inicio en el tiempo t = - 0.5'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>subplot (2,2,4), plot (u2,'m') >>title('inicio en el tiempo t = 0.5'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>hold off
36
37 Prctica No. 6
Operaciones Bsicas Sobre Seales Operaciones realizadas sobre variables dependientes Operacion de Escalamiento: Es multiplicar una funcin por un escalar o (factor de escala) c.
Esto equivale al efecto fisico del amplificador, donde el facto de escala c es la Ganancia. - En Tiempo Continuo se expresa de la siguiente manera: Y(t) = C * X(t) - En Tiempo Discreto se expresa de la siguiente manera: Y[n] = C * X[n] En este caso generaremos una Seal Senoidal para ejemplificar la operacin de escalamiento. Donde multiplicaremos la funcin F(t), en este caso nuestra funcin es seno = A*sin(w0*t + phi), la cual ser multiplicada por el factor de escala C el cual tendr un valor de 2. Aqu veremos como la primera seal generada tiene una amplitud de 2. La cual al aplicar la operacin de escalamiento, multiplicada por dos en este caso, tendr una amplitud de 4. Para generar una Seal Senoidal para la seal seno en Tiempo Continuo, aplicndole la operacin de escalamiento, empleamos el siguiente conjunto completo de comandos: El mismo procedimiento utilizaramos en caso del tiempo discreto. >> A = 2; %Amplitud de la seal Senoidal Original >> w0 = 6*pi; %Frecuencia Fundamental >> phi = pi/5; >> t = 0:.001:1; %Intervalo de muestreo de F de 1ms >> seno = A*sin(w0*t + phi); %Funcin para generar la funcin seno >> hold on >> subplot (2,2,1), plot(t,seno,'g') % Para Graficar el t y coseno >> title('Seal Senoidal seno'); %Titulo de la hoja grafica >> xlabel('Tiempo t'); %personifica el eje X >> ylabel('x(t)'); %Personifica el eje Y >> legend('seal'); %personifica la seal >> x = seno * 2 %factor de escala c= 2. En este caso. >> hold on >> subplot (2,2,3), plot(t,x,'b') >> title('Operacion de Escalamiento Sobre La Seal Senoidal seno'); %Titulo de la hoja grafica >> xlabel('Tiempo t'); %personifica el eje X >> ylabel('x(t)'); %Personifica el eje Y >> legend('seal'); %personifica la seal >> hold off
38
Ejercicio........................ Operacion de Suma: Consiste en sumar ( ) dos seales. Esta funcion equivale a la funcion que realiza un dispositivo o Etapa Mezcladora. X2(t) - En Tiempo Continuo se expresa de la siguiente manera: Y(t) = X1(t) - En Tiempo Discreto se expresa de la siguiente manera: Y(t) = X1[n] X2[n] Ejemplo. >>a = 4; >>w0 = 20*pi; >>phi = pi/6; >>t = 0:.001:1;% Intervalo de muestreo F de 1 ms sobre el intervalo de 0 a 1s >>seno = a*sin(w0*t + phi); >>subplot (2,2,1) , plot(t,seno,'b') % Para Graficar el t y coseno >>hold on >>title('Seal Senoidal seno'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('seal'); %personifica la seal >>A = 1; %Representa la Amplitud que en este caso es de 1 >>W0 = 10*pi; %Frecuencia Fundamental >>rho = 0.5; % La fraccin de cada periodo en el cual la seal es positive. >>sq = A*square(W0*t + rho); % Para generar la Onda Cuadrada >>subplot (2,2,2), plot(t,sq,'r'); % Para Graficar el t (intervalo de muestreo) >>hold on >>title('Onda Cuadrada'); %Titulo de la hoja grafica
39 >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('Amplitud'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>X = seno + sq; % Suma la seal Senoidal a la seal Cuadrada >>subplot (2,2,3), plot(t,X,'g') >>hold on >>title('Sumatoria de la seal Seno y la Cuadrada'); %Titulo de la hoja grafica >>xlabel('Tiempo t, en Segundos'); %personifica el eje X >>ylabel('Amplitud'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>hold off
Ejercicio........................ >>A = 1; >>r = 0.85; >>n = -0:25; >>h = A*r.^n; >>Subplot (2,2,1), stem(n,h,'c') % Para Graficar el t y tri >>hold on >>title('Exponencial Creciente'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>omega = 2*pi/12; %frecuencia angular >>phi = 0;
40 >>seno = A*sin(omega*n); >>subplot (2,2,2) , stem(n,seno,'b') % Para Graficar el n y seno >>hold on >>title('Seal Senoidal seno Tiempo Discreto'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('seal'); %personifica la seal >>X = h + seno; >>subplot (2,2,3), stem(n,X,'g'); %Su de la seal Exponencial Creciente y de Decreciente >>hold on >>title('Sumatoria Seal Exp Creciente y Exp Decreciente'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>hold off
41 Operacion de Multiplicacion: Consiste en multiplicar ( * ) dos seales. Esta operacion en la practica la realiza lo que conocemos como Modulacion. - En Tiempo Continuo se expresa de la siguiente manera: Y(t) = X1(t) * X2(t) - En Tiempo Discreto se expresa de la siguiente manera: Y(t) = X1[n] * X2[n] Ejemplo MULTIPLICACIN DE DOS SEALES En este ejercicio generaremos dos seales Seno, una de alta frecuencia y otra de baja frecuencia y luego multiplicaremos resultados de dichas seales. Produciendo de esta manera la modulacion. % PRIMERA SEAL >>t = 0:.001:1;%Vector tiempo >>A= 4; %La amplitud; >>W = 50*pi; %La frecuenia; >>PHI = pi/6;% ngulo de desfase; >>SENO1 = A*sin(W*t + PHI); >>Subplot (2,2,1), plot(t,SENO1,'c') % Para Graficar el t y tri >>hold on >>title('ONDA SENO ALTA FRECUENCIA'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal % SEGUNDA SEAL >>A = 4; %La amplitud; >>W = 5*pi; %La frecuenia; >>PHI = pi/6; % ngulo de desfase; >>SENO2 = A*sin(W*t + PHI); >>Subplot (2,2,2), plot(t,SENO2,'r') % Para Graficar el t y tri >>hold on >>title('ONDA SENO BAJA FRECUENCIA'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal %MODULACIN >>MULT = SENO1 .* SENO2; >>Subplot (2,2,3), plot(t,MULT,'g') % Para Graficar el t y tri >>hold on >>title('MODULACIN'); %Titulo de la hoja grafica >>xlabel('Tiempo t'); %personifica el eje X >>ylabel('x(t)'); %Personifica el eje Y >>legend('Seal'); %personifica la seal >>hold off >>grid on
42