Sei sulla pagina 1di 15

i resumen 1

Introducción a LATEXy
MATLAB:procesamiento de señales
J EFERSON A LEXANDER C RUZ
A NALISIS DE SEÑALES

i resumen
En la práctica de laboratorio se aprenden a leer audios, imágenes y videos desde MATLAB, para realizar una
transformación y almacenamiento de esas señales, en dominio del tiempo y de la frecuencia, se implementan
herramientas de software que permiten el fácil manejo y procesamiento; también se presenta la manera de
presentación de los resultados obtenidos, así como las bases que se usaran a lo largo del curso.

palabras clave
WAV, PNG, RGB, Frecuencia, video.

ii marco teorico
¿Qué son en LATEX los packages? Se llama paquete a una extensión del sistema básico que añade
nuevas funciones. Hay, literalmente, cientos de paquetes con muy diversas funciones: inserción de imágenes
(graphicx), paquetes gráficos (TikZ), internacionalización (babel, polyglossia), color (xcolor), música, ajedrez,
ediciones críticas, secuencias de amninoácidos, etc. Todos estos paquetes deberán ser declarados con ’\usepac-
kage[opciones][paquete]’.Donde entre los corchetes estará el nombre del paquete a usar.
¿Que es una distribución TEX/LATEX? A menos que se recurra un sistema en línea, el primer paso para usar
LaTeX es instalarlo en el sistema. Al ser código abierto no hay un único instalador, incluso en un determinado
sistema. A cada uno de los instaladores existentes (que difieren en detalles sobre lo que se incluye y la forma
como se gestiona y se actualiza) se lo llama distribución. La mayoría de las distribuciones actuales instalan
todo lo necesario para trabajar con LaTeX, incluyendo entornos de edición.
Comandos MATLAB:
• PRINT: Imprime una figura o guarda un archivo en un formato especificado.
• CLEAR: Quitar elementos del espacio de trabajo, liberar memoria del sistema.
• ClOSE: Borra una figura especificada.
• CLC: limpia la ventana de comando.
• ROUND: redondea al decimal o entero más cercano.
• SIN: Genera un seno, con un argumento en radianes.
• COS: Genera un coseno, con un argumento en radianes.
• LINEWIDTH: Se determina el tamaño de las líneas trazadas.
• COLOR: Cambia el color de las siguientes comandos de iconos de las máscaras.
• XLABEL: Permite darle una etiqueta al eje x.
• YLABEL: Permite darle una etiqueta al eje y.
• LEGEND: Añade una leyenda a un grafico.
• XLIM: establece los limites del eje x.
• YLIM: establece los limites del eje y.
• GRID: Muestra o oculta líneas de cuadricula de los ejes.
Para guardar variables del espacio de trabajo en el disco se utiliza el comando save. Sintaxis:
save archivo: Guarda todas las variables en el archivo especificado.
save archivo variable: Guarda solamente las variables especificadas (separadas por espacios) en el archivo
especificado.
save archivo opciones : Guarda todas las variables en el archivo especificado, utilizando alguna de las siguientes
opciones. [-append, -ascii, -mat].
ii marco teorico 2

save (’archivo’, ’var1’, ’var2’, . . . ).


Ejemplo: save(’arch.dat’,’p’,’q’,’-ASCII’).

Para cargar variables desde el disco se utiliza el comando load. Sintaxis:


load archivo : Carga las variables guardadas en el archivo matlab.dat.
load archivo variables : Carga solamente las variables especificadas (separadas por espacios) desde el archivo
especificado.
load (’arg1’, ’arg2’, ’arg3’, . . . ).
p = load(’-ASCII’, ’arch.dat’).
WAV (o WAVE), apócope de WAVE form audio file format, es un formato de audio digital normalmente sin
compresión de datos desarrollado y propiedad de Microsoft y de IBM que se utiliza para almacenar sonidos
en el PC, admite archivos mono y estéreo a diversas resoluciones y velocidades de muestreo, su extensión es
.wav.

A pesar de que el formato WAV es compatible con casi cualquier códec de audio, se utiliza principalmente
con el formato PCM (no comprimido) y, al no tener pérdida de calidad, es adecuado para uso profesional.
Para tener calidad CD de audio se necesita que el sonido se grabe a 44100 Hz y a 16 bits por cada canal de
audio. Por cada minuto de grabación de sonido se consumen unos 10 megabytes de espacio en disco. Una de
sus grandes limitaciones es que solo se pueden grabar archivos de 4 gigabytes como máximo, lo cual equivale
aproximadamente a 6,6 horas en calidad de CD de audio.

Las funciones de audio de MATLAB® leen y almacenan datos de audio de un solo canal (mono) en
un vector de columna de mx1 y datos estéreo en una matriz de mx2. En cualquier caso, m es el número
de muestras. Para los datos estéreo, la primera columna contiene el canal izquierdo y la segunda columna
contiene el canal derecho.

Los formatos .BMP y .JPG que no realiza gran esfuerzo para comprimir el gráfico (la tabla de colores
se guarda, casi, tal cual); PNG tiene algoritmos más inteligentes de compresión, pero no reducen en absoluto
la calidad del gráfico. Éstos son los que se llaman mapas de bits de compresión sin pérdida, PNG es el mejor
formato pues fue creado para mejorar y reemplazar al GIF, además de que puede ser reconocido directamente
por LaTeX.

Modelo de color RGB: Este espacio de color es el formado por los colores primarios luz, Rojo, Verde
y Azul. De hecho, RGB son las siglas en inglés de los colores Red, Green y Blue. Este sistema es el más
adecuado para representar imágenes que seránmostradas en monitores y que, finalmente, serán impresas en
impresoras de papelfotográfico.

El modo RGB asigna un valor de intensidad a cada píxel que oscila entre 0 (negro) y 255 (blanco)
para cada uno de los componentes RGB de una imagen en color. Por ejemplo, un color rojo brillante podría
tener un valor R de 246, un valor G de 20 y un valor B de 50. El rojo más brillante que se puede conseguir
es el R: 255, G: 0, B: 0.

MODELO DE COLOR CMYK: Los colores del modo CMYK son los que se corresponden con los
colores primarios luz, es decir, el amarillo al que se le suma el color negro. Este modelo se basa en la cualidad
de absorber y rechazar luz de los objetos. Si un objeto es rojo esto significa que el mismo absorbe todas las
longitudes de onda componentes de la luz exceptuando la componente roja. Los colores sustractivos (CMY) y los
aditivos (RGB) son colores complementarios. Cada par de colores sustractivos crea un color aditivo y viceversa.

Una señal aleatoria es una señal acerca de la cual existe cierto grado de incertidumbre antes de que se
presente en la realidad. La certeza y la incertidumbre de una señal aleatoria están determinadas por la
probabilidad de ocurrencia, en un transmisor, de cada valor de la fuente deseñales aleatoria.

Una señal aleatoria, tiene mucha fluctuación respecto a su comportamiento. Los valores futuros de una
señal aleatoria no se pueden predecir con exactitud, solo se pueden basar en los promedios de conjuntos de
señales con características similares.
iii desarrollo de la practica 3

El ruido blanco es una señal aleatoria, caracterizada porque sus valores en instantes de tiempo distintos no
tienen relación alguna entre sí, es decir, no existe correlación estadística entre sus valores.

El ruido blanco Gaussiano será aquel cuya función de densidad responde a una distribución normal.
Gaussiano se refiere a la distribución de voltaje de la fuente de ruido. Blanco es la fuente de ruido de potencia
de densidad espectral, que es idealmente plano con la frecuencia. En realidad, en algún punto (debido al
desfase) hay una reducción en el nivel de ruido medible.

Espectro de una señal: Es aquel que según el análisis de Fourier, cualquier señal se puede descomponer en un
número específico de señales con diferentes características. A todo este grupo de frecuencias en las que se
descompuso la señal original se le llama espectro.

Las entidades que regulan el espectro de radio son: El Ministerio de tecnologías de la información y
la comunicación, la agencia nacional del espectro, la autoridad nacional de televisión, la comisión de
regulación de comunicaciones, la superintendencia de industria y comercio y la comisión sexta del senado.

La signal processing toolbox en matlab, permite encontrar las transformadas de una señal, incluidas la
transformada rápida de Fourier (FFT), la transformada de Fourier de tiempo corto (STFT) y la transformada
de Hilbert; recibe la señal, la frecuencia de muestreo, Y retorna la magnitud de la transformada de Fourier y
el eje de frecuencias en Hz.

iii desarrollo de la practica


iii-a Compilación del archivo LATEXformatWorks.tex

Se descargó el Formato de tareas, modificando su nombre y archivo principal a SA2017IIa_LAB01_02.


Para corregir errores de compilación del archivo, se actualizaron las librerias siguiendo esta guia (Ver: https:
//www.dropbox.com/s/3tejotx97n1ilsm/InstMikTex_TexStudio.pdf?dl=0)

iii-b Generar una gráfica en MATLAB y guardarla

Antes de empezar a crear variables o funciones en Matlab, se debe asegurar que el workspace este vacio,
para esto utilizamos los siguientes comandos:

Código 1 – Limpiar memoria del workspace y cerrar ventanas


1 clear all; close all; clc;

Seguido a esto seteamos parametros de las graficas:

Código 2 – parámetros por defecto de las gráficaso


1 set(0, 'DefaultTextInterpreter', 'latex');
2 set(0, 'DefaultAxesFontName', 'Times New Roman');
3 set(0, 'DefaultAxesFontSize', 16);

Debido que Matlab no trabaja con variables continuas en su dominio, se toma un intervalo de muestreo que
tienda a cero, con esto se emulara una señal de tiempo continuo, es decir, a simple vista la señal parecerá como
de tiempo continuo, es decir aparentemente aproximadamente continua. Este parametro de matlab aprarece
como fs .

Código 3 – Intervalo de muestreo


1 settings.fs=1e4;
2 settings.ts=1/settings.fs; %Step in time
iii desarrollo de la practica 4

A continuación se generará el vector de tiempos. Este se puede generar tomando un tiempo incicial de 0 y un
tiempo final de 0.1, a razon de aumento de la frecuencia aparente de Matlab y una duracion determinada.

Código 4 – Vector de tiempos


1 signal.ti=0; %initial time
2 signal.tf=0.1; %final time
3 t=signal. ti:settings. ts:signal. tf;
4 signal.tm=1e-1; %signal duration
5 L=round(signal.tm/settings.ts); %Samples
6 t=(0:L-1)*settings.ts;

Las señales a generar son dos sinusoidales a diferentes frecuencias f1 =2.42kHz y la otra con el doble de f1 , y se
procede a generar la grafica de la señal 1 en una primera figura 1 con color azul, de acuerdo con la distribucion
de valores RGB que usa Matlab.

Código 5 – Genera dos señales a distinta frecuencia y grafica la primera


1 f_1 = 1.5e3; %[Hz]
2 f_2 = 2*f_1; %[Hz]
3 s1=cos(2*pi*f_1*t); %Carrier based on time vector;
4 s2=cos(2*pi*f_1*t); %Carrier based on time vector
5 figure(1)
6 plot(t/1e-3,s1,'-','LineWidth',2,'Color',[0 0.4470 0.7410]);

Para dibujar las dos gráficas superpuestas y con la señal 2 de color naranja se utilizan los comandos:

Código 6 – Grafica la señal 2 superpuesta en la señal 1


1 hold on
2 plot(t/1e-3,s2,'-','LineWidth',2,'Color',[0.8500 0.3250 0.0980]);
3 hold off

obteniendo el siguiente resultado:

(a) Señal uno. (b) Señales Superpuestas


Figura 1 – Señal 1 y superpuestas.

Se recreó los parametros del gráfico de tipo tamaño de la caja y las rejillas, etiquetas y leyendas, ademas se
guarda la imagen en formato .png

Código 7 – parámetros del gráfico y guarda imagen


1 xmin=0; xmax=0.5; ymin=-1.1; ymax=1.1; % Box size
2 Box=[xmin xmax ymin ymax] ;
3 labels ={'t, [ms]', 'n(t)'}; %labelx , labely
4 legends = {'$s_1(t)$','$s_2(t)=-\int_0^\pi {s_1(t)dt}$'}; % signal 1 & signal 2 text
5 h=legend(legends); % agregar leyenda a la grafica enviandole legends
6 set(h ,'Interpreter','latex' ,'Location' ...
,'NorthEast','FontSize',16,'FontWeight','bold','Orientation','vertical'); %Set ...
graphics object properties
iii desarrollo de la practica 5

7 xlabel( labels(1),'fontsize',16, 'FontAngle' , 'Italic'); %Label x-axis


8 ylabel( labels(2),'fontsize',16); %Label y-axis
9 xlim([Box(1) Box(2)]); ylim([Box(3) Box(4)]); %Set or query x-axis limits
10 grid(gca,'minor'); % cuadricula
11 set(gcf, 'Position', get(0, 'Screensize')); %Maximize figure
12 saveas(gca, 'example1', 'png');
13 print('example2', '-dpng', '-r600'); %Save as PNG with 600 DPI
14 saveas(gca, 'example1.fig')

Obteniendo como resultado una grafica con las dos señales, donde sus ejes X y Y esta limitados a los parametros
enviados, se aprecia tambien la cuadricula y el cuadro de leyenda:

Figura 2 – Señales con caja, rejillas, etiquetas y leyendas

Ahora se procede a crear una señal aleatoria, la cual debe ser guardada en un archivo tipo .DAT porque cada
vez que se ejecuta el codigo, generará una señal diferente a la anterior. Este ruido se le añadira a la señal 1 y
se graficara el total junto a la señal de ruido mas su histograma.

Código 8 – Grafica el ruido, su histograma y la señal


1 subplot(2,2,1) % pocision de la grafica en el plot
2 plot(t/1e-3,noise , '-','LineWidth',1,'Color',[0.3010 0.7450 0.9330]);
3 labels ={'t, [ms]', 'n(t)'}; %labelx , labely
4 xmin=0; xmax=0.5; ymin=min(noise)-0.2; ymax=max(noise)+0.2; % Box size
5 Box=[xmin xmax ymin ymax];
6 xlim([Box(1) Box(2)]) ; ylim([Box(3) Box(4)]);
7 grid(gca,'minor'); %cuadricula
8 title('Ruido aleatorio')
9 subplot(2,2,2) % pocision de la grafica en el plot
10 h = histogram(noise); %histograma de noise
11 h.Normalization = 'probability';
12 h.BinWidth = 0.01; % Width of bins
13 h.FaceColor = [0.3010 0.7450 0.9330]; % Histogram bar color
14 h.EdgeColor = 'k'; % Histogram edge color k->black
15 title('Histograma del ruido aleatorio')
16 subplot(2,2,[3 4]) % pocision de la grafica en el plot
17 plot(t/1e-3,s1+noise,'-','LineWidth',1,'Color',[0.3010 0.7450 0.9330]); % signal 1 ...
with noise
18 hold on
19 plot(t/1e-3,s1,'-','LineWidth',2,'Color',[0 0.4470 0.7410]);
20 hold off
21 xmin=0; xmax = 0.5; ymin=min(s1+noise)-0.3; ymax=max(s1+noise)+0.3;
22 Box=[xmin xmax ymin ymax];
23 labels = {'t,[ms]' , 's_n(t)'} ; %labelx , labely
24 legends = {'$s_1(t)+n(t)$','$s_1(t)$'};
25 h=legend(legends);
26 set(h ,'Interpreter' , 'latex' ,'Location' ...
,'NorthEast','FontSize',16,'FontWeight','bold','Orientation','vertical');
27 xlabel(labels(1),'fontsize',16,'FontAngle' ,'Italic');
28 ylabel(labels(2),'fontsize',16);
29 xlim([Box(1) Box(2)]); ylim([Box(3) Box(4)]);
30 grid(gca,'minor');
31 title('Senal sinusoidal contaminada con ruido')
iii desarrollo de la practica 6

Figura 3 – Ruido, su histograma y señal original,

iii-c Generar señales continuas y discretas en Matlab

Durante esta seccion del laboratorio se genero y grafico una señal sinusoidal continua con una frecuencia fm
= 10kHz, con una frecuencia de muestreo fs = 500kHz para emular una señal continua.

Código 9 – Genera señal sinusoidal


1 fs=500e3; %Frecuencia aparente de Matlab 500 kHz
2 f=10e3; %sinusoidal signal frecuency
3 ti=0; %Tiempor inicial de la senal [s]
4 nCyl=5; %Numero de ciclos (periodos) a generar de la sinusoidal
5 t=ti:1/fs:nCyl*1/f; %Vector de tiempo continuo
6 x=cos(2*pi*f*t); %sinusoidal signal
7 figure
8 plot(t,x) %Plot the signal
9 title('Senal sinusoidal continua');
10 xlabel('Tiempo, [s]');
11 ylabel('Amplitud');

Por medio del codigo sumistridado de https://github.com/marcoteran/signalanalysislab/tree/master/


AudioProccesing/code se encuentra el espectro de la señal. La funcion spectrumGen necesita de entradas como
fs , frecuencia de muestreo,la señal y como ultimo un parametro side que varia de 1 o 2, estableciendo si el
espectro es de un lado o dos lados.

Código 10 – Obtiene el espectro de la señal


1 figure
2 [f,X]=spectrumGen(x,fs,2); %Espectro bidireccional de la senal y vecto de frecuencia
3 plot(f,X) %plot the signal
4 title('Espectro de la senal sinusoidal');
5 xlabel('Frecuencia, [Hz]');
6 ylabel('Amplitud');

Con esto se genera una señal sinusoidal y su espectro graficandose en el mismo plot,"(vea Figura 4)". Por otra
parte, si se quiere trabajar con señales de tiempo discreto, en lugar del comando plot se utiliza stem. Para
dar un ejemplo de esto se representara la siguiente secuencia:
x[n]=. . . , 0,0,0,0.5,1,1.5,2,2.5,3,2.5,2,1.5,1,0.5,0,0,0, . . .
Para ello primero debemos definir el vector tiempo n,para visualizar completamente la señal, se crea un vector
temporal entre [-8,8], con un paso(step) de una unidad.En codigo de Matlab seria lo siguiente:
iii desarrollo de la practica 7

(a) Señal sinusoidal. (b) Espectro de la señal


Figura 4 – Señal y su espectro.

Código 11 – Señal en tiempo discreto


1 n=-8:1:8; %Vector de tiempo discreto
2 x_n=[0,0,0,0.5,1,1.5,2,2.5,3,2.5,2,1.5,1,0.5,0,0,0];
3 stem(n,x_n); %plot the discrete signal
4 title('Senal de tiempo discreto');
5 xlabel('n, [sample]');
6 ylabel('Amplitud');

Figura 5 – Ejemplo de señal en tiempo discreto

Se grafican las siguientes señales en tiempo discreto con un intervalo adecuado para que se puedan apreciar
sus caracteristicas.
Funcion sign.

Código 12 – Genera signo en tiempo discreto


1 n=-8:1:8; %Vector de tiempo discreto
2 x_n=[-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1]; %signo
3 stem(n,x_n); %plot the discrete signal
4 title('Senal de tiempo discreto');
5 xlabel('n, [sample]');
6 ylabel('Amplitud');

Funcion sawtooth.

Código 13 – Genera diente de sierra en tiempo discreto


iii desarrollo de la practica 8

Figura 6 – Señal signo en tiempo discreto

1 fs=500;
2 t=-1:1/fs:5;
3 x1=sawtooth(2*pi*50*t);
4 stem(t,x1);
5 axis([0 0.2 -1.2 1.2]);
6 xlabel('n,[sample]');
7 ylabel('Amplitud');
8 title('Senal de tiempo discreto');

Figura 7 – Diente de sierra en tiempo discreto

Funcion rectpuls.

Código 14 – Genera rectpuls en tiempo discreto


1 Fs = 1e6;
2 t = 0:1/Fs:(10*4e-6);
3 pulsewidth = 2e-6;
4 pulseperiods = [0:10]*4e-6;
5 x = pulstran(t,pulseperiods,@rectpuls,pulsewidth);
6 stem(t,x)
7 axis([0 4e-5 -0.5 1.5])
8 xlabel('n,[sample]');
9 ylabel('Amplitud');
10 title('Senal de tiempo discreto');

Funcion tripuls.
iii desarrollo de la practica 9

Figura 8 – Rectángulo aperiódico muestreado en tiempo discreto

Código 15 – Genera tripuls en tiempo discreto


1 t = 0 : 1/3e2 : 1; % 1 kHz sample freq for 1 s
2 d = 0 : 1/5 : 1; % 3 Hz repetition frequency
3 y1 = pulstran(t,d,'tripuls',0.1,-1);
4 stem(t,y1)
5 xlabel('n,[sample]');
6 ylabel('Amplitud');
7 title('Senal de tiempo discreto');

Figura 9 – Triángulo aperiódico muestreado en tiempo discreto

Funcion gauspuls.

Código 16 – Genera gauspuls en tiempo discreto


1 t = 0 : 1/50e3 : 10e-3;
2 d = [0 : 1/1e3 : 10e-3 ; 0.8.^(0:10)]';
3 y2 = pulstran(t,d,'gauspuls',10e3,0.5);
4 stem(t,y2)
5 xlabel('n,[sample]');
6 ylabel('Amplitud');
7 title('Senal de tiempo discreto');

iii-d Exportar señales de MATLAB a archivos .wav

El comando [y, fs ]=audioread(’filename.wav’) lee un archivo con nombre filename de tipo .wav que genera
un vector como una variable en Matlab, y ademas obtiene la frecuencia de muestreo fs .
El comando y=audiowrite(’filename.wav’,x, fs ) permite crear un audio a partir de un vector x un archivo de
iii desarrollo de la practica 10

Figura 10 – Pulso sinusoidal de modulación gaussiana en tiempo discreto

sonido con una frecuencia de muestreo fs . El archivo se guarda dentro de la carpeta donde Matlab esta
trabajando.
Se debe generar y guardar una señal sinusoidal con una amplitud de A = 0,1, una frecuencia f =100Hz, para
N =100000 muestras, y una frecuencia de muestreo de fs =22050Hz.

Código 17 – Crea .wav de senal sinusoidal


1 N = 100000; %Numero total de muestras
2 fs = 22050; %Frecuencia de muestreo
3 fc = 100; %Frecuencia de portadora
4 t = (0:N-1)/fs; %Vector temporal
5 x = 0.1*sin(2*pi*fc*t); %Sinusoidal
6 sound(x,fs) %Reproducir sinusoidal
7 audiowrite('sinsound.wav',x,fs); %Guardar sinusoidal

iii-e Tratamiento de imágenes en MATLAB

Al abrir un archivo .png, Matlab lo almacena en una matriz de 1x3 donde las dos primeras columnas van a
ser la dimension de la imagen y la tercera columna corresponde a los canales, para este caso en particular es
una imagen RGB, deberá tener 3 canales (512 512 3). Se obtuvo los 3 histogramas correspondienes a los datos
de las tres matrices con el siguiente script.

Código 18 – Extrae RGB y grafica histograma de cada uno


1 image=imread('lenna.png', 'PNG');
2 size(image)
3 %Dividir en los canales rgb
4 Red = image(:,:,1);
5 Green = image(:,:,2);
6 Blue = image(:,:,3);
7 %obtener valores por cada canal
8 [yRed, x] = imhist(Red);
9 [yGreen, x] = imhist(Green);
10 [yBlue, x] = imhist(Blue);
11 %Graficarlos juntos
12 plot(x, yRed, 'Red', x, yGreen, 'Green', x, yBlue, 'Blue');

Obteniendo como resultado la siguiente grafica, ver Figura11.


Para mostrar los datos de la imagen RGB se utiliza la función imshow(RGB).

Código 19 – Convirte de RGB a escala de grises


1 gray = rgb2gray (RGB) ;
2 imshow( gray )
iii desarrollo de la practica 11

(a) Imagen RGB. (b) Histograma de la imagen


Figura 11 – Imagen RGB y su histograma.

Las dimensiones que toma la variable gray se mantienen en proporcion 512x512 pero los canales RGB
desaparecen y se convierte en escala de grises. El histograma generado con sus valores es el siguiente:

(a) Imagen en escala de grises (b) Histograma de la imagen


Figura 12 – Imagen en grises y su histograma.

Al ser una imagen en RGB implica que se utilizan tres colores o canales para reproducir la gama entera de
colores que componen a la imagen.Por lo que se busca ver por separado cada uno de estos canales gracias al
siguiente script.

Código 20 – Obtiene RGB de una imagen y grafica cada una


1 image=imread('peppers.png', 'PNG');
2 size(image)
3 nbcl=512; mcol=[0:nbcl-1]'/(nbcl-1);
4 mypal=zeros(nbcl,3,3); mypal(:,1,1)=mcol;
5 mypal(:,2,2)=mcol; mypal(: ,3,3)=mcol;
6 for k=1:3
7 figure(k), imagesc(image(:,:,k))
8 colormap(mypal(:,:,k)); axis('image')
9 end

imagenes obtenidas del script, ver Figura13.


iii desarrollo de la practica 12

(a) Imagen Original. (b) Imagen R

(c) Imagen G. (d) Imagen B.


Figura 13 – Imagen y sus componentes RGB.

La conversion de una imagen ya sea de color o en escala de grises a una imagen en blanco y negro
se puede hacer de una manera más manual, es decir, sin utilizar la funcion rgb2bw, escribiendo un script. El
funcionamiento de este consiste en extraer los canales RGB de la imagen por separado e inicialmente convertirla
a una imagen en escala de grises, seguido a esto se procede a hacer el tratamiento de umbralizacion(thresholding)
a la imagen en escala de grises, este metodo consiste en convertir una imagen en escala de grises a una nueva
con sólo dos niveles, de manera que los objetos queden separados del fondo.

Código 21 – Coenvierte imagen RGB a escala de grises y a blanco/negro


1 image=imread('Will.png');
2 size(image)
3 i = image;
4 R = i(:, :, 1); % canal R
5 G = i(:, :, 2); % canal G
6 B = i(:, :, 3); % canal B
7 newImage = zeros(size(i,1), size(i,2), 'uint8');
8 for x=1:size(i,1)
9 for y=1:size(i,2)
10 newImage(x,y) = (R(x,y)*.3)+(G(x,y)*.6)+(B(x,y)*.1); %Conversion a grises
11 end
12 end
13 myImage = newImage;
14 threshold = 128; % valor umbral
15 Ibw = myImage>threshold; % conversion grises a blanco/negro por umbralizacion
16 subplot(2,2,[1,2]);
17 imshow(image);
18 title('Imagen Original');
19 subplot(2,2,3);
20 imshow(myImage);
21 title('Escala de grises');
22 subplot(2,2,4);
23 imshow(Ibw);
24 title('Escala blanco y negro');
iii desarrollo de la practica 13

Figura 14 – Imagen original, escala de grises y blanco/negro

iii-f Archivos de video en MATLAB

MATLAB permite leer y reporudcir archivos de video tipo .avi, .mpg y .wmv. Para reproducir un archivo de
video en MATLAB se necesita de la siguiente linea de codigo:

Código 22 – Reproduce un archivo de video


1 implay('rbsp_launch_720p.mp4')

además se puede almacenar el archivo en una variable y obtener información sobre el mismo

Código 23 – Extrae informacion de un archivo de video


1 movieObj = VideoReader('rbsp_launch_720p.mp4'); %Abre el archivo de video
2 get(movieObj) %Muestra toda la informacion
3 nFrames = movieObj.NumberOfFrames; %obtiene el numero de ucadros "marcos"
4 width = movieObj.Width; %obtiene dimension en y
5 height = movieObj.Height; %obtiene dimension en x

la informacion obtenida del archivo es la siguiente:

1 General Properties:
2 Name: 'rbsp_launch_720p.mp4'
3 Path: 'C:\Users\Danie\Documents\Analisis de Senales\Matlab'
4 Duration: 126.1653
5 CurrentTime: 0
6 Tag: ''
7 UserData: []
8
9 Video Properties:
10 Width: 1280
11 Height: 720
12 FrameRate: 24
13 BitsPerPixel: 24
14 VideoFormat: 'RGB24'

MATLAB permite analisar un video de manera que se puedan visualizar cada una de sus frames, visualmente
da la sensacion que se trata de una sucesion de imagenes.
iv resultados 14

Código 24 – Exportar señales de MATLAB a archivos .wav


1 clear all %Limpia el Workspace y la memoria
2 close all %Cierra todo
3 movieObj=VideoReader('oneCCC.wmv'); %Crea un objeto de VideoReader y lo almacena en ...
movieObj
4 get (movieObj ) %Obtiene todas las propiedades del objeto de video
5 nFrames=movieObj.NumberOfFrames; %Se obtienen N cuadros "marcos" del objeto
6 % Para leer y mostrar cada uno de los frames
7 for iFrame =1 : 2 : nFrames
8 I = read(movieObj , iFrame ) ; %Lee el frame numero i del objeto de video y lo ...
almacena en I
9 fprintf('Frame %d\n ',iFrame ) ; %muestra en pantalla el numero de frame
10 imshow(I,[]); % Muestra l a imagen
11 pause(0.1); % espera un decima de segundo
12 end

La informacion del video oneCCC.wmv es la siguiente, además de esto se visualizó 4 frames en especifico f1 =1,
f2 =35, f3 =70, f4 =101

1 General Properties:
2 Name: 'oneCCC.wmv'
3 Path: 'C:\Users\Danie\Documents\Analisis de Senales\Matlab'
4 Duration: 3.3810
5 CurrentTime: 0
6 Tag: ''
7 UserData: []
8
9 Video Properties:
10 Width: 640
11 Height: 480
12 FrameRate: 29.9700
13 BitsPerPixel: 24
14 VideoFormat: 'RGB24'

(a) Frame inicial. (b) Frame 35

(c) Frame 70. (d) Frame final.


Figura 15 – Archivo de video y sus frames.

iv resultados
Se evidenció durante la generación de señales, cómo se puede analisar por trozos señales como las presentadas
en la Figura 1b, que en la cual no se puede ver de manera adecuada su comportamiento o propiedades, y mediante
la limitacion de sus ejes X y Y, se obtiene un resultado más visible.Figura 2.
En el procedimiento de generar un ruido, se omitio el paso de guardar y cargar para detectar el cambio en
la grafica resultante, pues Matlab maneja un algoritmo que genera señales aleatorias cada vez que se ejecuta.
El ruido generado en la Figura16 es diferente al obtenido en la Figura3
v conclusiones 15

Figura 16 – Ruido aleatorio, su histograma

Por medio de la escritura de un script para amanipular imagenes, se comprobó que se puede utilizar las
funciones implementadas por Matlab tales como rgb2gray u rgb2bw o elaborar un codigo en el cual manipule
las propiedades de la imagen.
Durante la manipulacion de videos y sus frames, se consiguió extraer un frame determinado en caso de ser
necesitado, tal como esta en la Figura 15 donde se extrajeron 4 frames del archivo de video.

v conclusiones
Por medio de los códigos presentados en la guía e investigación adicional, fue posible generar, realizar
modificaciones de una señal ya sea en su tiempo continuo o discreto, sobre su vector de tiempos,limitando sus
ejes de manera grafica o enviando los parametros RGB o tipo de linea para obtener resultados más agradables
para la vista o para analizar en un punto exacto.
A raíz de los comandos presentados en MATLAB y de su forma vectorial en la que trabaja , fue posible realizar
la transformación de las señales,escribiendo los scripts correspondientes en base a las propiedades de la señal
o utilizando el comando proporcionado de la ayuda de MATLAB, ademas se comprendió el almacenamiento
de archivos tipo audio(name,nBits,nChannels) o video(width,height,nFrames).
Partiendo de las plantillas en latex proporcionadas, se logró entender y apropiar la metodología del lenguaje,el
esquema del documento, para poder hacer el presente informe, y compilarlo.

vi bibliográfia
[1] https://es.mathworks.com/products/signal/features.html
[2] https://es.wikibooks.org/wiki/Manual_de_LaTeX/Texto_completo
[3] https://www.mathworks.com/help/matlab/ref/audioread.html
[4] https://www.mathworks.com/help/matlab/ref/audiowrite.html
[5]https://www.lpi.tel.uva.es/ nacho/docencia/ing_ond_1/trabajos_03_04/sonificacion/cabroa_archivos/umbralizacion.html
[6] https://es.wikipedia.org/wiki/M %C3 %A9todo_del_valor_umbral

referencias
[1] Edward R. Tufte. Beautiful Evidence. Graphics Press, LLC, first edition, May 2006.
[2] Edward R. Tufte. The Visual Display of Quantitative Information. Graphics Press, Cheshire, Connecticut, 2001.
[3] Edward R. Tufte. Envisioning Information. Graphics Press, Cheshire, Connecticut, 1990.
[4] Edward R. Tufte. Visual Explanations. Graphics Press, Cheshire, Connecticut, 1997.
[5] Robert Bringhurst. The Elements of Typography. Hartley & Marks, 3.1 edition, 2005.
[6] Frank Mittelbach and Michel Goossens. The LATEX Companion. Addison–Wesley, second edition, 2004.
[7] Hideo Umeki. The geometry package. http://ctan.org/pkg/geometry, December 2008.

Potrebbero piacerti anche