Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.1 SEÑALES
En este capítulo el estudiante se centrará en la utilización del producto de software Octave y para
construir el código de los programas que van a ser utilizados en los subsiguientes laboratorios. Se
profundizará en algunos de los temas, especialmente en lo relacionado con el manejo de archivos
y con la programación de funciones.
1.2 OBJETIVO
Desarrollar códigos de programas utilizando los comandos e instrucciones del Octave V4.2,
ejecutando los ejercicios propuestos orientados al procesamiento de señales.
1.5 GENERALIDADES
Para iniciar los trabajos, en este caso con Octave que es uno de varios productos de
software para trabajar con modelos matemáticos, debe iniciarse la PC con la versión disponible e
instalada (V4.4). 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 del Octave, en la Ventana de Comandos
(Command Window) se muestra el símbolo “ >> ” (prompt) que nos indica que la
pantalla de comandos está a la espera de nuestras instrucciones. Para salir de Octave basta teclear
exit o quit y para ejecutar cualquier instrucción presionar 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 en el
Editor, debemos escribir el símbolo “...” (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 producto de software Octave tiene implementada una serie de 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 corchetes “ [ ] ” tienen significados diferentes en
Octave. 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 Octave tiene
implementada. Por ejemplo:
Ejercicio 1.1
>>1.2*cos(40*pi/180 + log(2.4^2))
>>sqrt(3^2+4^2)-5
>>abs(3-j*5)
Ejercicio 1.2
Evalúe la expresión: tan t 2 2 sen 1 , para t = 0.5, 0.95 y 1.
8
Ejercicio 1.3
Ejecute los comandos clock, date y calendar. Interprete las respuestas proporcionadas por
Octave y limpie luego la pantalla.
Para visualizar los resultados en la pantalla de comandos, se tienen varias posibilidades, aunque
por defecto, los números en pantalla se representan 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:
Ejercicio 1.4
>> sqrt(pi)
>> format short, sqrt(pi)
>> format long e, sqrt(pi)
>> format short e, sqrt(pi)
Ejercicio 1.5
1.5.2 Variables
Una variable es un símbolo que se asigna temporalmente a un dato. La forma de definir una
variable cualquiera es “variable = expresión”.
Por ejemplo:
>> x=5*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 x, que sale inmediatamente en la pantalla de comandos y que toma como
valor el correspondiente resultado. Si deseamos que esta variable no aparezca en pantalla, basta
escribir al final de la expresión el símbolo “ ; ” (punto y coma).
Ejercicio 1.6
2 3 e
Crear dos variables que almacenen los valores: , log 2 cos / 8
4 tanh 2
Ejercicio 1.7
Consulte la ayuda sobre la variable predeterminada j y/o i y calcule j2. Luego, defina la variable j
como dos y vuelva a calcular j2. ¿Qué regla práctica debe obtenerse en el manejo de i y/o j?
Con este entorno de trabajo se puede llamar a una gran variedad de funciones, tanto
propias como programadas por los usuarios. Nos ofrece un desplegable para el directorio
actual y una ventana que permite acceder al árbol de directorios de la Pc.
1.6.4 Editor/Debug
En Octave 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 Octave. La
importancia de estos archivos es que al escribir su nombre en la línea de comandos de Octave y
presionar Enter, se ejecutan todos los comandos contenidos en dicho archivo.
Octave 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-Debug).
1.6.5 Workspace
En Octave se trabaja fundamentalmente con matrices y para el caso de los números estas
son consideradas como matrices cuadradas de orden uno.
• 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. Octave 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.
Ejercicio 1.9
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Si se desea extraer una submatriz basta colocar, en vez de números, vectores cuyos
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.
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 2 2 2
1 2 3 3
1 2 3 4
>> 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 10 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
La ventana gráfica de Octave. 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.
Para obtener gráficas 2-D, Octave 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 y stem, 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
Ejercicio 1.14
Ejercicio 1.15
Ejercicio 1.16
Dibuje un polígono regular de 5 lados que pueda inscribirse en la circunferencia de radio uno.
(Indicación: Evalue plot sobre un vector cuyas componentes sean números complejos).
Para obtener gráficas 3-D, Octave 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, comet3 los
comandos para gráficas de superficies son mesh y surf y, finalmente, para gráficas de contorno
es contour.
Ejercicio 1.17
Ejercicio 1.19
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. 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.19
z sen
x2 y 2 / x2 y 2
>> 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.20
En las versiones recientes de Octave, hay un grupo de funciones que permite realizar
gráficos de forma más sencilla. Ejemplos de ellas son ezplot y ezsurf.
Comentarios generales. Para trabajar con datos de gran tamaño, o bien para diseñar nuevas
funciones, es completamente imprescindible trabajar con archivos y, por lo tanto, con el editor de
texto. Los archivos adicionales que Octave utiliza básicamente son aquellos con extensión “*.m”
y una parte importante de cada sesión con Octave 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 Octave, basta presionar el menú File y después
New Script/ M-file (si se desea crear un archivo nuevo), o bien presionar el menú File y después
Open... (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.21
Abra un archivo utilizando el editor de Octave, escriba en él una matriz cuadrada de 2 x 2 y guarde
dicho archivo con el nombre “ejercicio121.m”.
Un M-archivo de este tipo consiste en una sucesión de instrucciones de Octave. Para ejecutarlas
y ver el correspondiente resultado en pantalla, es suficiente escribir el nombre del archivo (sin la
extensión) en la pantalla de comandos y presionar Enter. Las variables en un archivo de
instrucciones son 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.22
Escriba y guarde en un archivo de nombre “datos122.m” la matriz cuadrada de 20 x20 tal que los
elementos de su diagonal son todos 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);
>> det(A)
Abrir ‘‘datos122.m’’
A=A-diag(3*ones(10,1));
A=A+diag(1:10);
>> det(A)
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 Octave function seguida del nombre de la función que
deseamos definir junto con los argumentos de entrada y salida separados por comas. Es decir:
FLAVIO N. CARRILLO GOMERO -2020
10
A continuación, puede haber diversas líneas de comentario que han de estar precedidas
necesariamente por el símbolo “ # ”. Con help iene 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.
Ejercicio 1.23
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.
for “variable”=“vector”
“instrucciones sobre la variable”
end
function s = sumatodo(A)
% Suma todos los elementos de un vector o una matriz
filas = size(A,1);
cols = size(A,2);
s = 0;
for ind1 = 1: filas
for ind2 = 1: cols
s = s + A(ind1,ind2);
end
end
end
1.9.2 if
function paridad=paridad(n)
if n<=0
paridad=0;
elseif rem(n,2)==0
paridad=1;
else
paridad=-1;
end
FLAVIO N. CARRILLO GOMERO -2020
12
Ejercicio 1.30
Escribir un código en Octave para hallar el valor máximo de x.
#
# Mimax: retorna el valor máximo de una matriz.
#
function valor_max=mimax(x)
1.9.3 while
El significado de este esquema es que las instrucciones se irán ejecutando mientras la “relación
lógica” sea cierta.
Ejercicio 1.32
Determine el valor de la precisión de la máquina utilizando un bucle while. Compare el valor
obtenido con la variable predefinida eps de Octave.
function precmaq
precmaq=1;
while (1+precmaq)>1
precmaq=precmaq/2;
end
precmaq = 2*precmaq
Ejercicio 1.33
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.
# 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
# Ir al siguiente valor de i
i=i+1;
end
xlabel('Tiempo (seg)');
Ejercicio 1.34
1 2
Un conocido resultado de L. Euler afirma que n 1 n
2
6
Obtenga el menor número de sumandos de la serie anterior, de modo que la correspondiente suma
finita se aproxime a π2/6 con un error menor o igual que 10-4 y que 10-6.
4. Digital Signal Processing Using Octave and Wavelets. Michael Weeks. Jones and
Bartlett Publishers. 2nd Edición. 2011.