Curso Matlab

15
Curso Matlab 5.1. Introducción MATLAB (MATriz LABoratory) Matlab es un programa que nos permite realizar cálculos numéricos con vectores y matrices. También puede trabajar con escalares, tanto reales como imaginarios. Una de las capacidades mas atractivas es la de poder realizar de manera muy sencilla una amplia variedad de gráficos en dos y tres dimensiones. En este curso de Análisis de señales utilizaremos el MATLAB como una herramienta para visualizar señales en forma gráfica. Las siguientes instrucciones de MATLAB son ampliamente utilizadas en la generación y procesamiento digital de señales, esto permite de manera rápida y fácil la observación de ciertas características de la señal. Iniciaremos con los comandos mas sencillos Comandos de propósito general. Manejo de Comandos y Funciones. help Documentación en línea. Nos permite ver lo que ‘hace una función’ what Listado de Directorio de archivos con extensión M-, MAT- y MEX. type Lista de archivos M-file. lookfor Búsqueda desde el teclado a través del comando HELP. which Localización de funciones y archivos. demo corrida de demos. Manejo de variables y workspace (espacio de trabajo). who Lista de variables actuales. Nos permite saber características de una variable tal como su tamaño, el tipo o si es real o compleja

Transcript of Curso Matlab

Page 1: Curso Matlab

Curso Matlab

5.1. Introducción

MATLAB (MATriz LABoratory)Matlab es un programa que nos permite realizar cálculos numéricos con vectores y matrices. También puede trabajar con escalares, tanto reales como imaginarios. Una de las capacidades mas atractivas es la de poder realizar de manera muy sencilla una amplia variedad de gráficos en dos y tres dimensiones.

En este curso de Análisis de señales utilizaremos el MATLAB como una herramienta para visualizar señales en forma gráfica.

Las siguientes instrucciones de MATLAB son ampliamente utilizadas en la generación y procesamiento digital de señales, esto permite de manera rápida y fácil la observación de ciertas características de la señal. Iniciaremos con los comandos mas sencillos

Comandos de propósito general.

Manejo de Comandos y Funciones. help Documentación en línea. Nos permite ver lo que ‘hace una función’ what Listado de Directorio de archivos con extensión M-, MAT- y MEX. type Lista de archivos M-file. lookfor Búsqueda desde el teclado a través del comando HELP. which Localización de funciones y archivos. demo corrida de demos.

Manejo de variables y workspace (espacio de trabajo).

who Lista de variables actuales. Nos permite saber características de una variable tal como su tamaño, el tipo o si es real o compleja whos Lista de variables actuales, forma larga load Cargar variables de disco. save Salvar variables de workspace a disco. clear limpiar variables y funciones de memoria. size Tamaño de la matriz length Longitud del vector disp Desplegar una matriz o texto.

5.3. Sistema operativo y archivos

cd Cambiar directorio actual de trabajo. dir desplegar directorio. delete Borrar archivo.

Es conveniente abrir una hoja en el editor de MATLAB (M-file) para ir guardando lo que se va escribiendo. También es posible ir generando el programa directamente en el command de MATLAB la desventaja es que no se pueden guardar las instrucciones escritas.

Page 2: Curso Matlab

Generación de vectores

En MATLAB podemos generar vectores o matrices e implementar operaciones vectoriales o matriciales, por ejemplo:Generemos un vector de tamaño 10x1t = 0:9; el punto y coma indica que no quiero desplegar los valores en pantallapuedo introducir un incremento menor o mayor a uno por ejemplo:

t = 0:0.01:1; en este caso el incremento es 0.01, podemos también generar vectores o matrices utilizando funciones

y = sin(t);y = sqrt(t)*exp(5*t);

Para poner comentarios se utiliza el caracter %

Generemos matrices de n x mA = [1 2 3;4 5 6;7 8 9]; %generación de matriz de 3x3 elementosB = [9 8 7;6 5 4;3 2 1];

Podemos sumar estas matricesS = A+B %suma de elementos

Resultado, suma elemento a elemento de las matricesS = 10 10 10 10 10 10 10 10 10

podemos también restar las matrices

S1 = A-B % resta de matricesresultadoS1 = -8 -6 -4 -2 0 2 4 6 8

multiplicar matricesZ = A*B % multiplicación de matrices

ResultadoZ = 30 24 18 84 69 54 138 114 90

Z1 = A.*B % (multiplicación elemento a elemento)resultadoZ1 =

Page 3: Curso Matlab

9 16 21 24 25 24 21 16 9

Generación de matrices por medio de expresionesX = [A A’;ones(size(A)) A.^2]

Podemos generar matrices de números aleatorios utilizando la instrucción randn y rand

A = rand(10,10) % matriz de números aleatorios con distribución uniforme de 10 x 10;B = randn(10,10) % matriz de números aleatorios con distribución normal de 10 x 10;

Si previamente declaramos una matriz y queremos que la matriz de números aleatorios sea del mismo tamaño que la generada, podemos utilizar la instrucción size. Veamos como:t = -100: 2 :100; % matriz de 1x101Y = randn(size(t)); % matriz de números aleatorios de 1x101

Manipulación de matrices

A90 = rot90(A)Aesp = fliplr(A)Areescri = reshape(A,2,6)Adiag = tril(A)

Solución de ecuaciones lineales

Resolvamos el sistema

escribimos las matrices

A = [2 3 1 1;1 4 2 9;3 -1 1 -1;5 2 -3 1];C = [2 3 0 10];X = inv(A)*C’;

Generación de formas de onda y graficas(suma de senoides)

t = 0:0.001:1;y = 2*sin(2*pi*40*t) + sin(2*pi*60*t);plot(t,y)

Formas de onda específicas

Fs = 1000;T1 = 0:1/Fs/1.5;

Page 4: Curso Matlab

y1 = sawtooth(2*pi*40*T1);Plot(T1,x); axis([0 0.2 -1 1])

y2 = square(2*pì*40*T2)Plot(T2,y2); axis([0 0.2 -1 1])

Las funciones matemáticas tales como coseno, seno y exponencial, ya vienen programadas en MATLAB así que solamente hay que llamarlas.

Generemos una señal senoidal x(t) = Asen(t + ). Con los siguientes parámetros:A= 4; %Amplitud, la adición del carácter ( ; ) evita que se despliegue el numero en pantallaomega = 30; %Frecuencia angularphi = pi/4; %Angulo de defasamientoy = A*sin(omega*t + phi);plot(t,y) %gráfica en forma continuagrid %adiciona a la gráfica una mallatitle(‘Señal senoidal’)xlabel('tiempo(seg)') %pone la etiqueta al eje Xylabel('voltaje') %pone etiqueta al eje Ygtext('punto máximo') %pone una leyenda que se puede colocar con el mouse

la gráfica obtenida se muestra a continuación

También se pueden obtener gráficas logarítmicas:

text(xo, yo,’punto’) %pone una leyenda dadas las coordenadas (xo , yo )loglog( ) %gráfica en escala logarítmicasemilog( ) %gráfica en escala semilogarítmica

Grafiquemos ahora la secuencia x(n) = 0.9n , 0 n 10n = 0:10;

Page 5: Curso Matlab

x = (0.9).^n; % aquí el símbolo ^ indica que n es un exponentestem(n,x) %Gráfica en forma discretagridxlabel('numero de muestra')ylabel('voltaje')title('Secuencia')

Si deseamos cambiar la escala de la gráfica usamos las siguientes instruccionesset(gca,’xtick’,[0 1 2 3 4 5]);set(gca,’ytick’,[0 .1 .2 .3]);

Generemos ahora la secuencia compleja . Graficar su magnitud, fase, parte real y parte imaginaria. En MATLAB tendríamos lo siguienten=-10:10; alfa=-0.1+0.3j;x=exp(alfa*n);subplot(221),stem(n,real(x)); title('parte real'), xlabel('n')subplot(222),stem(n,imag(x)); title('parte imaginaria'), xlabel('n')subplot(223),stem(n,abs(x)); title('magnitud'), xlabel('n')subplot(224),stem(n,(180/pi)*angle(x)); title('ángulo de fase'), xlabel('n')

Page 6: Curso Matlab

Si utilizamos la instrucción hold on podemos graficar varias gráficas en una sola hoja. Para graficar se pueden utilizar los siguientes colores y caracteres

símbolo color carácter y amarillo .m magenta or rojo +g verde -b azul --w blanco xk negro

MATLAB permite la colocación de varias gráficas en una hoja, veamos esto con un ejemplo:subplot(221) %abre una hoja de donde se pueden colocar 4 imágenest=-pi:0.01:pi; %generación del vector de tiempoy1 = sin(3*t)./t; plot(t,y1); %gráfica en la posición (1,1)title(‘función sampling’)subplot(222) %se coloca en la figura (1,2)stem(t,y1);subplot(223) %grafica en al posición (2,1)t=0:pi/50:10*pi;plot3(sin(t),cos(t),t); % gráfica en tres dimensionestitle(‘hélice’)subplot(224); %grafica en la posición (2,2)x = -8:0.5:8;y = x;[X,Y] = meshgrid(x,y); %convierte los vectores a matrices del tamaño de xR = sqrt(X.^2+Y.^2);z = sin( R )./R;mesh(z); %grafica en tres dimensiones grid

Page 7: Curso Matlab

title(‘función sampling en tres dimensiones’)

Algunas veces es útil reescalar la figura para ver mejor la imagen. La instrucción axis[(xmin xmax ymin ymax]) nos permite hacer esto.

A continuación veremos algunos ejemplos de programas sencillos para análisis de señales

5.4. Series de FourierSabemos que utilizando el análisis de Fourier podemos descomponer una señal en sus componentes armónicos, por ejemplo si tenemos una señal cuadrada la cual podemos

escribir como

Vamos a graficar los armónicos de esta función generando uno por uno y posteriormente haremos un programa para obtenerlos

t = 0:.1:10;y = sin(t);plot(t,y),

Page 8: Curso Matlab

Primer armónicoy = sin(t) + sin(3*t)/3;plot(t,y)

Adición de dos armónicos

y = sin(t) + sin(3*t)/3 + sin(5*t)/5 + sin(7*t)/7 + sin(9*t)/9;plot(t,y)

adición de tres armónicos

Page 9: Curso Matlab

t = 0:.02:3.14;y = zeros(10,max(size(t))); %abriendo espacio para almacenar los valores de los armónicosx = zeros(size(t));

% programa para generar los armónicos de una señal cuadrada %Programa para obtener los armónicos de una señal cuadrada%con un periodo de T = 1 seg%Ezequiel Rodríguez R.%Universidad Autónoma Metropolitana - AzcT = 1;Wo = 2*pi/T;t = 0:0.001:pi;y = square(2*pi*t/T); plot(t,y,'r-')gridhold onx = 0;for k = 1:2:10

x = x + (4*sin(k*Wo*t))/(pi*k); y((k+1)/2,:) = x; plot(t,x), pauseendtitle('componentes armónicos')xlabel('tiempo'), ylabel('amplitud')

Análisis espectral

Como vimos en el capitulo II una herramienta poderosa en análisis de señales es la transformada de Fourier, a continuación veamos un ejemplo de la obtención de esta utilizando el algoritmo FFT

%EJEMPLO DE ANALISIS ESPECTRALFs = 1000; %frecuencia de muestreot = 0:1/Fs:0.25; %vector con datos muestreados a 1 khzx = sin(2*pi*50*t) + 2*sin(2*pi*100*t); %suma de señales de 60 y 120 hz.y1 = x + 3*randn(size(t)); %adicionando ruido gaussiano con desviación %estándar de 3 y media cerosubplot(211)plot(t(1:100),y1(1:100)), title('señal con ruido en el dominio del tiempo');xlabel('tiempo (seg)')gridy = fft(y1,256); %obtención de la fft utilizando 256 puntosyy = y.*conj(y)/256; %Obteniendo la norma f = 1000/256*(0:127); %generación del vector frecuenciasubplot(212)plot(f(1:100), yy(1:100)); %graficando solamente 100 puntosaxis([0 200 0 200])set(gca,'xtick',[0:50:200])title('Espectro de la señal');gridxlabel('frecuencia [hz]')

Page 10: Curso Matlab

Convolución

La operación de convolución también es posible obtenerla utilizando MATLABEjemplo 1: Dadas las dos secuencias x(n) = [3, 11, 7, 0, -1, 4,2], -3 n 3; h(n) = [2, 3, 0, -5, 2,1], -1 n 4Encontrar la convolución y(n) = x(n) * h(n)

Ejemplo 2: sea el pulso rectangular x(n) = u(n)-u(n-10) la entrada a un sistema cuya respuesta al impulso es h(n) = (0.8)n u(n), encontrar la salida y(n). Sabemos que la salida esta dad por la convolución entre x(n) y h(n).A1=zeros(1,5)

Page 11: Curso Matlab

A2=ones(1,10);A3=zeros(1,40);X=[A1 A2 A3]; %generando la secuencia x(n)n=-5:49;stem(n,x)gridtitle('secuencia x(n)')xlabel('n')h=(0.9).^n; % generando la secuencia h(n)subplot(311)plot(n,x)subplot(311)stem(n,x)title('secuencia x(n)')subplot(312)stem(n,h)title('secuencia h(n)')y=conv(x,h); % convolución entre x(n) y h(n)subplot(313)stem(y)title('convolución entre h(n) y x(n)')axis([0 60 0 15])

ELABORACION DE FUNCIONES EN MATLABEn MATLAB es posible hacer funciones de propósito especifico, por ejmplo:

function y = prueba(x);%esta funcion calcula los valores del polinomio f(x), se debe de introducir un vector% xy = 1./((x-3).^2+.01)+1./((x-.9).^2+.04)-6;

grabar esta funcion en un subdirectorio

para usarla hacemos lo siguiente:x = -1:.1:2;z = prueba(x);plot(x,z);

evaluemos la integral entre los limites 0,1area=quad('prueba',0,1)