Pregunta

Tengo una pregunta sobre la codificación de un algoritmo para un DSP TMS320C64xx de Texas Instruments en MATLAB:

Tengo una implementación descuidada en funcionamiento de mi filtro en MATLAB. Mi objetivo es utilizar MATLAB Embedded Coder para convertir este algoritmo a C, que luego puedo importar a Code Composer Studio y cargarlo en el DSP.

Para hacer esto, sé que hay ciertas cosas que debo hacer con mi código MATLAB. Por ejemplo, necesito preasignar espacio para matrices para que sepa qué tamaño hacer (a menos que quiera preocuparme por datos de tamaño variable). Todo ese masaje de código MATLAB en código C'ish para que el codificador MATLAB pueda convertirlo, lo entiendo más o menos. Sin embargo, no tengo idea de cómo asegurarme de que mis tipos de datos (por ejemplo, los coeficientes de mi filtro) sean de punto fijo en lugar de punto flotante, de modo que MATLAB Embedded Coder convertirá mi código a C, que solo involucra tipos de datos de punto fijo.

Supongo que mis preguntas generales son:

1) Si el C64xx se especifica como un DSP de punto fijo de 32 bits, ¿eso significa que un compilador arrojará un error si intento utilizar el tipo de datos flotante?

2) ¿Hay alguna manera de garantizar que MATLAB Embedded Coder no cree tipos de datos flotantes?

3) ¿Necesito utilizar MATLAB Fixed Point Toolbox?

Gracias a todos, háganme saber si hay más información necesaria para responder a mi pregunta.

¿Fue útil?

Solución

  1. Puede usar tipos de datos de punto flotante pero, como señala la respuesta anterior, el DSP emulará flotantes y la ejecución será mucho más lenta. Este tipo de ejecución está bien para ciertas operaciones numéricas donde a) necesitas la precisión de los flotadores b) y / o la conversión a punto fijo suele ser un problema (por ejemplo, raíces cuadradas) o no siempre es factible, c) y / o estas operaciones no ocurren con tanta frecuencia en su programa para acaparar la mayoría de los ciclos de la CPU.

  2. Sí. Hay una casilla de verificación en el cuadro de diálogo de configuración de MATLAB Coder, en el panel Interfaz, que dice "Admite solo números enteros". Marcar esto asegurará que no obtenga ningún tipo de datos de punto flotante en el código generado. Sin embargo, primero debe asegurarse de usar solo tipos de datos enteros / de punto fijo en su código. Esta opción solo garantiza que no se generen flotantes; no genera automáticamente una versión de punto fijo o solo entero del código a partir de su código MATLAB de coma flotante.

  3. Para crear verdaderamente un código C de punto fijo, primero tendría que convertir su código MATLAB de punto flotante en uno de punto fijo. Necesitaría la Caja de herramientas de punto fijo que le permite especificar sus variables como un objeto FI y definir las reglas de operaciones de punto fijo utilizando la configuración FIMATH. Una vez que defina un tipo de datos de punto fijo de 16/32 bits para todas sus variables y operaciones, puede simularlo, analizar los resultados e iterar sobre él para ajustar su configuración y minimizar sus desbordamientos y errores de redondeo. Luego, puede generar un código C verdaderamente entero que se comportará como (o muy cerca) de su comportamiento de MATLAB de punto fijo. Cualquier diferencia que pueda ver entre su código MATLAB de punto fijo y el código C de punto fijo se debe principalmente a las introducidas por su compilador de destino.

El siguiente enlace a un seminario web grabado sobre este tema debería proporcionar una buena introducción a este proceso de uso de la Caja de herramientas de punto fijo: http://www.mathworks.com/wbnr38838

HTH.

Otros consejos

Solo puedo responder a su primera pregunta:

El C64xx es un DSP de coma fija de 32 bits, pero el compilador no se quejará si usa coma flotante.El código resultante se ejecutará bien, pero será (mucho) más lento porque se emularán las operaciones de coma flotante.

El DSP C64xx también puede hacer punto fijo de 16 bits y punto fijo mixto de 32x16 bits.Cuanto más pequeños sean los tipos de datos que utilice, más rápido se ejecutará el código resultante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top