• Sábado 16 de Noviembre de 2024, 23:32

Autor Tema:  Adaptar Variables A La Función Del Filtro  (Leído 5308 veces)

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Adaptar Variables A La Función Del Filtro
« en: Jueves 10 de Marzo de 2005, 14:34 »
0
Hola gente!! :P


Creo que sé porqué al llamar a la función
FIR_FIR150_5500be.filter(arrayEntrada, arraySalida, 1, &FIR_FIR150_5500be);
el programa no funcióna..

Las variables arrayEntrada y arraySalida son de tipo float , y txBuf y rxBuf son de tipo int.

Entonces he intentado buscar información y me he encontrado con esta tabla adjunta, que relaciona fractional con integer...

Yo me pregunto si float=fractional...


Gracias!! :hola:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #1 en: Jueves 10 de Marzo de 2005, 16:12 »
0
Hola,  :hola:

fractional es distinto a float aunque la longitud en bits puede ser la misma. El float es de 32 bits y se representa según el formato IEEE 754 (1 bit para signo, 8 bits de exponente y el resto para la mantisa).  El fractional de C30 es de 16 bits de los cuales uno de ellos es para signo al igual que los de la tabla que adjuntas, y permite representar los valores que ves en dicha tabla. Tal vez te preguntes qué sentido tiene representar valores comprendidos entre +1 y casi -1, pues en el caso de los dsPIC es, por ejemplo, para optimizar las funciones trigonométricas puesto que su resultado está comprendido entre esos valores y de esta forma se obtiene una buena resolución sin penalizar el tiempo de ejecución.

Ten en cuenta que los tipos de datos no son los mismos para ANSI C que para el C del dsPIC que estás utilizando (por ejemplo un int en ANSI C es de 32 bits mientras que en el C30 el int es de 16 bits).

Si quieres saber más sobre tipos de datos de C30 te recomiendo que consultes
MPLAB® C30 User’s Guide en la cual te vienen definidos los tipos de datos y otras muchas cosas más sobre C para dsPIC.

Un saludo.  :)

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #2 en: Viernes 11 de Marzo de 2005, 12:33 »
0
gracias, pero...
MPLAB C30


/* CORCON: CPU Mode control Register */
extern volatile unsigned int CORCON __attribute__((__near__));
typedef struct tagCORCONBITS {
unsigned IF :1; /* Integer/Fractional mode */
unsigned RND :1; /* Rounding mode */
unsigned PSV :1; /* Program Space Visibility enable */
unsigned IPL3 :1;
unsigned ACCSAT :1; /* Acc saturation mode */
unsigned SATDW :1; /* Data space write saturation enable */
unsigned SATB :1; /* Acc B saturation enable */
unsigned SATA :1; /* Acc A saturation enable */
unsigned DL :3; /* DO loop nesting level status */
unsigned :4;
} CORCONBITS;
extern volatile CORCONBITS CORCONbits __attribute__((__near__));

Has utilizado alguna vez la funcion
FIR_FIR150_5500be.filter(arrayEntrada, arraySalida, num samples, &FIR_FIR150_5500be);

Los arrays tienen que ser  float, pero el txBuf y rxBuf son de 16 bits!!
Si float es de 32 ?
meter información de 16 bits en un array de 32 bale, pero cómo meto info de 32 bits en 16 sin perder información?

gracias!!

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #3 en: Sábado 12 de Marzo de 2005, 00:14 »
0
Hola  :hola:

no conozco esa función porque no es de las librerías que suministra el fabricante en C, o si lo es yo no la tengo. En las funciones que conozco sobre llamadas a filtros, los datos de los arrays de entrada y salida no son float (32 bits IEEE 754) sino fractional (16 bits) y los datos arrayEntrada y arraySalida en realidad son punteros (en C30 son de 16 bits) a fractional que si son de 16 bit al igual que TXBUFx y RXBUFx. La longitud en bits de los punteros y la longitud en bits de los datos a los que apuntan no tienen porque ser iguales.

No se si te has colado pero no entiendo  :blink: a que viene lo siguente...

Bixix Escrito el 11/03/2005, 12:33 PM
Citar
/* CORCON: CPU Mode control Register */
extern volatile unsigned int CORCON __attribute__((__near__));
typedef struct tagCORCONBITS {
unsigned IF :1; /* Integer/Fractional mode */
unsigned RND ]

De todos modos si me pasas el prototipo de la función FIR_FIR150_5500be tal vez puedo ser más concreto y decirte algo más sobre los tipos de datos de dicha función.

Un saludo.  :)

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #4 en: Sábado 12 de Marzo de 2005, 00:24 »
0
Pensándolo mejor  <_< , lo de CORCON debe de ser por el bit IF; pues no tiene nada que ver con el tipo de dato que se declara sino con el modo de operación de la DSP (en concreto en la multiplicación). Si es '1' se opera con enteros y si es '0'  con fraccionales.

Espero que te lo aclare. Saludos. :D

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #5 en: Lunes 14 de Marzo de 2005, 15:31 »
0
Gracias una vez mas platy!!! ;)

Te agradecería que me facilitaras la información de llamadas a filtros, de funciones de filtros que conozcas.
Los filtros que yo genero, los genero con dsPICfdLite, oseaque tengo el código, pero no se cómo llamarlo.. no sabría facilitarte el prototipo...


Sobre lo de IF, corconbits está definido en el .gld.... es ahí donde tengo que cambiarle el valor?


Gracias  :hola:

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #6 en: Martes 15 de Marzo de 2005, 16:56 »
0
He encontrado un ejemplo de implementación de un filtro!!


Os dejo la dirección por si a alguien le interesa..

http://forum.microchip.com/tm.asp?m=44506&...y=&anchor#82210

Yo he hecho la prueba en el development board y funciona..

 :rolleyes: Pero aprovecho también para hacer una pregunta sobre este ejemplo..

He intentado cambiar las caracteristicas del filtro metiendo un nuevo .s.

esto es un nuevo código de un nuevo filtro creado en mi caso por el programa dsPIC FD Lite pero no he conseguido que funcione.. :(

si alquien me pudiese ayudar.. :)
gracias!!! :lol:



Lo conseguí!! :kicking:
error que estaba cometiendo(por si a alguien le interesa....)
Estaba llamando
FIR(FILTER_BLOCK_LENGTH, &FiltOut[0], &SigIn[0], &Low_pass);
en vez de
FIR(FILTER_BLOCK_LENGTH, &FiltOut[0], &SigIn[0], &Low_passFilter);
De todas formas... gracias! :smartass:

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Adaptar Variables A La Función Del Filtro
« Respuesta #7 en: Miércoles 16 de Marzo de 2005, 19:18 »
0
Hola Bixix :hola:

respecto a tu penúltimo post de esta discusión, aquí tienes la información sobre funciones de filtros que he utilizado:

dsPIC™ Language Tools Libraries

en concreto el capítulo 2.6 FILTERING FUNCTIONS contiene información sobre funciones de filtros. Si te lees este capítulo creo que después sabrás como realizar las llamadas a los filtros que te creas.

El bit IF es el que determina el modo de operación de la DSP así que si quieres variar el modo de operación sí, es IF el que tienes que cambiar.

Un saludo.  :)