sesion - Matlab a C o C++
matlab usuario (7)
Bueno, no hay una conversión directa de matlab a c / c ++. Deberá comprender el lenguaje y las diferencias entre matlab y c / c ++ y luego comenzar a codificarlo en c / c ++. Codifique un poco la prueba un poco hasta que funcione.
Estoy trabajando en un proyecto de procesamiento de imágenes usando Matlab. Deberíamos ejecutar nuestro programa (destinado a ser una aplicación) en un teléfono celular. Luego, se nos pidió que convirtiéramos nuestro código en lenguaje C o C ++, de modo que tengamos una idea de cuánto demoraría la ejecución y luego elegir una plataforma. Hasta ahora no hemos descubierto cómo hacer esta conversión ... ¿Alguna idea de qué hacer para convertir Matlab a C o C ++?
Lo primero que debe tener en cuenta es que la transferencia de código de un idioma a otro (especialmente idiomas tan diferentes como Matlab y C ++) generalmente no es trivial y requiere mucho tiempo. Debe conocer bien los dos idiomas y necesita tener instalaciones similares disponibles en ambos . En el caso de Matlab y C ++, Matlab le brinda muchas cosas que simplemente no tendrá disponibles en C ++ sin usar bibliotecas. Entonces, lo primero que debe hacer es identificar qué bibliotecas necesitará utilizar en C ++. (Puedes escribir algunas de las cosas por ti mismo, pero estarás allí mucho tiempo si lo escribes todo por ti mismo).
Si está procesando imágenes, le recomiendo que busque algo como ITK en http://www.itk.org : he escrito mi software de procesamiento de imágenes dos veces en C ++, una vez sin ITK (codificando todo yo mismo) y una vez con, y la versión que usó ITK se terminó más rápido, funcionó mejor y fue diez veces más divertido trabajar en él. FWIW.
MathWorks proporciona un producto llamado MATLAB Coder que afirma generar "código C y C ++ legible y portátil a partir del código MATLAB®". No lo he intentado yo mismo, así que no puedo comentar qué tan bien logra estos objetivos.
Con respecto a la Caja de herramientas de procesamiento de imágenes , esta lista (presumiblemente para R2016b) muestra qué funciones se han habilitado para la generación de código y cualquier limitación que puedan tener.
Matlab puede administrar el código C para usted.
Consulte: http://www.mathworks.com/products/featured/embeddedmatlab/
Sin embargo, el código generado depende de las bibliotecas matlab. Así que probablemente no puedas usarlo para un teléfono celular. Pero podría ahorrarle algo de tiempo de todos modos.
Matlab tiene una herramienta llamada "Matlab Coder" que puede convertir su archivo matlab a código C o mex. Mi código es relativamente simple, así que funciona bien. Acelerar la ganancia es aproximadamente 10 veces más rápido. Esto me ahorra tiempo en la codificación de unos pocos cientos de líneas. Espero que sea útil para ti también
Guía de inicio rápido para la confirmación del codificador de MATLAB
Los enlaces describen el proceso de conversión de su código en 3 pasos principales:
Primero necesita hacer algunas simplificaciones en su código actual para que sea lo suficientemente simple para que el codificador lo traduzca.
Segundo, usarás la herramienta para generar un archivo mex y probar si todo está funcionando realmente.
Finalmente deberías cambiar alguna configuración y generar el código C. En mi caso, el código C tiene aproximadamente 700 líneas, incluido todo el código matlab original (aproximadamente 150 líneas) como comentarios. Creo que es bastante legible y podría mejorarse. Sin embargo, de todas formas ya tengo una ganancia 10 veces mayor de aceleración del archivo mex. Así que esto es definitivamente algo bueno.
No podemos estar seguros de que esto funcionará en todos los casos, pero definitivamente vale la pena intentarlo.
Recuerdo que hay una herramienta para exportar archivos m como c (++) - archivos. Pero nunca pude conseguir eso corriendo. Debe agregar algunos encabezados de MATLAB oscuros en el código c / c ++, ... Y creo que tampoco es recomendable.
Si está ejecutando el código MATLAB, no debería tomar demasiado esfuerzo para hacer la conversión "a mano". He estado trabajando en varios proyectos en los que se utilizó MATLAB y nunca se consideró utilizar ninguna herramienta para convertir el código a C / C ++. Siempre se hacía "a mano".
Creo que fue el único que investigó el uso de una herramienta.
También utilicé el codificador de MATLAB para convertir algunas funciones que consisten en unos pocos cientos de líneas de MATLAB en C. Esto incluye el uso de las funciones de resolución de matrices y resolución de valores propios de MATLAB.
Aunque Coder pudo producir el código C (que teóricamente era idéntico), era muy complicado, inflado, imposible de descifrar, y parecía ser extremadamente ineficiente. Literalmente, creó aproximadamente 10x tantas líneas de código como debería haber necesitado. Terminé convirtiéndolo todo a mano para poder comprender el código C más tarde y realizar más cambios / actualizaciones. Sin embargo, esta tarea puede ser muy tediosa / peligrosa, ya que la indexación de matrices en Matlab está basada en 1 y en C está basada en 0. Es probable que agregue errores en el código, como lo experimenté. También deberá convertir cualquier aritmética de vector / matriz en bucles que manejen escalas (o use algún tipo de paquete de álgebra de matriz C)