Correlación entre dos señales en dsPIC30F

Hola.
Estamos con un amigo trabajando con el dsPIC30F4011. Necesitamos obtener el tiempo de retardo entre dos señales, que llegan a dos micrófonos ubicados en dos lugares distintos. Para eso pensamos hacer la correlación entre las dos señales y de ese modo saber cuál es el retardo entre ambas. La pregunta es: hay alguna forma eficiente de hacer la correlación en el dsPIC? o existe algun algoritmo que la calcule??. o tienen una idea mejor para hacerla que implementar la formula "textual" (suma por suma) en el dspic?
Se entendió la pregunta??
 
Hola Juani84,

Trabajo con un dspic33f y estoy usando la librería dsp.h para calcular la correlación entre dos señales. Tienen que tener en cuenta que usa tipo de dato fractional (Q15).

Mi problema es que la longitud de la señales es demasiada para la memoria que tengo, ¿¿¿saben si existe algún algoritmo de correlación por bloques???¿¿Cómo solucionaron este problema??

Saludos!
 
Hola Caprilidia.
Mirá, nosotros decidimos realizarla a partir de la definición de la correlación, o sea, para cada valor desplazamos una de las dos señales la cantidad de muestras que corresponde, multiplicamos las dos señales y luego las sumamos. Básicamente es como lo hace el Matlab.
Digamos que es medio a "lo bruto" Seguramente no sea la forma óptima de hacerlo, dado que para ello están las librerías que me mencionas. Sin embargo, en nuestro caso, funciona joya. Nosotros tenemos dos señales con 50 muestras cada una, y lo más difícil (desde el punto de vista del procesamiento) son los productos, que con la instrucción MAC se hacen en un solo ciclo (sumando el resultado obtenido al valor anterior). Las muestras son enteros sin signo, provenientes del conversor A/D.

No creo poder ayudarte con lo que buscas, ya que según veo, vos le querés sacar "más jugo" al dsPIC. Seguramente tengas más muestras, y cada ciclo que puedas ahorrarte sea más importante que en nuestro caso.
Sin embargo, si te interesa cómo lo hice, te lo explico más detalladamente. De todos modos, el programa tendrá unas 40 lineas o 50 instrucciones aprox, que no es tanto..


Saludos..
 
Hola Juani 84!!

Gracias por tu respuesta!! Mis muestras son mucho más largas,ahora estoy trabajando con 1024, y deben ser aún mayores, por eso incluso me estoy planteando aumentar la memoria del dsPIC mediante una memoria externa. De momento el uso de la librería me va bien, aunque también estoy barajando la opción de hacer el procesado en frecuencia, para ahorrar tiempo de cómputo. Me gustaría que explicaras más detalladamente, tengo curiosidad!!!!!:)

Saludos!
 
Hola caprilidia.
Perdón por la demora. Estuve medio ocupado.
Lo que hicimos para calcular la correlación fué lo siguiente:
Viste que la definición de la correlación significa realizar los productos entre las dos señales, con una desplazada y luego sumar todos los productos. Cada elemento de la correlación implica un desplazamiento distinto. Algo así como (si mal no recuerdo):

Rxy[k]=sumatoria(x[m]*y[m-k])

Bueno, lo que hacemos es desarrollar eso mismo. Primero guardamos las dos señales en las dos regiones X e Y para poder usar la instrucción MAC para multiplicar y sumar el resultado, y con dos registros vamos apuntando a la posición de memoria donde está la muestra que tenemos que multiplicar. Es registros van cambiando de valor según la muestra de la correlación que queremos calcular.
Seguro que no es lo mas eficiente, pero nos sacó de un apuro...jajaja

Saludos...
 
Atrás
Arriba