Autor Tema: Reproductor de Mp3 con dsPic  (Leído 62187 veces)

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

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Reproductor de Mp3 con dsPic
« en: 04 de Noviembre de 2006, 04:10:03 »
Voy a iniciar este nuevo tema que viene del post "Virtud de los dsPic ???????" iniciado por Automata78:

http://www.todopic.com.ar/foros/index.php?topic=14527.0

En donde se empezó a hablar de hacer un reproductor de mp3 con los DSP de Microchip. Se está planteando hacerlo con dos dsPic porque la potencia del mejor modelo no alcanza (como especificó Darukur).
Hace unos dias Darukur me comento sobre escribir "codigo segmentado", acá el enlace:

http://www.todopic.com.ar/foros/index.php?topic=14527.msg89279#msg89279

Tomamos la loca idea de usar 2 dsPic para hacer el trabajo. Esto sería como el uso de sistemas multiprocesador con el uso de memoria compartida como ser la arquitectura NUMA y COMA pero más sencillo. En otro post de este tema voy a explicar un poquito de cada una. No me acuerdo bien ahora, así que si me equivoco me pueden avisar :)

Como objetivos del proyecto se destacan:

  • Investigar el funcionamiento del codec de Mp3
  • Aprender a utilizar el compilador de Microchip C30
  • Aprender a programar en assembler para dsPic
  • Comunicar 2 dsPic mediante el uso de "Data Converter Interface" o DCI
  • Sincronizar tareas entre 2 dsPic
  • Realizar un driver para el sistema de archivo FAT16
  • Realizar una interfaz para Multimedia Card o MMC
  • ¿Utilización de un RTOS (Sistema Operativo en Tiempo Real)?¿PICos?

Dejo a continuación los interesantes enlaces que presentó Marcelo en el post mencionado más arriba:

Citar

Proyectos de MP3 http://opencircuits.com/Music_Player

Pagina de "los que saben" de MPeg
http://www.tnt.uni-hannover.de/project/mpeg/audio/#mpeg7

http://www.chiariglione.org/mpeg/standards/mpeg-1/mpeg-1.htm

Pagina con conceptos de MP3 http://www.tnt.uni-hannover.de/project/mpeg/audio/faq/mpeg1.html#1-7

Pagina de tecnologia para MP3 http://www.mp3-tech.org/

MAD player (MPEG AUDIO DECODER) http://www.underbit.com/products/mad/

La info de MADLLD  http://www.bsd-dk.dk/%7Eelrond/audio/madlld/

Al encontrar más información la subiré a este tema.

Saludos.
« Última modificación: 04 de Noviembre de 2006, 04:32:18 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Reproductor de Mp3 con dsPic
« Respuesta #1 en: 04 de Noviembre de 2006, 10:16:08 »
Listo, se empieza la carrera, en poco tiempo consigo los DSPIC.

La parte de manejo de MMC y sistema de archivo ya esta. El problema es que lo desarrolle para el RTOS Salvo para PIC18 y todavia no consegui el SALVO para DSPIC.
Lo primero a ver seria el codec de MPeg1 L3. en su version MADLLD que es mas pequeña que MAD, estuve viendo y no caso un futbol.

Saludos.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Reproductor de Mp3 con dsPic
« Respuesta #2 en: 04 de Noviembre de 2006, 10:19:33 »
La idea seria usar un DSPIC como el MASTER que contiene la parte de mas alto nivel y mientras este desarolla tareas le tira otras al otro DSPIC (EL SLAVE)  de mas bajo nivel, que debe resolver en tiempo y forma para que haya exito.
La idea seria procesar ciertos "layers" en un DSPIC y otros en el otro pero dichos layers no estan totalmente separados en capas como dicen.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Reproductor de Mp3 con dsPic
« Respuesta #3 en: 04 de Noviembre de 2006, 11:38:09 »
Confirmadisimo Zaphyrus:
A menos que lo esten overclockeando, los DSPIC30 rinden 30 MIPS maximo y los DSPIC33 40 MIPS.
Voy a pedir DSPIC33, si sobra (cosa que no creo) despues se usara los de 30 MIPS.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #4 en: 04 de Noviembre de 2006, 13:19:01 »
Buenisimo, hay que ver el dinerillo que nos van a salir los dsPic33 :)
Con respecto al sistema operativo ¿no sería mejor usar uno libre como el PICOS? De pasada aprendemos a usarlos bien y no te olvides que el PICOS cumple con las normas de la inductria automotriz alemana/francesa OSEK/VDX que nos puede beneficiar para un proyecto futuro. Además que no estas pendiente de las desiciones de una empresa con respecto a un producto (si soy defensor del software libre :))

Voy a buscar info sobre la arquitectura de memoria compartida para sistemas multiprocesador y luego la posteo.

Saludos.

Martín
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Reproductor de Mp3 con dsPic
« Respuesta #5 en: 04 de Noviembre de 2006, 22:39:17 »
Si te entiendo , tambien podriamos ver el FreeRTOS.
EL asunto es la comodidad de tener el manejador de archivos ya hecho, je  :)
En fin si no se puede deberemos rehacerlo para otro RTOS, por ahi en modo preemptivo y nos consume menos memoria. :-/ :mrgreen: :-/
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4299
Re: Reproductor de Mp3 con dsPic
« Respuesta #6 en: 05 de Noviembre de 2006, 05:40:38 »
Hola Zaphyrus, como aporte solo podría hagregar que en ves de usar el sistema de archivos FAT16 (que ya hace unos cuantos años a pasado a ser obsoleto) usaras el actual y mucho más util FAT32.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #7 en: 05 de Noviembre de 2006, 11:10:11 »
Hola Charly29, comenté el FAT16 porque Darukur ya lo tiene andando pero si lo debemos implementar de nuevo por cambio de RTOS seguro que vamos a pensar en hacerlo FAT32. Es lo mejor como decis porque si vamos a hacer algo complicado es mejor que lo hagamos completo  :)

Darukur no creo que cueste portarlo a otro RTOS, de última en las primeras etapas tomamos un PIC18 con una MMC y lo usamos tipo módulo como si fuera una disquetera y más adelante vemos portarlo al dsPIC.
Con respecto a los RTOS es atrayente hacerlo en forma preemtiva, acá dejo algunos comentarios sobre los sistemas operativos:

  • FreeRTOS: Este RTOS tiene la virtud de ser muy portable y quizás esa sea también su debilidad ya que puede que no este tan optimizado y consuma más recursos. Estuve mirando el código fuente y a comparación del PICos creo que es más grande y está menos organizado ya que tiene 3 super archivos *.c. Parece que este RTOS tiene muchas más funcionalidades. El port para los dsPIC está en este enlace
  • PICos: Este RTOS tiene la virtud de ser muy especializado para las arquitecturas PIC18, PIC24, PIC30 y PIC33 pero tiene un problema que seguro que no te va a gustar. Al parecer no tiene los IPC (Inter-Process Communication) o comunicación entre-procesos, es decir que no implementa manejadores de mensajes entre tareas (enlace de la información) ya que este servicio está definido en otra capa de la especificación OSEK. Pero si nos vamos a meter en un proyecto complicado que cuesta definir algunas especificaciones de esa capa como semáforos, colas, etc. Podemos usar el libro del uOCS II para hacerlo (yo lo leí dos veces :))

Bueno hay que tomar una decisión pero la debemos pensar bien.

Me estoy entusiasmando :-/

Saludos.

Martín
« Última modificación: 17 de Noviembre de 2006, 00:17:33 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #8 en: 05 de Noviembre de 2006, 11:46:15 »
Como prometí antes voy a hablar un poco de los métodos para compartir memorias en los sistemas con multiprocesadores.
Hay 3 métodos:

  • Memoria compartida físicamente: Este tipo de memoria es compartida por todos los microprocesadores que forman el sistema. Los datos se almacenan en esta memoria en donde cualquiera de los procesadores puede tener acceso. Tiene el problema que no se escala bien porque al aumentar el número de procesadores la memoria compartida se convierte en un cuello de botella. Este problema se puede remediar hasta cierto punto con los caché de los procesadores pero aparece problema de coherencia de la memoria caché ya que si un procesador cambia el valor de un dato en su caché lo debería hacer en la memoria compartida y en los caché de los otros procesadores que lo esten utilizando. Esto se resuelve con un espía de memoria caché
  • Memoria compartida lógicamente o NUMA: Para resolver los problemas del cuello de botella de las memorias compartidas físicamente, se ha diseñado las máquinas con memoria lógicamente compartida y físicamente distribuida. En lugar de tener un memoria compartida físicamente, la memoria se divide y distribuye entre los procesadores. Toda la memoria se sigue direccionando con un mismo conjunto de direcciones y es el hardware que se ocupa de manejarla
  • Memoria distribuida o NORMA: En este caso todo acceso a la memoria de un procesador debe realizarse a través del procesador. Es decir que si se desea acceder a la memoria de otro procesador, el procesador que lo quiere hacer debe interactuar con el procesador remoto

En este caso con 2 dsPIC vamos a tener la memoria distribuida o NORMA pero se puede hacer también con el sistema MASTER-SLAVE como dijo Darukur.

Saludos.

Martín
« Última modificación: 05 de Noviembre de 2006, 11:47:53 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #9 en: 05 de Noviembre de 2006, 12:36:19 »
Darukur, estuve mirando la página de Microchip y cuando pidas los PIC30 PDIP fijate que algun tenga DCI para este proyecto. el único que me convence es el dsPIC30F4013 que tiene DCI con 2K de RAM y es el más grande siendo PDIP.
Con respecto a los PIC33 también tené en cuenta eso, además tenemos un problema porque el encapsulado es TQFP y sabés los problemas que tuve con la PCB del proyecto que estoy haciendo. Pero no importa pedí algunos para este proyecto ya veremos como lo arreglamos.

¿Que hacemos con el DAC, miramos el que usaron en el MintyMP3?

¿Alguien sabe si hay algún dsPIC con USB? Si no hay se podría usar un 18F2550 para el manejo de la MMC y de pasada usar la conexión USB para bajar los Mp3 a la tarjeta.

Saludos.

Martín
« Última modificación: 05 de Noviembre de 2006, 12:59:21 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #10 en: 05 de Noviembre de 2006, 13:14:28 »
Estoy leyendo un poco de la información sobre MP3 y no encuentro nada de matemáticas ni algoritmos, lo único que encuentro son referencias a patentes. Habrá que estudiar el código fuente de MAD porque las MADLLD hasta donde pude ver es un código de demostración de como usar las MAD.

Saludos.

Martín
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #11 en: 05 de Noviembre de 2006, 13:36:08 »
Ohhh mama, esto va estar complicadito. Estuve leyendo un poco del código de MADLLD y de MAD y se pone dificil la cosa. También en:

http://www.mp3-tech.org/programmer/decoding.html

hay más código fuente de programas y en:

http://www.mp3-tech.org/programmer/docs/index.php

hay algunos paper que me voy a poner a leer ahora.

Tengo una preocupación, ¿nos alcanzará la RAM de los dsPIC para usarlas de buffer o vamos a tener que hacer algunos trucos?

Saludos.

Martín

« Última modificación: 17 de Noviembre de 2006, 00:20:04 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #12 en: 05 de Noviembre de 2006, 19:25:47 »
He estado leyendo algunos papers y el más interesante y que hacen optimizaciones en los algoritmos es este:

http://www.mp3-tech.org/programmer/docs/exjobb.pdf

Recomiendo que lo lea el que este interesado en el tema, está muy bien explicado y muestra los pasos que se deben seguir para la decodificación de Mp3.

También hacen una tabla del uso de la memoria de datos (RAM) y no quiero desilusionar a nadie pero después de todas las optimizaciones que hicieron utilizaron 6029 words (no bytes!!!) (pag. 48). Así que viendo los dsPIC él único que nos serviría 2 dsPIC30F6012A con 8192 bytes que incluye DCI pero mirando mejor los dsPIC33 está el dsPIC33FJ128GP306 que tiene 16384 byte de datos y tiene un rendimiento de 40 MIPS (este me gusta lástima que sea TQFP64 :?).

Lo bueno es que el decodificador trabaja con arrays y el funcionamiento es tipo pipeline. Por lo tanto se puede usar 2 dsPIC para hacer distintas tareas. Como buena noticia es que en el peor de los casos la potencia necesaria es de 20 MIPS (con punto flotante) siendo el archivo MP3 joint stereo a 48Khz y un bitrate de 320kbits/s, y quizás es posible realizarlo con un dsPIC pero tenemos la falencia de la memoria de datos.

Voy a leer algo más y luego voy  hacer un post con los pasos a seguir en la decodificación.

Saludos.

Martín
« Última modificación: 17 de Noviembre de 2006, 00:21:12 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Reproductor de Mp3 con dsPic
« Respuesta #13 en: 05 de Noviembre de 2006, 21:53:39 »
El algoritmo Huffman es el utilizado en la codificación y decodificación en MP3. Como no tengo idea todavía de como se genera no voy a hablar al respecto.
A continuación pongo los pasos del proceso de decodificación de los frames(traducción del documento que puse antes):

  • Find and Read Header: La primer tarea del decodificador es localizar la palabra de sincronización que marca de un frame valido de audio MPEG.
    La palabra de sincronización es parte del header que contiene información acerca del número de layer, la velocidad de muestreo y el canal de configuración. Esta configuración no puede ser cambiada durente la duración entera del  bit stream.
    El header también contiene información acerca del bit rate que le dice al decodificador que tan grande es el frame y cuando esperar la próxima palabra de configuración y el próximo header
  • Read side information: La información que es necesaria por el decodificador, aparte de los datos que serán transformado en valores de muestra, es llamada side information.
    Hay un bloque side information por cada canal en cada granule (gránulo). Esta información contiene parametros de decodificación y decuantización (dequantization)
  • Read scale factors: El espectro de frecuencias es dividido en bandas de factores de escala. Estas bandas son determinadas por la velocidad de muestreo y corresponden aproximadamente a las bandas críticas del oido humano.
    Por cada banda de factor de escala, hay un factor de escala que será usado luego para controlar la ganancia durante la decuantización de la muestra
  • Read samples: Los 576 valores de muestra codificados con Huffman en la codificación son ahoras leidos y decodificados usando las tablas de Huffman indicadas por side information. El codificador puede usar varias tablas de Huffman sobre diferentes regiones de la muestra. Las varias tablas Huffman tienen diferentes rangos de números y/o asignación de bit
  • Dequantize samples: En este paso, las muestras provenientes del bitstream son decuantizadas (dequantized) y escaladas a sus valores apropiados usando los factores de escala y el valor de ganacia del gránulo. Los valores de muestra son elevados a la potencia de 4/3 durante el proceso de decuantificación
  • Reorder samples: Las muestras de los bloques que tienen una configuración de ventana de tiempo corto (bloques cortos generados en la codificación) deben ser ahora reordenados para ser procesados en los siguientes pasos
  • Alias cancellation: La decodificación aplica la canelación de alias a los bloques que usan la configuración de ventana de tiempo largo (para grandes bloques generados en la codificación) para compensar la superposición de frecuencias del banco de filtros de subbandas
  • IMDCT: Cada subanda es ahora transformada nuevamente en el dominio del tiempo. Para grandes bloques un IMDCT de 36 puntos calcula las 36 muestras de salidas directamente. Para bloques cortos la salida de 3 IMDCT de 12 puntos son conbinadas dentro de 36  muestras de salida.
    Las primeras 18 muestras de salida son sumadas con los valores superpuestos almacenados del gránulo previo. Estos valores son los nuevos valores de salida.
    Los últimos 18 valores de salida son almacenados para superponerse con el próximo gránulo
  • Frequency inversion: Cada segunda muestra en cada segunda subbanda es multiplicada por -1 para corregir la inversión de frecuencia del banco de filtro de subbanda
  • Subband synthesize: Finalmente las 32 subandas son combinadas en muestras en el dominio del tiempo que cubren todo el espectro de frecuencias. Una muestra es tomada de cada subbanda y trasnformada usando una transformada similar a DCT. El resultado es escrito en la parte inferior de un gran array después que se ha hecho lugar desplazando el contenido previo hacia índices más altos. Las muestras PCM son luego calculadas haciendo la media de una operación en una ventana del array
  • Output PCM

Puff bueno este es el algoritmo en general de la decodificación de Mp3. Si les interesa la codificación pueden leer el documento que recomendé la última vez, esto es una parte de ese paper y está incompleto.

Quiero comentar también que todas las transformadas usan cosenos y el valor Pi. Hay que ver como se lleva todo esto de punto flotante a punto fijo, por suerte está este paper que habla de ello:

http://www.mp3-tech.org/programmer/docs/thesis_lai.pdf

Bueno voy a seguir de a poco con la investigación. Espero que les haya servido.

Saludos.

Martín
« Última modificación: 05 de Noviembre de 2006, 22:43:36 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Reproductor de Mp3 con dsPic
« Respuesta #14 en: 06 de Noviembre de 2006, 08:18:11 »
Muy buena la info Zaphyrus, como comente, viste que los layer son totalmente dependientes?

El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/


 

anything