Autor Tema: tutorial de matlab  (Leído 10976 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
tutorial de matlab
« en: 18 de Septiembre de 2015, 14:44:57 »
hola amigos del foro primero diganme si estan interesados en un tutorial de matlab yo soy muy bueno programando en matlab y quiero empezar un tutorial desde cero para que aprendan a programar mejor en matlab, si les interesa respondan y empiezo el tutorial

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #1 en: 18 de Septiembre de 2015, 14:47:28 »
yo estoy muy interesado, incluso tengo varias consultas para hacerte ya que lo estoy usando mucho en un proyecto.

saludos!
-
Leonardo Garberoglio

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #2 en: 18 de Septiembre de 2015, 14:49:03 »
cuales son tus preguntas, que quieres saber de matlab dime

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #3 en: 18 de Septiembre de 2015, 15:04:25 »
cuales son tus preguntas, que quieres saber de matlab dime

los .m con los que estoy trabajando no los tengo acá, estan en la facu. Mañana a la mañana estoy trabajando allá y te hago bien la consulta. tiene que ver con la implementeacion de la FFT que hace matlab y algunos resultados que no estoy entendiendo bien.

ahora, lo que siempre me interesó y nunca pude encontrar es una buena guía para conectar matlab con el mundo exterior en tiempo real. Por ejemplo, ingresar datos por un puerto serie virtual y visualizarlos o hacer càlculos en tiempo real con simulink. Tené una buena guía de eso con ejemplos prácticos sería fantástico y realmente muy útil!!!!

espero que puedas armar algo de eso

abrazo.
-
Leonardo Garberoglio

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #4 en: 18 de Septiembre de 2015, 15:06:41 »
hola les voy a enseñar como utilizar un switch en matlab es de la siguiente manera
p=dit;
p=input('seleccione el caso');
switch dit
case1


case2


case3

de esa forma se  puede utilizar un switch en matlab para cuando se necesite hacer varios cálculos simultáneos en un solo .m de matlab, p es para seleccionar el caso y hay que ponerle un nombre cualquiera y luego hacer switch nombre que es necesario en matlab para que reconosca el switch, ya con esto cuando quieran hacer muchas operaciones en un solo programa sin llamar a otro, si les ineteresa como hacer una funcion en matlab tambien les enseño pero mas tarde

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #5 en: 18 de Septiembre de 2015, 15:11:08 »
y que clase de calculos en tiempo real con simulink te ineteresan

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #6 en: 18 de Septiembre de 2015, 15:53:06 »
y que clase de calculos en tiempo real con simulink te ineteresan

me he expresado mal, los cálculo no serían en tiempo real, la idea sería poder leer una cierta cantidad de datos por un puerto, por ejemplo un virtual serial port (los que se crean al conectar un adaptador ttl a usb) y una vez leidos procesarlos (análisis de ruido, fft, filtrado, etc), luego leer otra tanda procesarlos y así susecivamente.
me explico?

saludos!
-
Leonardo Garberoglio

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #7 en: 18 de Septiembre de 2015, 15:59:34 »
hola elgarbe lo que estas haciendo supera mi conocimiento pero te dejo un link donde lo explican muy bien solo tienes que hacer una cuenta en mathworks para descargar tutoriales  http://www.mathworks.com/help/instrument/serial-port-overview.html

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: tutorial de matlab
« Respuesta #8 en: 18 de Septiembre de 2015, 16:24:07 »

Algunos años atrás utilice la transformada rápida de Fourier para una tarea del curso de señales. Realice varios experimento incluyendo la determinación del espectro de un sensor de temperatura LM35, todo lo hice en matlab (incluyendo la toma de datos por el canal RS232). Acá los códigos que elabore en sus momentos espero sirvan.

Código: [Seleccionar]
N1 = 2048;
% Datos de tensión capturados por el lm35
%h = [0.229 0.2101 0.1466 0.229 0.2101 0.2101 0.229 0.1466 0.2101 0.2101];
%h = [0 -0.04785 -0.09569 -0.11962 -0.14354 -0.1555 -0.16746 -0.17943 -0.19139 -0.20335 -0.21531 -0.22727 -0.26316 -0.27512 -0.311 -0.33493 -0.35885 -0.28708 -0.311 -0.20335 -0.17943 -0.09569 -0.07177 -0.03589 0 0.035885 0.07177 0.095694 0.107656 0.119617 0.131579 0.155502 0.179426 0.191388 0.203349 0.2272730,239234 0.263158 0.27512 0.311005 0.334928 0.358852 0.34689 0.334928 0.239234 0.119617 0.107656 0.07177 0.011962 0];
h = [0.00000 -0.00120 -0.00478 -0.00837 -0.01077 -0.01316 -0.01675 -0.01914 -0.02033 -0.02153 -0.02273 -0.02333 -0.02392 -0.02392 -0.02392 -0.02333 -0.02273 -0.02273 -0.02033 -0.01555 -0.01196 -0.00718 -0.00478 -0.00120 0.00000 0.00359 0.00718 0.00957 0.01196 0.01555 0.01675 0.01914 0.02153 0.02213 0.02273 0.02392 0.02512 0.02512 0.02512 0.02512 0.02392 0.02392 0.02333 0.02333 0.01914 0.01555 0.01196 0.00957 0.00359 0.00000];
%F1 = [0: N1-1] / N1;
%plot(h)
FS =  15000;
%FS = 2.9412e+003
LONGITUD = 50;
t = 1/FS;
x = [0 : LONGITUD - 1]*t;
%h = sin(2*pi*100*x) + sin(2*pi*50*x);
%F1 = [-N1 / 2 : N1 / 2 - 1] / N1;
%H = abs(fft( h, 256));
%L = linspace(0, 300, 64);
%plot(L, H(1:64))
%H1 = fftshift(H);
%plot (F1, H1)
%plot( F1 , H)

%NFFT = 2^nextpow2(LONGITUD);
NFFT = 50;
Y = fft(h,NFFT)/LONGITUD;
f = FS/2*linspace(0,1,NFFT/2);

% se gráfica sólo una banda de espectro de amplitud
stem(f,2*abs(Y(1:NFFT/2)))
 

Para el caso de la función coseno un ejemplo de la FFT

Código: [Seleccionar]
n = 0: 1: 30;
x = cos(2*pi*(n)/10);

N1 = 64;
N2 = 128;   
N3 = 256; 
X1 = abs (fft (x, N1));
X2 = abs (fft (x, N2)); 
X3 = abs (fft (x, N3));

 F1 = [0: N1 - 1] / N1; 
 F2 = [0: N2 - 1] / N2; 
 F3 = [0: N3 - 1] / N3;
 
 subplot (3,1,1)
 plot (F1, X1, '-x'), title ('N = 64'), axis ([0 1 0 20]) 
 subplot (3,1,2)
 plot(F2, X2, '-x'), title ('N = 128'), axis ([0 1 0 20])
 subplot (3,1,3)
 plot(F3,X3,'-x'),title('N = 256'),axis([0 1 0 20])

Voy a buscar el código que adquiría datos vía serial para subirlo.
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: tutorial de matlab
« Respuesta #9 en: 18 de Septiembre de 2015, 16:27:26 »

Acá el código que recibe datos por el canal RS232

Código: [Seleccionar]
% Cerrar Todo
close all
clear
clc

% Cerrar puerto serial si ya está abierto

s = instrfind;
if ~isempty( s )
    fclose( s );
    delete( s );
    clear s
end

% Configuración de la comunicación serial
SerPIC = serial('COM3');
set(SerPIC,'BaudRate',9600);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
fopen(SerPIC);

% Vectores que contienen la información recibida
C=[];
DATOS = [];

% Se reciben los datos
for k=1:28
  pause(15); 
  for i = 1: 1 : 2
   C = [C fread(SerPIC, [1], 'uint8')];
  end
end
fclose(SerPIC);

%% Rutina que convierte los datos recibidos a decimal
parte_h = [];
parte_l = [];
for i = 1 : 2: length(C)
 parte_h = [parte_h uint16(C(i))];
 parte_l = [parte_l uint16(C(i+1))];
end

zah = bitshift(parte_h, 8);
DATOS2 = bitor(zah, parte_l);
Un saludo desde Pereira - Colombia

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #10 en: 18 de Septiembre de 2015, 16:27:45 »
hola elgarbe lo que estas haciendo supera mi conocimiento pero te dejo un link donde lo explican muy bien solo tienes que hacer una cuenta en mathworks para descargar tutoriales  http://www.mathworks.com/help/instrument/serial-port-overview.html

que pena!!!! tenía mucha esperanza de encontrar algo de ayuda en este tema!
gracias de todo modo.

por cierto, como se comunica tu robot con matlab? digo, como le llegarán los datos desde el robot a matlab?

saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #11 en: 18 de Septiembre de 2015, 16:29:03 »

Algunos años atrás utilice la transformada rápida de Fourier para una tarea del curso de señales. Realice varios experimento incluyendo la determinación del espectro de un sensor de temperatura LM35, todo lo hice en matlab (incluyendo la toma de datos por el canal RS232). Acá los códigos que elabore en sus momentos espero sirvan.

Código: [Seleccionar]
N1 = 2048;
% Datos de tensión capturados por el lm35
%h = [0.229 0.2101 0.1466 0.229 0.2101 0.2101 0.229 0.1466 0.2101 0.2101];
%h = [0 -0.04785 -0.09569 -0.11962 -0.14354 -0.1555 -0.16746 -0.17943 -0.19139 -0.20335 -0.21531 -0.22727 -0.26316 -0.27512 -0.311 -0.33493 -0.35885 -0.28708 -0.311 -0.20335 -0.17943 -0.09569 -0.07177 -0.03589 0 0.035885 0.07177 0.095694 0.107656 0.119617 0.131579 0.155502 0.179426 0.191388 0.203349 0.2272730,239234 0.263158 0.27512 0.311005 0.334928 0.358852 0.34689 0.334928 0.239234 0.119617 0.107656 0.07177 0.011962 0];
h = [0.00000 -0.00120 -0.00478 -0.00837 -0.01077 -0.01316 -0.01675 -0.01914 -0.02033 -0.02153 -0.02273 -0.02333 -0.02392 -0.02392 -0.02392 -0.02333 -0.02273 -0.02273 -0.02033 -0.01555 -0.01196 -0.00718 -0.00478 -0.00120 0.00000 0.00359 0.00718 0.00957 0.01196 0.01555 0.01675 0.01914 0.02153 0.02213 0.02273 0.02392 0.02512 0.02512 0.02512 0.02512 0.02392 0.02392 0.02333 0.02333 0.01914 0.01555 0.01196 0.00957 0.00359 0.00000];
%F1 = [0: N1-1] / N1;
%plot(h)
FS =  15000;
%FS = 2.9412e+003
LONGITUD = 50;
t = 1/FS;
x = [0 : LONGITUD - 1]*t;
%h = sin(2*pi*100*x) + sin(2*pi*50*x);
%F1 = [-N1 / 2 : N1 / 2 - 1] / N1;
%H = abs(fft( h, 256));
%L = linspace(0, 300, 64);
%plot(L, H(1:64))
%H1 = fftshift(H);
%plot (F1, H1)
%plot( F1 , H)

%NFFT = 2^nextpow2(LONGITUD);
NFFT = 50;
Y = fft(h,NFFT)/LONGITUD;
f = FS/2*linspace(0,1,NFFT/2);

% se gráfica sólo una banda de espectro de amplitud
stem(f,2*abs(Y(1:NFFT/2)))
 

Para el caso de la función coseno un ejemplo de la FFT

Código: [Seleccionar]
n = 0: 1: 30;
x = cos(2*pi*(n)/10);

N1 = 64;
N2 = 128;   
N3 = 256; 
X1 = abs (fft (x, N1));
X2 = abs (fft (x, N2)); 
X3 = abs (fft (x, N3));

 F1 = [0: N1 - 1] / N1; 
 F2 = [0: N2 - 1] / N2; 
 F3 = [0: N3 - 1] / N3;
 
 subplot (3,1,1)
 plot (F1, X1, '-x'), title ('N = 64'), axis ([0 1 0 20]) 
 subplot (3,1,2)
 plot(F2, X2, '-x'), title ('N = 128'), axis ([0 1 0 20])
 subplot (3,1,3)
 plot(F3,X3,'-x'),title('N = 256'),axis([0 1 0 20])

Voy a buscar el código que adquiría datos vía serial para subirlo.

muy bueno!

una consulta, recordas porque en esta línea:

%NFFT = 2^nextpow2(LONGITUD);
NFFT = 50;
Y = fft(h,NFFT)/LONGITUD;

comentaste la primera? y porque divides por LONGITUD al resultado de la fft?
voy a estudiar un poco lo que hisiste, gracias!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #12 en: 18 de Septiembre de 2015, 16:30:19 »

Acá el código que recibe datos por el canal RS232

Código: [Seleccionar]
% Cerrar Todo
close all
clear
clc

% Cerrar puerto serial si ya está abierto

s = instrfind;
if ~isempty( s )
    fclose( s );
    delete( s );
    clear s
end

% Configuración de la comunicación serial
SerPIC = serial('COM3');
set(SerPIC,'BaudRate',9600);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
fopen(SerPIC);

% Vectores que contienen la información recibida
C=[];
DATOS = [];

% Se reciben los datos
for k=1:28
  pause(15); 
  for i = 1: 1 : 2
   C = [C fread(SerPIC, [1], 'uint8')];
  end
end
fclose(SerPIC);

%% Rutina que convierte los datos recibidos a decimal
parte_h = [];
parte_l = [];
for i = 1 : 2: length(C)
 parte_h = [parte_h uint16(C(i))];
 parte_l = [parte_l uint16(C(i+1))];
end

zah = bitshift(parte_h, 8);
DATOS2 = bitor(zah, parte_l);


fantástico, algo como eso estaba buscando. Mañana voy a tratar de probarlo!

Saludos y gracias
-
Leonardo Garberoglio

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #13 en: 18 de Septiembre de 2015, 16:34:14 »
el robot se comunica con matlab por medio de un usb2dynamixel que permite la comunicacion entre matlab y el robot

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tutorial de matlab
« Respuesta #14 en: 18 de Septiembre de 2015, 16:38:04 »
el robot se comunica con matlab por medio de un usb2dynamixel que permite la comunicacion entre matlab y el robot

el usb2dynamixel crea un puerto serial virtual, asi que eso que paso Chenao te va a servir


 

anything