Está en la página 1de 31

Aplicaciones de MATLAB

Universidad Tecnolgica de Len


Dr. J. Guadalupe Santos Gmez
gsantos@utleon.edu.mx

Fourier
Generacin de una seal senoidal con ruido
%Vector de valores en el tiempo
t= 0:0.001:1;
y=sin(2*pi*20*t);
2.5
randn('state',0);
yn=y+0.5*randn(size(t)); 2
plot(t(1:50),yn(1:50))
1.5
1
0.5
0
-0.5
-1
-1.5
-2

0.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04

0.045

0.05

Amplitud de la seal

La transformada de Fourier es una herramienta matemtica que nos


permite analizar seales del dominio del tiempo o seales discretas
en el dominio de la frecuencia. En el siguiente ejemplo se muestra el
uso de la transformada rpida de Fourier, la cual ya esta definida
como una funcin interna el programa .
% Generacion de una seal con ruido
t = linspace(0,10,512); % tiempo
base
s = sin(2*pi/5*t); % seal
Seal ruidosa
n = 0.1*randn(size(t)); % ruido1.5
x = s + n; % seal con ruidol
disp('Relacin seal ruido (SNR), 1dB')
SNR = 20*log10(std(s)/std(n)) %
0.5
Relacion seal-ruido, dB
plot(t,x)
0
xlabel('Tiempo (s)')
ylabel('Amplitud de la seal')
-0.5
title('Seal ruidosa')
grid
-1

-1.5

5
6
Tiempo (s)

10

1
0.8
0.6
0.4
0.2
kT

N=64;
T=1/128;
k=0:N-1;
%Seal con una frecuenia de 20 Hz
f=sin(2*pi*20*k*T);
figure
%Grafica de la seal senoidal
plot(k,f)
xlabel('k');ylabel('kT');grid
grid
F=fft(f);
magF=abs(F);
figure
%GRafica de la magnitud de la
transformada de Fourier de la seal
senoidal
plot(k,magF)
ylabel('|F|');xlabel('k');grid
hertz=k*(1/(N*T));
figure
%Grafica de la transformada de
Fourier con escala en Hz
plot(hertz(1:N/2),magF(1:N/2))
xlabel('Hz');ylabel('|F(k)|')

0
-0.2
-0.4
-0.6
-0.8
-1

10

20

30

40
k

50

60

70

35

30

25

|F|

20

15

10

5
35

10

20

30

40

50

60

70

30

25

20
|F(k)|

15

10

10

20

30

40
Hz

50

60

70

Genere 128 puntos para las siguiente funciones. Dibuje la suma de


todas la seales en el dominio del tiempo. Use el algoritmo de la
transformada de Fourier para graficarla en el dominio de la
frecuencia. Grafique el espectro de frecuencia de las suma de las
seales ahora cambiando el eje horizontal a una escala de Hz

f k 2 sin(2 50k )
g k cos(250k ) 2 sin(200k )
hk 5 cos(1000k )

mk 4 sin 250k
4

Sonido
Una seal de sonido es un ejemplo de una seal
continua que es muestreada como resultado de una
seal discreta. En este caso el sonido que viaja a travs
del aire es grabado como un conjunto de mediciones que
pueden ser usadas para reconstruir el sonido original tan
fiel como sea posible. La razn de muestreo o frecuencia
de muestreo se toma por unidad de tiempo.
En MATLAB ls seales discretas son representadas por un
vector y la frecuencia es medida en Hz. Existen archivos
en MATLAB como chirp, gong, laughter, splat, train y
handel.
Estas
funciones
pueden
ser
cargadas
directamente en la ventana de comandos como:
>>load gong
y para que se escuche se teclea
>>sound(y,Fs)

El siguiente archivo permite graficar dos seales que


existen dentro de las utileras de MATLAB

Amplitude

% Muestra las seales de los sonidos chirp y train


load chirp
subplot(2,1,1)
plot(y)
Chirp
ylabel('Amplitude')
1
title('Chirp')
0.5
load train
0
subplot(2,1,2)
plot(y)
-0.5
ylabel('Amplitude')
-1
0
2000
4000
6000
8000
title('Train')

10000

12000

14000

10000

12000

14000

Train
1

Amplitude

0.5
0
-0.5
-1

2000

4000

6000

8000

Archivo que simula el sonido de una ballena


%%programa de sonido de la ballena
fs=4000;
t=0:1/fs:5;
f0=175;
%%Define funciones
y1=sin(2*pi*f0*t);
y2=sin(2*pi*2*f0*t);
y3=sin(2*pi*3*f0*t);
y0=y1+y2+y3;
A=(2*exp(-1.5*t)).*sin(2*pi*t*0.65);
call=A.*y0;

%%Reproduce sonido
soundsc(call,fs)
plot(t,call)

-1

-2

-3

0.5

1.5

2.5

Para leer un archivo e audio puede usar la siguiente sintaxis

[y,Fs] = audioread(filename)
Lees datos de un archivo de nombre name, y regresa datos
muestreados a una razn de muestreo, Fs
[y,Fs] = audioread(filename,samples)
Lee unrango seleccionado de datos de una muestra de audio, donde
las muestras son un vector [start,finish]
[y,Fs] = audioread(___,dataType)
Regresa datos muestreado de audio en un archivo, donde las
muestra son un vector de native o double y puede incluir
cualquiera de los argumentos antes descritos.
Read only the first 2 seconds.
samples = [1,2*Fs];
clear y Fs
[y,Fs] = audioread(filename,samples);

Genere un script donde simule el sonido de manera independiente


de cada una de cada una de las seales que se muestran en el
cuadro de abajo y luego simule el sonido de la suma de las cuatro
seales. Considere ahora las seales en el dominio del tiempo.

f k 2 sin( 2 50k )
g k cos(250k ) 2 sin( 200k )
hk 5 cos(1000k )

mk 4 sin 250k
4

Genere un script donde se cargue una cancin en formato .mp3 y


reproduzca 20 segundos de la misma, despus reproduzca solo 10
segundos. Grafique ambos casos.

Procesamiento de imgenes
Las imgenes son representadas como rejillas,
matrices o elementos de imgenes (llamados pixeles).
En MATLAB una imagen es una representacin matricial
en el que cada elementos representa un pixel y este
almacena su propio color. Existen dos formas bsicas
en las que se puede representar el color.
Color verdadero o RGB en el que se tienen tres
componentes bsicos(rojo, verde y azul).
Indexado a un mapa de colores, este almacena los
colores bsicos en tres columnas separadas.

Mapas de colores soportados por MATLAB

Cargar y ver un aimagen


>> load spine
>> image(X)

50

100

150

200

250

300

350
50

100

150

200

250

300

350

400

450

Cuando una imagen se representa con un mapa de


colores, existen dos matrices
o La matriz del mapa de colores que tiene px3
dimensiones donde p es el nmero de colores
disponibles . Cada rengln almacena en el rango de
0 a 1 los componentes del color rojo, verde y azul.
o La matriz imagen con dimensin de mxn, donde
cada elemento es un ndice del mapa de colores,
con enteros en el rango de 1 a p.

>> mat=round(rand(5)*(r-1)+1)
mat =

0.5
1
1.5

52
58
9
59
41

7
19
35
61
62

11
62
61
32
51

10
28
59
51
61

42
3
54
60
44

2
2.5
3
3.5
4
4.5

>> image(mat)

5
5.5
0.5

>> mat=round(rand(500)*(r-1)+1)
mat =
52
58
9
59
41

7
19
35
61
62

11
62
61
32
51

10
28
59
51
61

42
3
54
60
44

1.5

2.5

3.5

4.5

5.5

250

300

350

400

450

500

50
100
150
200
250
300
350
400

>> image(mat)

450
500

50

100

150

200

Leer una imagen desde un archivo


>>I = imread(Moto4.jpg');%lee una imagen desde un archivo
>>imshow(I)%Muestra la imagen

>> whos
Name
I

Size

285x510x3

Bytes Class
436050 uint8

Attributes

Como usar la cmara en Matlab


Se requiere tener instalado Image Acquisition Toolbox
Para ver la informacin de los adaptadores disponibles
>>imaqhwinfo
Si marca un error dependiendo de la versin que tenga instalada,
puede descargas los drivers para la cama.
Para descargar los drivers de la cmara se teclea
supportPackageInstaller en la ventana de comandos, y aparece la
siguiente ventana

Teclee next y aparece

Para descargue el driver de acuerdo a su cmara ,


seleccinelo y de click en next , se instalara de forma
automtica.
Para determinar el tipo de adaptador, teclee imaqhwinfo
en l ventana de comandos y obtendr la siguiente
informacin:
>> imaqhwinfo
ans =
InstalledAdaptors:
MATLABVersion:
ToolboxName:
ToolboxVersion:

{'dcam' 'kinect' 'winvideo'}


'8.3 (R2014a)'
'Image Acquisition Toolbox'
'4.7 (R2014a)

>> imaqhwinfo('winvideo',1)
ans =
DefaultFormat:
DeviceFileSupported:
DeviceName:
DeviceID:
VideoInputConstructor:
VideoDeviceConstructor:
SupportedFormats:

'YUY2_160x120'
0
'Microsoft LifeCam VX-800'
1
'videoinput('winvideo', 1)'
'imaq.VideoDevice('winvideo', 1)'
{1x5 cell}

Con esta instruccin se puede visualizar varias caractersticas del


dispositivo incluyendo su nombre

Para crear una entrada de video, tecleamos


>> vid = videoinput('winvideo',1,'YUY2_160x120');
Tomando datos del dispositivo instalado
>> propinfo(vid)
ans =
BayerSensorAlignment: [1x1 struct]
DeviceID: [1x1 struct]
DiskLogger: [1x1 struct]
DiskLoggerFrameCount: [1x1 struct]
ErrorFcn: [1x1 struct]
EventLog: [1x1 struct]
FrameGrabInterval: [1x1 struct]
FramesAcquired: [1x1 struct]
FramesAcquiredFcn: [1x1 struct]
FramesAcquiredFcnCount: [1x1 struct]
FramesAvailable: [1x1 struct]
FramesPerTrigger: [1x1 struct]
InitialTriggerTime: [1x1 struct]
Logging: [1x1 struct]
LoggingMode: [1x1 struct]

Name: [1x1 struct]


NumberOfBands: [1x1 struct]
Previewing: [1x1 struct]
ReturnedColorSpace: [1x1 struct]
ROIPosition: [1x1 struct]
Running: [1x1 struct]
SelectedSourceName: [1x1 struct]
Source: [1x1 struct]
StartFcn: [1x1 struct]
StopFcn: [1x1 struct]
Tag: [1x1 struct]
Timeout: [1x1 struct]
TimerFcn: [1x1 struct]
TimerPeriod: [1x1 struct]
TriggerCondition: [1x1 struct]
TriggerFcn: [1x1 struct]
TriggerFrameDelay: [1x1 struct]
TriggerRepeat: [1x1 struct]
TriggersExecuted: [1x1 struct]
TriggerSource: [1x1 struct]
TriggerType: [1x1 struct]
Type: [1x1 struct]
UserData: [1x1 struct]
VideoFormat: [1x1 struct]
VideoResolution: [1x1 struct]

Video corriendo

Encender la cmara y
adquirir imgenes
>>start(vid);
Mostrar lo que se esta
visualizando por la cmara
>>preview(vid);

Video detenido

Para tomar una imagen


>>img = getsnapshot(vid);
Para detener el video
>> stoppreview(vid)
Para reiniciarlo nuevamente repita
>>preview(vid);
20

40

60

Imagen capturada

80

100

120
20

40

60

80

100

120

140

160

Herramienta de adquisicin de imagen


Para abrir la herramienta teclee imaqtool en la ventana de
comandos, posteriormente se abrir la ventana

Teclee start preview para obtener imagen de la cmara

Para tomar una fotografa teclee start acquisition, posteriormente


detngalo con stop acquisition y al programa le pedir el nombre
del viseo y la ubicacin para guardarlo cuando desee exportarlo.

Puede tomar varias imgenes(frames) en la ventana de acquisition


parameter, como por ejemplo seis.
En esta ventana puede encontrar mas informacin sobre las
parmetros de la imagen que puedes ser editados. Los archivos son
guardados en formato mat(matriz)

20

40

60

80

100

120
20

40

60

80

100

120

140

160

**Tambin puede abrir la ventana de image acquisition del


panel de MATLAB en la barra de APPS

aqu

Pasos para obtener una imagen del Image Acquisition Toolbox