Autor Tema: Analizador de espectro de audio.  (Leído 4757 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Analizador de espectro de audio.
« en: 13 de Octubre de 2009, 08:34:38 »
He encontrado en esta pagina: http://www.circuitcellar.com/microchip2007/winners/DE/MT1750.html un analizador de espectro de audio, me gustaria entender como funcionan las funciones del C30 para la FFT, y este creo que es un buen ejemplo.

Hace poco que estoy con el C30, y la primera duda con el codigo son estas definiciones:

Código: [Seleccionar]
fractcomplex inputSignal[NUMSAMP]                                     /* The inputSignal is defined */
__attribute__ ((section (".ydata, data, ymemory"),                         /* as a complex array containing samples */
aligned (NUMSAMP * 2 *2 )));                                            /* of the real input signal. */
                                         
fractcomplex twiddleFactors[NUMSAMP/2]                                       /* Declare Twiddle Factor coefficients array in X-space*/
__attribute__ ((section (".xbss, bss, xmemory"),aligned (NUMSAMP*2)));         /* Twiddle Factors are needed for the FFT computation  */ 

// Contains a normalized to 0.5  Hamming window
fractional HammingFactors[NUMSAMP*2] __attribute__ ((section (".xbss, bss, xmemory"), aligned (NUMSAMP*2)));

// Contains the discrete spectral-Power of the input signal
fractional Power_Vector[NUMSAMP] __attribute__ ((section (".xbss, bss, xmemory"), aligned (NUMSAMP)));

volatile fractcomplex * p_inputSignal = &inputSignal[0] ;   // Points to the inputSignal

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Analizador de espectro de audio.
« Respuesta #1 en: 13 de Octubre de 2009, 13:08:53 »
Vamos a empezar por esto:

Código: [Seleccionar]
fractcomplex inputSignal[NUMSAMP]                                     /* The inputSignal is defined */
__attribute__ ((section (".ydata, data, ymemory"),                         /* as a complex array containing samples */
aligned (NUMSAMP * 2 *2 )));                                            /* of the real input signal. */

Me imagino que fractcomplex es un tipo de dato definido, inputSignal es una variable, pero el resto no entiendo para que sirve. En el manual del C30 viene algo, pero no me aclaro.

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Analizador de espectro de audio.
« Respuesta #2 en: 14 de Octubre de 2009, 06:54:50 »
Bueno, con un traductor he avanzado un poco mas, __attribute__ da atributos a una variable.

aligned reserva memoria, pero si inputsignal es un vector, al poner (NUMSAMP * 2 *2 ) ¿Que reserva, un vector de tamaño NUMSAMP * 2 *2 ?

Lo que sigo sin entender es para que sirve section (".ydata, data, ymemory")

Saludos.
« Última modificación: 14 de Octubre de 2009, 07:01:14 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Analizador de espectro de audio.
« Respuesta #3 en: 15 de Octubre de 2009, 17:12:27 »
Hace tiempo estuve pensando en simplifacarlo un poco y convertirlo a un analizador de 10 canales únicamente.
Llegué a hacer que compilara, para lo que tuve que cambiar un par de lineas, ya que la versión de C30 que tenía era algo más nueva que la que utilizó el autor. Ahí quedó la cosa por falta de tiempo.

Lo que cambié fue:

Código: [Seleccionar]
///////////////////////////////////////////////////////////////////////////////
/*                     Variables-definitions                                 */
///////////////////////////////////////////////////////////////////////////////
fractcomplex inputSignal[NUMSAMP] /* The inputSignal is defined */
__attribute__ ((space(ymemory),far,aligned(NUMSAMP * 2 *2))); /* as a complex array containing samples */
//aligned (NUMSAMP * 2 *2 )));              /* of the real input signal. */

fractcomplex twiddleFactors[NUMSAMP/2]                  /* Declare Twiddle Factor coefficients array in X-space*/
__attribute__ ((space(xmemory),far,aligned(NUMSAMP * 2)));      /* Twiddle Factors are needed for the FFT computation  */ 

Como ves cambia precisamete lo que estás preguntando. No llegué a saber por qué, pero así hice que por lo menos compilara.
Me alegro que hayas empezado con el tema, a ver si qasí me animo a retomarlo yo tambien.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Analizador de espectro de audio.
« Respuesta #4 en: 15 de Octubre de 2009, 17:37:59 »
Es cierto que no compila, pero yo pense que era porque la funcion SquareMagnitudeCplx no esta definida en ningun lado, y en el Languaje Tools no aparece tampoco.

Probare con esos cambios.

Un saludo.
« Última modificación: 16 de Octubre de 2009, 07:50:48 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Analizador de espectro de audio.
« Respuesta #5 en: 15 de Octubre de 2009, 19:51:11 »
Perdon que me meta, no uso MicroChip, pero basicamente las palabras reservadas __attribute__, align,yspace son palabras reservadas del compilador, attribute como bien dijieron permite modificar aspectos de una variable, align no reserva memoria sino lo que hace es definir un comienzo de la misma, se usa mucho en arquitecturas donde el direccionamiento es mas eficiente cuando las address son pares ( ejemplo los 68XXX ) e yspace me parece que se refiere a algun banco de los DSPIC, seguramente por performance. Pego un link donde hablan mas de esto:

http://www.reproductormp3.net/bricoreproductormp3/contruye-tu-propio-reproductor-de-mp3-hilo-para-postear/5/?wap2

Saludos !

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Analizador de espectro de audio.
« Respuesta #6 en: 16 de Octubre de 2009, 07:56:56 »
Pues seguramente sea asi RICHI777. Por lo que veo se trata de hacer que los datos pasen por buses de datos distintos para hacer operaciones mas rapido.

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Analizador de espectro de audio.
« Respuesta #7 en: 19 de Octubre de 2009, 10:55:10 »
Pues resulta que le mande un correo al autor del proyecto, y me ha contestado diciendo que haga los siguientes cambios:

Código: [Seleccionar]
This error message is due to the compiler version you use. Probably, you are using the most recent version of the compiler (student version)
which uses a slightly different format for the "attribute" parameters than my version. You can solve the problem by removing the ".ydata"
keyword from the definition of the  fractcomplex inputSignal[NUMSAMP] variable in ADC.c and Audio Spectrum.c files.

Código: [Seleccionar]
You can also include the auto_psv statement in the _ADCInterrupt()  definition as follows (in order to avoid the warning message):        
void __attribute__((__interrupt__,auto_psv )) _ADCInterrupt(void)

Y este cambio lo hice yo, en el ADC.c:
Código: [Seleccionar]
volatile extern unsigned int SamplesReadyFlag;

Sigue sin compilar, pero si se elimina de la cabecera el #include "ADC.c" del programa principal, si compila. Entonces seria cuestion de diseñar la funcion que captura los datos, o tratar de resolver los errores.

Estos son los errores que aparecen:

Código: [Seleccionar]
Executing: "D:\Archivos de programa\microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F6012A "ADC.o" "Audio Spectrum.o" -o"AudioSpectrum.cof" -Wl,-L"C:\Program Files\Microchip\MPLAB C30\lib",--script="linkerscript.gld",--defsym=__MPLAB_BUILD=1,-Map="AudioSpectrum.map",--report-mem
Audio Spectrum.o(.text+0x0): In function `ADC_Init':
E:\juanjo\Code #MT1750\Audio Spectrum.c:45: multiple definition of `ADC_Init'
ADC.o(.text+0x0):E:\juanjo\Code #MT1750\ADC.c:45: first defined here
Audio Spectrum.o(.text+0x68): In function `_ADCInterrupt':
E:\juanjo\Code #MT1750\Audio Spectrum.c:118: multiple definition of `_ADCInterrupt'
ADC.o(.text+0x68):E:\juanjo\Code #MT1750\ADC.c:118: first defined here
Audio Spectrum.o(.nbss+0xa8):E:\juanjo\Code #MT1750\Audio Spectrum.c: multiple definition of `adcPtr'
ADC.o(.nbss+0x0):E:\juanjo\Code #MT1750\ADC.c: first defined here
d:\archivos de programa\microchip\mplab c30\bin\bin\pic30-coff-ld.exe: Link terminated due to previous error(s).
Link step failed.

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Analizador de espectro de audio.
« Respuesta #8 en: 21 de Octubre de 2009, 18:46:08 »
Aqui os dejo el proyecto compilado, a parte de los cambios que comente he nombrado el ADC.c como .h

Si alguien se atreve a montarlo que cuente los resultados, mi idea es aprender sore la FFT, y darle alguna otra aplicacion.

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡