codigo para codificar una señal

Hola! Como todos saben que en una comunicacion digital siempre viene bien una buena codificacion, pues estoy intentando hacer una codificacion con una matriz generadora G, viene siendo un generador sistematico: (I | P), I: matriz de identidad, P: el generador de redundancias. Lo que pasa es que el arduino no trabaja con matrices como el matlab, tuve que hacerlo con vectores. Cuando lo tenga hecho lo pondre en el foro. Si alguien se anima en hacerlo mejor todavia ;). Mas que nada, quiero probar con un sistema de Tx y Rx de audio por infrarrojo(en banda-base), ya que probé con el sistema analogico me dio resultado pero no tan bueno(mucho ruido a partir de 3 metros de distancia). Y supongo que con codificacion lineal, podria dar mejores prestaciones...

Bueno, aqui os dejo un ejemplo para codificar una señal de 8 bits. es una codificacion linea de (8/10), entra 8 bits y sale 10 bits. Aunque se puede modificar a otra tasa:

int LmensajeCodificado=10;

byte G[10]={// la matriz Generadora [I | P], I la matriz identidad, y P la matriz que genera redundancias /cada byte es una de las columnas de la matriz G/
B10000000,B01000000,B00100000,B00010000,B00001000,B00000100,B00000010,B00000001,B10001001,B01001001};

byte mascara[8]={
B10000000,B01000000,B00100000,B00010000,B00001000,B00000100,B00000010,B00000001};

byte mensaje=B10001111;// el mensaje a transmitir (un ejemplo)

void setup(){
Serial.begin(9600);
}

void loop(){
int m_codificado1;
int m_codificado2;
for (int bit=0; bit<=LmensajeCodificado; bit++){
m_codificado1=codificar(mensaje,bit);// hacer la operacion de multiplicar una fila(el mensaje) por una columna de la matriz G

m_codificado2=m_codificado1 | m_codificado2;// 10000000 OR
// 01000000 =
// 11000000
}
Serial.println(mensaje,BIN);
Serial.println(m_codificado2,BIN);
delay(1000);
}

// devuelve el resultado de multiplicar una fila(int mensaje) por una columna(int bit de la G)
int codificar(byte mensaje,int bit){
int Mnsj;
mensaje=mensaje & G[bit];// hacer la operacion multiplicar la fila de M por la columna de la matriz G
Mnsj=par_impar(mensaje);// obtener si el peso hamming es par(=0) o impar(=1) → suma de los elementos del mensaje
Mnsj=Mnsj<<(LmensajeCodificado-1-bit);// colocar el valor de bit en el bit correspondiente
return Mnsj;
}

int par_impar(int mensaje){
int i;
int contadorDEunos=0;
for(i=0; i<=7; i++){
if ((mensaje & mascara*)!=0)*

  • contadorDEunos++;*
  • }*
  • return (contadorDEunos % 2);*
    }[/size]

Hola,

no tendras mas funciones de trabajo de numeros en 16bits? Aunque Arduino no trabaje con procesadores de coma flotante es aun bastante potente como para hacer muchas operaciones y lo mismo podria ser interesante hacer una coleccion de funciones que hagan este tipo de operaciones.

/d

Te refieres a codificar una senhal (estoy en italia, el teclado italiano no hay la eGNe , o la eNHe) de 16 bits? si, si que se puede hacer, en vez de usar BYTE en la mascara usa INT... hare unas pruebas. saludos