UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Perú, DECANA DE AMERICA)
FACULTAD DE INGENIERIA ELECTRONICA Y ELECTRICA LABORATORIO DE PROCESAMIENTO DIGITAL DE SEÑALES
LABORATORIO NO.1: INTRODUCCIÓN A MATLAB. 1.1 SEÑALES En este capítulo el estudiante se centrará en la utilización de Matlab para construir el código de los programas que van a ser utilizados en los subsiguientes laboratorios en la construcción de las secuencias y comprobar los diferentes conceptos vertidos en la parte teórica del curso. Se profundizará en algunos de los temas aquí tratados, especialmente especialmente en lo relacionado con el manejo de archivos y con la programación programación utilizando este producto de software.
1.2 OBJETIVO Desarrollar códigos de programas utilizando los comandos e instrucciones de Matlab, ejecutando los ejercicios propuestos orientados al procesamiento digital de señales. EQUERIDOS 1.3 EQUIPOS Y MATERIALES R EQUERIDOS
El equipo de experimentación experimentación necesario para realizar el presente laboratorio es: 1. PC INTEL CORE 2 DUO o superior. 2. Sistema Operativo Windows 2000 o XP. EQUERIDO 1.4 SOFTWARE R EQUERIDO
El siguiente software es necesario necesario para realizar este laboratorio: 1. Matlab V7.0, http://www.mathworks.com/ 2. Librerías y archivos de soporte.
1.5 GENERALIDADES Para iniciar los trabajos, en este caso con Matlab que es uno de tantos productos de software para trabajar con modelos matemáticos, debe iniciarse la PC con la versión disponible e instalada de Matlab. Seguidamente buscar en la pantalla el icono correspondiente en el escritorio de Windows, ubicarse sobre él con el ratón y luego presionar dos veces el botón izquierdo. Al abrirse la pantalla de Matlab, en la Ventana de Comandos (Command ( Command Window) Window) se muestra el símbolo “ >> ” (prompt) que nos indica que el programa está a la espera de nuestras instrucciones. Para salir de Matlab basta teclear exit o quit y para ejecutar cualquier instrucción la tecla Enter. Se debe tener en cuenta que una instrucción termina al cambiar de línea. Si necesitamos escribir más de una línea, debemos escribir el símbolo “...” (tres (tres puntos) al final de la misma y continuar en la siguiente línea. Si lo que queremos es escribir varias instrucciones dentro de la misma línea se debe separar con comas o punto y coma. El cursor se desplaza y posiciona con las flechas izquierda/derecha izquierda/derecha , y para borrar caracteres caracteres se puede utilizar las teclas Backspace o Del. Si lo que se desea es borrar toda la línea de edición se puede usar la tecla Esc. Otra opción útil es usar las flechas arriba/abajo arriba/abajo , para recuperar las instrucciones previas. Por lo tanto, se puede recuperar una línea anterior de instrucciones, editarla y ejecutarla una vez revisada. Para limpiar completamente completamente la Ventana de Comandos se utiliza el comando clc, para borrar lo almacenado en el Espacio de Trabajo
1
(Workspace) clear all, y para eliminar todas las figuras que no están ocultas, close all. En la Fig. 1.1 se muestra la pantalla del Matlab V7, donde se observa las diferentes ventanas, como son: Current Directory, Editor , Command Window, Workspace y Command History, que se detalla en 1.6.
Fig. 1.1 Ventanas del entorno de trabajo del Matlab V7.
1.5.1 Funciones implementadas en Matlab. El producto de software Matlab tiene implementada la gran mayoría de las funciones matemáticas más utilizadas, las cuales suelen admitir argumentos escalares y vectoriales. Además, maneja números complejos y utiliza indistintamente la i y la j para representar un número imaginario. Conviene precisar que los paréntesis “ ( ) ” y los corchetes “ [ ] ” tienen significados diferentes en Matlab. La primera se utiliza para construir y evaluar funciones y la segunda para definir vectores o matrices. El comando help permite obtener ayuda de las distintas funciones que Matlab tiene implementada. Por ejemplo: >> help atan
permite conocer la operación de la función arco tangente.
Ejercicio 1.1 (a) Determine el logaritmo del arco tangente del seno de π/4. (b) Compruebe que 3-4-5 son las dimensiones de las tres rectas que conforman un triángulo rectángulo. (c) Hallar la magnitud de 3-j5. >>log(atan(sin(pi/4))) >>sqrt(3^2+4^2)-5 >>abs(3-j*5)
Ejercicio 1.2
1 , 8
Evalúe la expresión: tan t 2 2sen
para t = 0.5, 0.95 y 1.
2
Ejercicio 1.3 Ejecute los comandos clock, date y calendar . Interprete las respuestas proporcionadas por Matlab y limpie luego la pantalla.
1.5.2 Formatos numéricos Para visualizar los resultados en la pantalla de comandos, se tienen varias posibilidades aunque, por defecto, los números en pantalla se representa con redondeo de cuatro cifras decimales. También decide si representa un número en notación convencional (coma fija) o notación científica (coma flotante). Los números enteros que tengan menos de nueve cifras siempre se representan con coma fija. El comando para la representación en pantalla es format y admite, entre otras, las opciones siguientes: • format • format • format • format
: 16 dígitos. long : 4 dígitos. Equivale a escribir sólo format. short long e : 16 dígitos más exponente. short e: 4 dígitos más exponente.
Es importante comprender que Matlab no cambia la representación interna de un número cuando se escogen formatos diferentes, sólo modifica su visualización en pantalla.
Ejercicio 1.4 Escriba en los cuatro formatos anteriores la raíz cuadrada del número π. >> sqrt(pi) >> format short, sqrt(pi) >> format long e, sqrt(pi) >> format short e, sqrt(pi)
Ejercicio 1.5 Ejecute los comandos realmax y realmin para conocer exactamente el rango de representacion de un número real dentro del cual varían los números que maneja Matlab.
1.5.3 Variables Una variable es un símbolo que se asigna temporalmente a un dato. La forma de definir una variable cualesquiera es “ variable = expresión”. Por ejemplo: >> x=7*pi
Para saber el valor actual de una variable sólo hay que escribirla y presionar la tecla Enter. El resultado o respuesta de ejecutar cualquier expresión matemática se guarda, por defecto en una variable denominada ans, que sale inmediatamente en la pantalla de comandos y que toma como valor el correspondiente resultado. Si deseamos que esta variable no aparezca en la pantalla, basta escribir al final de la expresión el símbolo “ ; ” (punto y coma).
Ejercicio 1.6 2
Crear dos variables que almacenen los valores:
3 11 e
4 tanh 2
,
log 2 cos 2 2 / 3
y calcule la suma y producto de ambas variables.
3
Ejercicio 1.7 Consulte la ayuda sobre la variable predeterminada j y/o i y calcule j2. Luego, defina la variable 2 j como dos y vuelva a calcular j . ¿Qué regla práctica debe obtenerse?
1.6 EL ENTORNO DE TRABAJO DE MATLAB 1.6.1 El entorno de trabajo La versión 7.0, al igual que las anteriores, el entorno de Matlab es más gráfica e intuitiva. Los principales componentes de dicho entorno son el explorador de rutas ( Path Browser ), el editor y depurador de errores ( Editor / Debugger ) y el visualizador del espacio de trabajo (Workspace).
1.6.2 Path Browser Con este entorno de trabajo se puede llamar a una gran variedad de funciones, tanto propias como programadas por los usuarios. A veces, puede haber funciones diferentes que tengan el mismo nombre. Por lo tanto, es interesante saber cómo Matlab busca cualquier función que se le pida que ejecute. La clave es la ruta de búsqueda ( search path) que el programa utiliza cuando encuentra el nombre de una función. El search path es una lista de directorios que se puede ver y modificar mediante el comando path, o utilizando el Path Browser (Submenú Set Path en el menú File).
1.6.3 El directorio actual El concepto de directorio actual o de trabajo, es el directorio donde el usuario debe guardar los diferentes archivos que genere en las sesiones, para que Matlab pueda detectarlos. Puede consultar el directorio en el que se encuentra con el comando pwd. El contenido de dicho directorio puede obtenerse con el comando dir. Para cambiar el directorio actual se utiliza el comando cd (Change Directory) seguido del nombre del nuevo directorio. Ejecutando cd.. , se sube un nivel en la jerarquía de directorios.
1.6.4 Editor/Debbuger En Matlab tienen particular importancia los M-archivos, esto es, archivos con la extensión “ *.m ”, son archivos de texto ASCII que contienen un conjunto de comandos de Matlab. La importancia de estos archivos es que al escribir su nombre en la línea de comandos de Matlab y presionar Enter, se ejecutan todos los comandos contenidos en dicho archivo. Matlab dispone de un editor propio que permite tanto crear y modificar estos archivos (proceso de edición- Editor ), como ejecutarlos paso a paso para detectar errores (proceso de depuración- Debugger ).
1.6.5 Workspace El espacio de trabajo (Workspace) de Matlab es el conjunto de variables que en un determinado momento están definidas en la memoria del programa. Para obtener información sobre el workspace se pueden utilizar los comandos who y whos. La segunda proporciona una información más detallada que la primera. Copias completas de una sesión de trabajo. Matlab incorpora el comando diary para guardar sesiones completas de trabajo. Este orden puede ser de gran utilidad en el desarrollo de las clases prácticas, pues permite guardar en un archivo de texto todos los resultados obtenidos en la sesión, los comentarios realizados en la clase y en general, todo lo que el programa va presentando en pantalla. La forma natural de proceder es la siguiente: se escribe diary nombre.txt . De esta manera, se crea el archivo nombre1.txt en el directorio actual y todo aquello que aparezca en pantalla, a partir de ese momento, se graba en dicho archivo. Para que dejen de grabarse las
4
instrucciones que aparecen en pantalla hay que escribir diary off y para volver a abrir el archivo diary on.
1.7 MATRICES Y VECTORES 1.7.1 Matrices y vectores En Matlab se trabaja fundamentalmente con matrices y para el caso de los números, estas son consideradas como matrices cuadradas de orden uno. Las matrices pueden definirse de las siguientes formas: • Escribir la matriz entre corchetes, colocando las filas una a continuación de otra, separadas por el símbolo “ ; “. Entre los elementos de una misma fila podemos colocar una coma o dejar un espacio en blanco. • Escribir la matriz entre corchetes, colocando cada fila en un renglón. • La matriz vacía se representa por [ ]. Como es natural, si sólo introducimos una fila tenemos un vector fila. Matlab incluye una orden muy útil para generar vectores cuyas coordenadas están en progresión aritmética. Es decir, la estructura a:b:c crea un vector entre los números a y c, incrementando cada coordenada con el número b. Si sólo se escribe a:c se considera por defecto que b es igual a uno.
Ejercicio 1.8 Construya tres vectores cuyos elementos estén contenidos en el intervalo [-1,1] en cuatro, ocho y veinte subintervalos iguales. Luego, con las tres primeras coordenadas de cada uno de ellos, genere las tres filas de una matriz de 3 × 3 y calcule el determinante de dicha matriz y su traspuesta. >> u=-1:2/4:1, v=-1:2/8:1, w=-1:2/20:1 >> A=[-1.0,-0.50, 0.00 -1.0,-0.75,-0.50 -1.0,-0.90,-0.80] >> B=A’
>> det(A), det(B)
Ejercicio 1.9 Considere la matriz cuadrada de 4 x 4
16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 Utilizando el comando sum, explique la razón de por que se le denomina matriz mágica.
1.7.2 Direccionamiento y manipulación de matrices Para seleccionar un elemento determinado de una matriz se escribe el nombre de la matriz seguida del número de fila y columna separados por una coma y entre paréntesis. Si se desea extraer una submatriz basta colocar, en vez de números, vectores cuyas componentes son los números de las correspondientes filas y columnas. El símbolo dos puntos es muy útil para crear submatrices. Cuando no se le asignan valores a la derecha e izquierda, por defecto, recorre todas las filas o columnas. Si colocamos datos fuera del rango actual de una matriz se rellenan con ceros las zonas no especificadas.
5
Ejercicio 1.10 Obtenga de cuatro maneras diferentes la submatriz formada por la segunda y la tercera fila de la siguiente matriz:
1 1 1 1 >> >> >> >> >>
1 1 1
2 3 3 2 3 4 2
2
2
A = [1 1 1 1;1 2 2 2 ;1 2 3 3 ;1 2 3 4 ] A(2:3,1:4) A(2:3,:) A([2 3],[1 2 3 4]) A([1 4],:)=[]
Ejercicio 1.11 Defina una matriz A cuadrada de orden 15 tal que todos sus elementos sean nulos, salvo la primera fila y la primera columna, las cuales toman los valores, respectivamente de la columna o fila en la que se encuentran.
Ejercicio 1.12 Escriba las matrices A y B definidas por A(i, j) = 10(i - j) + 1; i, j = 1, ..., 10. i j 1 1, , i , j 1,...., 20 B i, j 0, en otro caso
1.8 GRAFICAS EN MATLAB La ventana gráfica de Matlab. Para mostrar las correspondientes gráficas, abre una nueva ventana, la denominada ventana de figura. Si ya hubiera una ventana de figura, se borra la ventana de figura actual y se dibuja en ella la nueva gráfica. Para utilizar dos o más gráficas en diferentes ventanas de figura, se usa el comando figure. El comando figure(n) muestra o crea, si no la hay, la ventana de la figura n-ésima y ésta pasa a ser la ventana de figura activa. La orden close cierra la ventana gráfica activa.
1.8.1 Gráficas bidimensionales Para obtener gráficas 2-D, Matlab admite cuatro opciones: gráficas en coordenadas cartesianas, gráficas en coordenadas polares, gráficas de barras y gráficas de escaleras. El comando para representar datos bidimensionales en coordenadas cartesianas es plot, para crear gráficas en coordenadas polares es polar y, finalmente, los gráficos de barras y escaleras se generan usando los comandos bar y stairs, respectivamente. El comando plot escala los ejes para ajustar los datos, representa los puntos y, a continuación, conecta los puntos con una línea recta. También añade una escala numérica y coloca de forma automática marcas en ambos ejes. Conviene aclarar que lo primero que se hace al ejecutar el comando plot es eliminar toda la información (líneas, ejes,...) sobre la gráfica anterior, si la hubiere.
Ejercicio 1.13 Dibuje la gráfica de la función exponencial en el intervalo [-3,3]. Obtenga una segunda gráfica donde a la curva anterior se le añada la recta tangente en x = 0.
6
>> x=-3:0.01:3; y=exp(x); plot(x,y) >> z= x+1; plot(x,y,x,z)
Ejercicio 1.14 Resuelva el ejercicio anterior usando el comando hold.
Ejercicio 1.15 Dibuje la gráfica de la elipse centrada en el origen y de semiejes 3 y 5.
Ejercicio 1.16 Dibuje un polígono regular de 10 lados que pueda inscribirse en una circunferencia de radio uno. (Indicación: Evalue plot sobre un vector cuyas componentes sean números complejos).
1.8.2 Gráficas tridimensionales Para obtener gráficas 3-D, Matlab admite tres opciones: gráficas de líneas, gráficas de superficies y gráficas de contorno. El comando básico para realizar gráficas de líneas es plot3, los comandos para gráficas de superficies son mesh y surf y, finalmente, para gráficas de contorno es contour.
1.8.3 Gráficas de líneas La función plot3 es análoga a su homóloga bidimensional plot. Su forma más sencilla es plot3(x,y,z) la cual dibuja una línea que une los puntos ( x(1), y(1), z (1)), ( x(2), y(2), z (2)), ( x(3), y(3), z (3)), etc. , y la proyecta sobre un plano para poderla representar en pantalla.
Ejercicio 1.17 Dibuje en verde un tramo de una espiral cilíndrica. >> fi=[0:pi/20:6*pi]; >> plot3(cos(fi),sin(fi),fi,’ r’)
Ejercicio 1.18 Una forma alternativa de obtener el vector anterior fi es usar el comando linspace . Mediante la instrucción help linspace escrita en la pantalla de comandos, recabar mayor información sobre la operación de esta función y obtener de nuevo dicho vector.
Ejercicio 1.19 Dibuje la curva alabeada de ecuaciones paramétricas: 3
x(t ) = cos(t ), y = cos(t ) sen(t ), z = sen(t ), t ∈ [−4π, 4π].
1.8.4 Gráficas de superficies La idea es dibujar una función de dos variables sobre un dominio rectangular. Supongamos que x e y son dos vectores que contienen las coordenadas en una y otra dirección de la retícula sobre la que se va a dibujar la función. Se inicia generando dos matrices X (cuyas filas son copias de x) e Y (cuyas columnas son copias de y) con el comando meshgrid, las cuales representan las coordenadas de todos los puntos del reticulado. Posteriormente, se calcula la matriz gráfica de datos Z a partir de las matrices de coordenadas X e Y , teniendo en cuenta la función de que se trate. Finalmente, la matriz Z se dibuja con el comando mesh o surf.
7
Ambas órdenes dibujan la función en perspectiva y la diferencia entre ellas está en el “llenado” de color de las células generadas por el mallado.
Ejercicio 1.20 Dibuje en un cuadrado la función “sombrero” z sen
>> >> >> >>
2 2 x y /
2 2 x y
u=-8:0.5:8;v=u; [U,V]=meshgrid(u,v); r=sqrt(U.^2+V.^2)+eps; w=sin(r)./r; mesh(w)
Ejercicio 1.21 Represente la superficie para las siguientes condiciones: x = 4cos(r ) sec(t ), y = 2 sen(r ) sen(t ), z = tan(t ), donde t ∈ [−π, π] y r ∈ [−2π, 2π]. En las versiones recientes de Matlab, hay un grupo de funciones que permite realizar gráficos de forma más sencilla. Ejemplos de ellas son ezplot y ezsurf.
1.9 ARCHIVOS EN MATLAB Comentarios generales. Para trabajar con datos de gran tamaño, o para diseñar nuevas funciones, es completamente imprescindible trabajar con archivos y por lo tanto, con el editor de texto. Los archivos adicionales que Matlab utiliza básicamente son aquellos con extensión “*.m” y una parte importante de cada sesión con Matlab es crear y refinar este tipo de archivos. Atendiendo a su uso, los M-archivos suelen dividirse en dos grandes grupos: archivos de instrucciones o tipo script y archivos de funciones. La pantalla del editor de programas facilita el trabajo con los M-archivos. Es decir, el editor muestra con diferentes colores los diferentes tipos o elementos constituyentes de los comandos (en verde los comentarios, en rojo las cadenas de caracteres, ...). Además, el editor verifica que las comillas o paréntesis que se abran tengan el correspondiente elemento de cierre. Para acceder al editor desde la ventana principal de Matlab, basta presionar el menú File y después New/ M-file (si se desea crear un archivo nuevo), o bien presionar el menú File y después Open M-file... (si se desea abrir un archivo ya existente). El manejo de esta nueva ventana es totalmente intuitivo. Otra opción para abrir el editor es el comando edit.
Ejercicio 1.22 Abra un archivo utilizando el editor de Matlab, escriba en él una matriz cuadrada de 2 x 2 y guarde dicho archivo con el nombre “ejercicio122.m”. Presionar: File → New → M- file Escribir: A=[1 2; 2 1] Presionar “ Guardar como ” En “ Nombre de Archivo ” escribir “ ejercicio122.m” Con la pestaña “Guardar en”, situarse en el directorio donde uno quiera almacenarlo y presionar “Guardar ”.
1.9.1 Archivos de instrucciones Un M-archivo de este tipo consiste en una sucesión de instrucciones de Matlab. Para ejecutarlas y ver el correspondiente resultado en pantalla, es suficiente escribir el nombre del archivo (sin la extensión) y presionar Enter . Las variables en un archivo de instrucciones son
8
globales y, por lo tanto, pueden afectar a los valores de las variables que se hayan creado durante la sesión de trabajo. Los archivos de instrucciones son básicamente utilizados para introducir datos en matrices de grandes dimensiones, pues en un archivo de este tipo es fácil corregir errores sin repetir todo el trabajo.
Ejercicio 1.23 Escriba y guarde en un archivo de nombre “datos123.m” la matriz cuadrada de 20 x 20 tal que los elementos de su diagonal sean todas iguales a 3 y las dos subdiagonales principales estén formadas por unos. Calcular su determinante. Seguidamente cambie la diagonal por el vector cuyas coordenadas son los primeros diez números naturales y vuelva a calcular el determinante de la nueva matriz. Escribir en un archivo: A=diag(3*ones(10,1)); A=A+diag(ones(9,1),1); A=A+diag(ones(9,1),-1);
Guardar en ‘‘datos123.m’’. Ejecutar el archivo y escribir en Matlab: >> det(A)
Abrir ‘‘datos123.m’’ A=A-diag(3*ones(10,1)); A=A+diag(1:10);
Guardar ‘‘datos123.m’’. Ejecutar el archivo y escribir en Matlab: >> det(A)
1.9.2 Archivos de funciones Los M-archivos de funciones son los que permiten incrementar la colección de funciones que ejecuta Matlab. Es decir, se pueden crear funciones específicas para algún problema concreto y a partir de su introducción, dichas funciones tienen el mismo rango que las funciones del sistema y se ejecutan de igual forma. Las variables en los archivos de las funciones son locales, es decir, no afectan a los valores de las variables que se hayan creado durante la sesión de trabajo. Se recomienda que el nombre de un archivo de una función sea el nombre de la función seguido, obviamente, de la extensión “.m”. La estructura de un archivo de este tipo es la siguiente: la primera línea comienza con la orden de Matlab function seguida del nombre de la función que deseamos definir junto con los argumentos de entrada y salida separados por comas. Es decir: function [argumentos de salida]=nombre de la función(argumentos de entrada
A continuación, puede haber diversas líneas de comentario que han de estar precedidas necesariamente por el símbolo “ % ”. Conviene decir que son precisamente estas líneas las que aparecerán en pantalla al usar el comando help. Finalmente aparece el programa, es decir, las instrucciones necesarias para poder evaluar la función. Tanto los argumentos de entrada como los de salida no son obligatorios y si no aparecen, no hace falta escribir los correspondientes corchetes o paréntesis.
9
Ejercicio 1.24 Diseñar una función que muestre la gráfica de una función cosenoidal atenuada exponencialmente y(t ) = exp(-0.05nt )cos(2πt ) y cuyo argumento de entrada sea el factor de atenuación exponencial n. La gráfica debe tener una malla y deben situarse los ejes de coordenadas. % GRAFICAR UNA SEÑAL COSENO ATENUADA EXPONENCIALMENTE % Dado la constante n de atenuación % Graficar una señal cosenoidal atenuada exponencialmente % % utilizar: cos_exp(n) % function cos_exp(n) t=-2:0.01:2; y=exp(-0.05*n*t).*cos(2*pi*t); plot(t,y);grid; axis([-2 2 -4 12]); hold on plot([-2.2 2.2],[0 0],'r', [0 0], [12 -4],'r'); grid; hold off;
Ejercicio 1.25 Diseñe una función que devuelva una función cosenoidal con frecuencias de 100 Hz., con diferentes amplitudes y se grafique durante 30 milisegundos.
Ejercicio 1.26. Dado x1(t )=2cos(2π 20t ) y x2(t )= x1(t ) + 2.5cos(2π 40t ), diseñe una función que calcule y grafique x2(t ), muestre por lo menos 2 repeticiones. Luego, presentar el valor mínimo y máximo de x2(t ).
1.10 PROGRAMACIÓN EN MATLAB 1.10.1 for La sintaxis para la utilización de esta orden de control es for “variable”=“vector” “instrucciones sobre la variable”
end
El significado es el siguiente: mientras la “variable” recorre los valores del “vector ”, se realizan las “instrucciones” descritas, con la “variable” tomando dichos valores. Matlab permite anidar varias órdenes for.
Ejercicio 1.27 Diseñe una función que devuelva el término n-ésimo de la i teración: xn1 xn 2 xn , x0 4 2
Obtenga x1 , x15 y x50. Crear un archivo ‘‘iter.m’’: function z=iter(n) x=4; for k=1:n x=x^2-2*x; end z=x;
10
En Matlab >> iter(1) >> iter(15) >> iter(50)
Ejercicio 1.28 Dada una matriz cuadrada de n x n, diseñe una función usando la instrucción for, que sume los elementos de mayor módulo de cada una de las columnas de dicha matriz.
Ejercicio 1.29 Utilizando dos instrucciones for anidadas, genere la matriz cuadrada A, definida por A(i, j) = i2 j, i, j = 1, ..., 10. ¿Se podría generar A sin usar ninguna i nstrucción for?
1.9.2 if La sintaxis habitual para la utilización de esta orden de control es: if “relación lógica P1 ” “instrucciones Q1” else “instrucciones Q2” end
El significado es el siguiente: si P1 es cierto se ejecutan las instrucciones Q1 y si P1 es falso se ejecutan las instrucciones Q2. Las líneas tres y cuatro anteriores pueden suprimirse y, en este caso, cuando P1 sea falso, no se ejecuta ninguna instrucción.
Ejercicio 1.30 Diseñe una función sobre los números enteros que asigna el valor 1 a los números pares y positivos, el valor -1 a los números impares y positivos y el valor cero a los números restantes. function paridad=paridad(n) if n<=0 paridad=0; elseif rem(n,2)==0 paridad=1; else paridad=-1; end
Ejercicio 1.31 Escribir un código en Matlab para hallar el valor máximo de x. % % Mimax: retorna el valor máximo de una matriz. % function valor_max=mimax(x) % Obtener una estimación inicial para el máximo. valor_max=x(1); % Ahora navegaremos por el resto de la matriz, % 1 elemento a la vez for k=2:length(x) % si el valor en el desplazamiento actual es más grande
11
% que nuestro máximo. if (x(k)>valor_max) % ...entonces actualizar nuestro valor máximo, valor_max=x(k); end end % "valor_max" será retornado automáticamente.
Ejercicio 1.32 Escribir un código en Matlab para hallar el valor mínimo de x.
1.9.3 while La sintaxis para la utilización de esta orden de control es: while “relación lógica(contador) ” “instrucciones(contador) ” end
El significado de este esquema es que las instrucciones se irán ejecutando mientras la “relación lógica” sea cierta.
Ejercicio 1.33 Determine el valor de la precisión de la máquina usando un bucle while. Compare el valor obtenido con la variable predefinida eps de Matlab. function precmaq precmaq=1; while (1+precmaq)>1 precmaq=precmaq/2; end precmaq = 2*precmaq
Ejercicio 1.34 Diseñar una función que muestre la gráfica de una función senoidal y(t ) = cos(2πt + θ ) para dos periodos y cuyo argumento de entrada sea el número t . La gráfica debe tener una malla y deben situarse los ejes de coordenadas. % GRAFICAR UNA SEÑAL SENOIDAL % Dado: la frecuencia, magnitud y fase % Graficar un conjunto de señales senoidales (hasta 4) % % utilizar: plotsinusoides(frec,mag,fase) % function plotsinusoides(frec,mag,fase) max_plots=4; % Máximo número de sinusoides para graficar en una sola vez num_points=200; % Número de puntos por repetición. % Verificacion de parámetros if (or((length(mag)~=length(frec)), ... (length(fase)~=length(frec)))) error('Error - frec, mag, y fase deben ser del mismo tamaño' ) end % Queremos esto para 2 repeticiones, y num_points por repetición frec_min=min(frec); step=2/(frec_min*num_points); t=0:step:2*(1/frec_min); i=1;
% i es nuestro contador de sinusoides
12
% Determinar cuántas sinusoides graficar % Si el usuario pasa arreglos mayores a 4, ignoraremos los últimos % elementos mi_limite=min(length(frec),max_plots); % Para cada sinusoide, graficarlo while (i<=mi_limite) % Genera una sinusoide para este valor de i x=mag(i)*cos(2*pi*frec(i)*t+fase(i)); % Hacer un mensaje agradable para el título mi_titulo=... sprintf('Sinusoide con f=%d Hz.,mag=%4.2f, fase=%4.2f radianes',... frec(i), mag(i), fase(i)); % Ahora hacer la gráfica para esta sinusoide. subplot(mi_limite,1,i); plot(t,x);grid; title(mi_titulo); ylabel('Amplitud'); % Ir al siguiente valor de i i=i+1; end xlabel('Tiempo (seg)');
Ejercicio 1.35
Un conocido resultado de L. Euler afirma que
1
n
2
2
6 Obtenga el menor número de sumandos de la serie anterior, de modo que la correspondiente suma finita aproxime π2/6 con un error menor o igual que 10-4 y que 10-6. n 1
1.10 R EFERENCIA BIBLIOGRÁFICA 1.
Tratamiento Digital de Señales: Principios, Algoritmos y Aplicaciones. Proakis y Manolakis. Editorial Prentice Hall. 2000.
2. Tratamiento Digital de Señales en Tiempo Discreto . Alan V. Oppenheim, Et Al; Prentice Hall. 2000. 3.
Digital Signal Processing Using Matlab and Wavelets . Michael Weeks. Jones and Bartlett Publishers. 2nd Edición. 2011.
13