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

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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #15 en: 18 de Septiembre de 2015, 16:41:27 »
el robot se comunica con matlab por medio de un usb2dynamixel que permite la comunicacion entre matlab y el robot

no necesariamente:
http://support.robotis.com/en/software/dynamixel_sdk/usb2dynamixel/window_communication_1/matlab.htm

sds
-
Leonardo Garberoglio

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #16 en: 18 de Septiembre de 2015, 16:44:38 »
elgarbe eso era mas que obvio agregar las bibbliotecas de los servomotores para asi poder controlarlos por matlab o por cualquier otro programa como eclipse

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: tutorial de matlab
« Respuesta #17 en: 18 de Septiembre de 2015, 16:50:46 »
Citar
%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!

Empezando por la segunda pregunta. No recuerdo muy bien pero básicamente la FFT debe ser dividida por el número de muestras (longitud del vector h) para normalizar la transformación, en caso contrario se sale del umbral en que esta definido el vector de muestras.  Con respecto a la primera pregunta recuerdo que lo leí en un libro de señales pero este método de normalizar nunca me funciono.

Un saludo desde Pereira - Colombia

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #18 en: 18 de Septiembre de 2015, 16:51:21 »
killer no necesariamente creo que no necesito todo eso que puso chenao  mira lo facil que se comunica el usb2dynamixel con matlab
loadlibrary('dynamixel', 'dynamixel.h');
libfunctions('dynamixel');
DEFAULT_PORTNUM = 3;  //COM3
DEFAULT_BAUDNUM = 1;  //1Mbps
 
calllib('dynamixel', 'dxl_initialize', DEFAULT_PORTNUM, DEFAULT_BAUDNUM);
 
unloadlibrary('dynamixel');

todo gracias a las librerias de los motores

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: tutorial de matlab
« Respuesta #19 en: 18 de Septiembre de 2015, 16:54:13 »
Código: [Seleccionar]
killer no necesariamente creo que no necesito todo eso que puso chenao  mira lo facil que se comunica el usb2dynamixel con matlab
loadlibrary('dynamixel', 'dynamixel.h');
libfunctions('dynamixel');
DEFAULT_PORTNUM = 3;  //COM3
DEFAULT_BAUDNUM = 1;  //1Mbps
 
calllib('dynamixel', 'dxl_initialize', DEFAULT_PORTNUM, DEFAULT_BAUDNUM);
 
unloadlibrary('dynamixel');

todo gracias a las librerias de los motores

Claramente, pero esta rutina puede servir para cualquier periférico que se comunique con el Matlab vía Rs232
Un saludo desde Pereira - Colombia

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #20 en: 18 de Septiembre de 2015, 16:56:51 »
ok, entonces si me sirve el unico problema es que mi compu solo le sirve un puerto usb los otros estan dañados solo le puedo conectar una cosa a la vez

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tutorial de matlab
« Respuesta #21 en: 18 de Septiembre de 2015, 16:59:01 »
No sabia que poseia uan libreria, de todas formas es una comunicacion RS232 (Real o Virtual como es el caso del usb2dynamixel) igual que la que hizo chenao

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!

Si no me equivoco esa linea (la comentada) la tiene para hacer que el largo de muestras que entran en la FFT sea un valor 2^x , supuestamente esto accelera la conversion de la FFT.

EDIT: Por que dividirlo por la longitud.... ahi se trato el tema

http://www.mathworks.com/matlabcentral/newsreader/view_thread/267952
« Última modificación: 18 de Septiembre de 2015, 17:01:23 por KILLERJC »

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: tutorial de matlab
« Respuesta #22 en: 18 de Septiembre de 2015, 17:03:18 »
Código: [Seleccionar]
Por que dividirlo por la longitud.... ahi me mataste, ya no lo recuerdo
Killer esto se debe a que se debe dividir por la longitud del vector de muestras. Voy a consultar los apuntes para corroborar esta operación.
« Última modificación: 18 de Septiembre de 2015, 17:05:44 por Chenao »
Un saludo desde Pereira - Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tutorial de matlab
« Respuesta #23 en: 18 de Septiembre de 2015, 17:07:57 »
Citar
If y(t) is periodic with period T and fundamental frequency f0 = 1/T, the Fourier series coefficients (m=1,2,...) are given by

Ym = (1/T)*INTEGRAL(0,T){ dt exp(-j*2*pi*f(m)*t) * y(t) ) }

where f(m) = (m-1)*f0 = (m-1)/T.

Since the integrand is periodic with period T, the approximation to the integral represented by the sum of N-1 interior rectangles of width dt and 2 end rectangles of width dt/2 centered at times t(n) = (n-1)*dt , n = 1:N+1 can be reduced to the sum of N
rectangles of width dt centered at times t(n) = (n-1)*dt, n=1:N.

Therefore

Ym = (1/T)*SUM(n=1:N){ dt exp(-j*2*pi*f(m)*t(n)) * y(n) ) }

The factor dt/T = 1/N is missing in the MATLAB implementation.

Hope that helps.

« Última modificación: 18 de Septiembre de 2015, 17:33:59 por KILLERJC »

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #24 en: 18 de Septiembre de 2015, 17:16:50 »
hola http://es.slideshare.net/doping92/factorizacin-con-matlab-7840262 de este ejemplo de un caso de factorizacion en matlab empeze y me salieron todos los casos de factorizacion en matlab y lo mejor es que obviamente lo hice con un switch que ya explique como usarlo y ademas el programa que les digo de factorizacion cuando el polinomio no es factorizable lo devuelve como se ingreso debido a que tiene raices imaginarias

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: tutorial de matlab
« Respuesta #25 en: 18 de Septiembre de 2015, 17:48:21 »

EDIT: Por que dividirlo por la longitud.... ahi se trato el tema

http://www.mathworks.com/matlabcentral/newsreader/view_thread/267952

ja, todas las respuestas en un solo post, el porque multiplicar por 2 tambien era una duda. Ahora me queda solo una y es que la linea comentada, la que busca la proxima potencia de 2 es importante, ya que la FFT puede correr solo con potencias de 2. O se pierden datos o se agregan 0, pero el array de entrada tiene que ser una potencia de 2 tengo entendido.

Saludos
-
Leonardo Garberoglio

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tutorial de matlab
« Respuesta #26 en: 18 de Septiembre de 2015, 18:09:37 »
De nextpow2():

Citar
You can use nextpow2 to pad the signal you pass to fft. Doing so can speed up the computation of the FFT when the signal length is not an exact power of 2.

Imagino que si no le das una potencia de 2 hara una transformada de fourier discreta., sino procedera a usar algun otro algoritmo como la FFT y termina siendo mas rapido.

Mas info:

Citar
You won't need to do zero padding, so feel free to just use your samples as-is.

MATLAB internally computes the FFT without any zero padding at all. Since your sample size is easily factorizable into small primes (10000 = 2*2*2*2*5*5*5*5), it will break down the FFT into smaller sizes. Then it will use split- and mixed- radix FFT's to build the larger 10,000 pt. FFT.

If you have a large prime factor, P, the FFT will use Rader's algorithm to sub-divide that portion of the FFT into a circular convolution of size P-1.


Y mas :

http://mechanicalvibration.com/Zero_Padding_FFTs.html
« Última modificación: 18 de Septiembre de 2015, 22:52:54 por KILLERJC »

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #27 en: 18 de Septiembre de 2015, 23:17:11 »
aqui va la  estructura del programa que factoriza en matlab
Código: [Seleccionar]
o=input('seleccione el caso');
dit=o;
switch dit
    case 1 %(trinomio cuadrado perfecto suma o resta)
       syms('x')
       
    case 2 %(trinomio cuadrado perfecto dos variables suma o resta)
        syms('x')
        syms('y')
   
       
    case 3 %(potencias a la n  suma o resta,diferencia de cuadrados)
         syms x
         syms y
       
    case 4  %(cubo perfecto de tetranomios suma o resta)
          syms x
         syms y
       
    case 5 %(trinomio de la forma x^2+bx+c y ax^2+bx+c suma o resta)
         syms x
   
   
       
    case 6 %(division sintetica suma o resta 4 terminos, triangulo de pascal 4 una variable)
         syms x
   
       
    case 7 %(division sintetica suma o resta 6 terminos)
        syms x
       
    case 8 %(division sintetica suma o resta 5 terminos, triangulo de pascal 5 una variable)
        syms x
     
       
    case 9  %(triangulo de pascal 5  terminos  dos variables)
         syms x
         syms y
     
       
    case 10 %(triangulo de pascal 6  terminos  dos variables)
         syms x
         syms y
     
       
end
ahi  esta que mas quieren almenos alguien tan bueno en matlab como chenao no tendra problemas para sacar el programa apartir de esto y killer que tiene algunas bases tambien puede y si los demas son tan autodidactas como vos decis killer les queda facil sacar el programa completo apartir de este

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #28 en: 19 de Septiembre de 2015, 00:15:59 »
hola amigos a qui les voy a enseñar la segunda forma de usar switch en matlab creando una funcion para poder llamar al programa desde otro programa y de una vez otra forma de usar switch espero les gusten estos tutoriales en matlab y les sirvan
Código: [Seleccionar]
function u=funcion(x)
n=length(x);
u=zeros(1,n);
switch funcion
    case 1
       
    case 2
     
    case 3
       
    case 4
       
    case 5
   
    case 6
       
     case 7
       
       
       
end
end
porque siete casos es un programa que discretiza funciones continuas de todas las formas posibles que son 4 y los otros 3 las pasa de discretas a continuas casos de tustin matched,zoh y otro por ahi pero eso es teoria avanzada de control y deben entender esa parte del codigo no se las puedo pasar aunque realmente son muy pocas lineas

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: tutorial de matlab
« Respuesta #29 en: 19 de Septiembre de 2015, 00:21:47 »
hola y aqui les enseñare una forma aun mas sencilla de hacer una funcion en matlab
Código: [Seleccionar]
    function p=pcd(L1,L2,th1,th2)
px=L1*cos(th1)+L2*cos(th1+th2);
py=L1*sin(th1)+L2*sin(th1+th2);
p=[px; py];
 p=pcd(L1,L2,th1,th2);
 plot(p(1,:),p(2,:))
 th1=30*pi/180;
th2=60*pi/180;
p=pcd(L1,L2,th1,th2);
robotgraph(L1,th1,p);
        end