codificador / decodificador 4b / 5b

-1

todos

Estoy trabajando en un bloque de transceptor como parte de un proyecto final para la escuela. Parte del proyecto consiste en desarrollar un codificador 4b / 5b.

La documentación indica que tengo que "Diseñar un esquema de codificación 4B-5B que garantice a lo sumo 3 0 o 1 consecutivos para cualquier secuencia de datos de entrada".

He encontrado la siguiente solución, que ahora creo que puede estar equivocada.

#   4B   5B
0  0000 00100
1  0001 00101
2  0010 00010
3  0011 00011
4  0100 01100
5  0101 01101
6  0110 01010
7  0111 01011
8  1000 10100
9  1001 10101
10 1010 10010
11 1011 10011
12 1100 11100
13 1101 11101
14 1110 11010
15 1111 11011

Creo que puede estar mal porque codificar dos ceros consecutivos (0b0000 0000 - > 0b00100 00100) daría como resultado cuatro ceros binarios consecutivos. La solución que tengo tiene este problema, sin embargo, todos los demás sistemas 4B / 5B que he visto en Internet también tienen este problema.

¿Hay alguna forma de crear un sistema 4B / 5B que limite la cantidad de ceros consecutivos o de tres a lo sumo a tres, o la documentación es simplemente errónea?

Gracias de antemano!

    
pregunta sam

2 respuestas

4

La tarea que has emprendido es imposible. No hay un código disponible sin código 4b / 5b que satisfaga las condiciones que has establecido aquí.

Para probar esto, considere el conjunto de todas las 32 posibles palabras en código 5b, numeradas del 0 al 31 en el orden binario normal. De estos, 6 son completamente inutilizables:

 0: 00000 - contains 5 consecutive 0s
 1: 00001 - contains 4 consecutive 0s
15: 01111 - contains 4 consecutive 1s
16: 10000 - contains 4 consecutive 0s
30: 11110 - contains 4 consecutive 1s
31: 11111 - contains 5 consecutive 1s

Ya que hubo exactamente 16 palabras de código que comienzan con 0 y 16 que comienzan con 1, y hemos eliminado algunas de cada una de las anteriores, ahora sabemos que debemos terminar usando algunas palabras de código que comiencen con cada una de 0 y 1. ( Es decir, no podemos usar un conjunto de palabras de código que comiencen con el mismo bit.) Como resultado, las siguientes palabras de código son también inutilizables, ya que las siguen con una palabra de código que comienza en 0 o 1 resultará en una ejecución inaceptable:

 7: 00111 + 1… is four 1s
 8: 01000 + 0… is four 0s
23: 10111 + 1… is four 1s
24: 11000 + 0… is four 0s

La misma lógica se aplica en la otra dirección, por lo que también se pueden descartar las siguientes palabras de código:

 2: …0 + 00010 is four 0s
 3: …0 + 00011 is four 0s
28: …1 + 11100 is four 1s
29: …1 + 11101 is four 1s

Los dos siguientes también se pueden descartar porque repetir cualquiera de los dos resultaría en una ejecución inaceptable:

 4: 00100 + 00100 is four 0s
27: 11011 + 11011 is four 1s

Esto nos deja con exactamente 16 palabras de código, y hay un número de pares inaceptables dentro de ellas, por ejemplo,

 20 + 5: 10100 + 00101 is four 0s
11 + 26: 01011 + 11010 is four 1s

Hay varias formas posibles de reducir el número de palabras de código para obtener un conjunto aceptable, ¡pero nos hemos quedado sin palabras de código para trabajar! Cualquier otra reducción nos pondría por debajo de 16, y necesitamos muchos para codificar cuatro bits.

    
respondido por el duskwuff
0

Tal vez haya una solución general para tu proyecto aquí.

No hay una solución para palabras de código de 5 bits de longitud que no dé lugar a una pérdida de información como demostró duskwuff. Siempre que sean 5 bits, todas las palabras en clave de 4 bits son posibles y no se permite la pérdida de información, entonces creo que hay un problema con la documentación. Si no existen al menos seis palabras de código 4b o si está bien usar palabras de código de hasta 5 bits, entonces existe una solución. Por supuesto, también se puede crear fácilmente una solución donde se pierde información.

En algunos casos, en los protocolos de comunicación no desea una secuencia determinada o varias secuencias porque están reservadas como caracteres de control. Por ejemplo, si 0000 o 1111 son caracteres de control, entonces podrían usarse junto con las palabras de 2b a 5b para codificar cualquier secuencia de cuatro bits sin pérdida de información. 0000 podría ser un final del mensaje y 1111 podría ser un escape, y en este caso podría usar las 32 5b palabras.

    
respondido por el Jason

Lea otras preguntas en las etiquetas