2009-08-05 12 views
5

Imagine que tiene un canal de comunicación que es con pérdida intrínseca y unidireccional. Es decir, hay un ruido inherente que es imposible de eliminar que causa, por ejemplo, bits aleatorios que se deben activar. También imagine que es una forma: no puede solicitar la retransmisión.¿Qué técnicas puede usar para codificar datos en un canal unidireccional con pérdida?

Pero debe enviar datos sobre ella independientemente. ¿Qué técnicas puede utilizar para enviar números y de texto sobre ese canal?

  1. ¿Es posible codificar números de modo que incluso con poco aleatorio haciendo girar los que todavía se puede interpretar como valores cercanos al original (con pérdida transmittion)?

  2. ¿Hay alguna manera de enviar una cadena de caracteres (ASCII, por ejemplo) en una forma sin pérdidas?

Esto es solo por diversión. Sé que puedes usar el código Morse o cualquier comunicación binaria de muy baja frecuencia. Sé sobre bits de paridad y sumas de comprobación para detectar errores y volver a intentar. Sé que también podrías usar una señal analógica. Solo tengo curiosidad por saber si hay alguna técnica interesante de informática para enviar este material a través de un canal con pérdida.

Respuesta

9

Dependiendo de algunos detalles que usted no proporcione acerca de su canal con pérdidas, recomendaría, primero usar un Gray code para asegurar que los errores de un solo bit produzcan pequeñas diferencias (para cubrir su deseo de mitigar pérdidas en la transmisión con pérdidas) y, posiblemente, también la codificación de la secuencia resultante con algunos "sin pérdida" (== intenta para ser menos pérdida ;-) codificación.

Reed-Solomon y sus variantes son particularmente bueno si sus episodios de ruido son propensos a ocurrir en pequeñas ráfagas (varios errores de bits dentro de, digamos, un solo byte), que debe interoperar bien con codificación Gray (puesto que los errores de bits múltiples son la asesinos para el aspecto de "atenuación de pérdidas" de Gray, diseñado para degradarse con gracia por errores de un solo bit en el cable). Esto se debe a que R-S es intrínsecamente un esquema de bloques, y los errores múltiples dentro de un bloque son básicamente los mismos que un solo error, desde el punto de vista de R-S ;-).

RS es particularmente asombroso si muchos de los errores son erasures - para decirlo simplemente, un borrado es un símbolo que probablemente ha sido dañado en la transmisión, PERO para el que SÍ se sabe el hecho crucial que ha sido destrozado . La capa física, dependiendo de cómo esté diseñada, a menudo puede tener indicios sobre ese hecho, y si hay una manera de informar a las capas superiores, eso puede ser de ayuda crucial. Permítanme explicar las borraduras un poco ...:

Digamos para un ejemplo simplificado que un 0 se envía como un nivel de -1 voltios y un 1 se envía como un nivel de +1 voltios (wrt alguna onda de referencia), pero hay ruido (el ruido físico a menudo puede estar bien modelado, pregúntele a cualquier ingeniero de comunicación competente ;-); dependiendo del modelo de ruido, la descodificación podría ser que cualquier valor de -0.7 V y hacia abajo se considera 0 bit, cualquier valor de +0.7 V se considera de 1 bit, cualquier elemento intermedio se considera borrado, es decir, se dice que la capa superior que el bit en cuestión probablemente se haya roto en la transmisión y, por lo tanto, no se tenga en cuenta. (A veces doy esto como un ejemplo de mi tesis de que a veces las abstracciones DEBEN "filtrarse" - de una manera controlada y estructurada: el corolario de Martelli a Law of Leaky Abstractions de Spolsky! -).

Un código RS con cualquier proporción de redundancia puede ser dos veces más efectivo para corregir borraduras (errores del decodificador), como puede ser para corregir errores desconocidos, también es posible mezclar ambos aspectos, corrigiendo tanto algunos borrados Y algunos errores desconocidos.

Como cereza en la parte superior, los códigos RS personalizados pueden (razonablemente fácilmente) diseñarse y adaptarse para reducir la probabilidad de errores no corregidos por debajo de cualquier umbral requerido θ dado un modelo preciso de las características del canal físico en términos de borrados y errores no detectados (incluyendo tanto la probabilidad como el estallido).

No llamaría a esta área entera una "computadora-sciency", de hecho: cuando me gradué (MSEE, hace 30 años), estaba tratando de evitar cosas "CS" a favor del diseño de chips, diseño del sistema, sistemas de radio avanzados, & c - sin embargo, me enseñaron estas cosas (bueno, el subconjunto que ya estaba dentro del ámbito del uso práctico de la ingeniería ;-) bastante bien.

Y, solo para confirmar que las cosas no han cambiado tanto en una generación: mi hija acaba de obtener su maestría en ingeniería de telecomunicaciones (centrándose estrictamente en sistemas de radio avanzados) - no puede diseñar cualquier tipo de serio programa, algoritmo o estructura de datos (aunque lo hizo muy bien en los cursos obligatorios en C y Java, no hubo absolutamente ninguna profundidad de CS en esos cursos, ni en ningún otro lugar de su currículum; su lenguaje de trabajo diario es matlab ... ! -) - sin embargo, ella sabe más acerca de la información y la teoría de codificación que yo alguna vez aprendí, y eso es antes de cualquier estudio de doctorado (se está quedando para su doctorado, pero eso aún no ha comenzado).

Por lo tanto, afirmo que estos campos son más EE-y que CS-y (aunque por supuesto los límites son borrosos, soy testigo de que después de unos años diseñando chips terminé como SW más o menos por accidente, y también muchos de mis contemporáneos ;-).

+0

Estoy totalmente de acuerdo. R-S es lo que la NASA utiliza para la comunicación satelital a la Tierra, y cuando incluso la velocidad de la luz presenta varias horas de retraso, los protocolos como TCP/IP no funcionarán porque no se pueden guardar más de 12 horas de transmisiones en el satélite. No habrá una respuesta de "sciency de computadora" porque se trata de un problema de codificación y corrección de errores (que se mencionó en matemáticas discretas). Los CD y DVD utilizan varias capas de corrección de errores para corregir arañazos (u otras "borraduras"), y esta es una comunicación "de una sola dirección" porque su reproductor de CD no puede llamar a la compañía discográfica para buscar nuevos bits. – Tangurena

+0

@jug, muy buenos puntos, gracias! Entonces, los códigos grises no ayudan con la degradación elegante y (si GD es importante) uno debería ir por las grandes armas de codificaciones específicas de dominio como las mostradas por Mohr et al en http://eprints.kfupm.edu.sa/ 43182/1/43182.pdf. –

+0

La teoría de codificación se enseña bastante en los grados CS más orientados a la creación de redes (muchos de ellos le permiten especializarse en un departamento u otro). Tomé algunos cursos sobre este tema en el curso de un viejo grado CS normal. – wds

1

Vea también el Sliding Window Protocol (que es utilizado por TCP).

Aunque esto incluye tratar paquetes reordenados o perdidos por completo, que no formaban parte de la definición de su problema.

3

Probablemente uno de los métodos más conocidos es usar Hamming code. Puede que no sea la mejor manera de corregir errores en grandes escalas, pero es increíblemente simple de entender.

4

Esta pregunta es el tema de coding theory.

+2

Y para ser precisos, se trata de FEC: Corrección de errores hacia adelante. – MSalters

2

Turbo Codes o Low-density parity-checking codes para obtener datos generales, ya que estos se acercan más a acercarse al límite de Shannon - ver wikipedia.

+1

Si el ruido es casi aleatorio, los Códigos Turbo y LDPC lo acercan arbitrariamente al límite de Shannon. Si tiene un poco de poder de procesamiento y no conoce las características estadísticas de ruido, no hay necesidad de buscar más. – ima

0

Me gustaría ir a algunas de estas sugerencias, seguidas de múltiples envíos de los mismos datos. De esta forma, puede esperar que se introduzcan diferentes errores en diferentes puntos de la transmisión, y es posible que pueda inferir el número deseado mucho más fácilmente.

1

Como dice Alex Martelli, hay mucha teoría de la codificación en el mundo, pero los códigos Reed-Solomon son definitivamente un punto ideal. Si realmente desea construir algo, Jim Plank ha escrito nice tutorial on Reed-Solomon coding. Plank tiene un interés profesional en la codificación con mucha experiencia práctica para respaldarlo.

Cuestiones relacionadas