ES2948435T3 - Selección de posiciones de pivote para códigos de redes lineales - Google Patents

Selección de posiciones de pivote para códigos de redes lineales Download PDF

Info

Publication number
ES2948435T3
ES2948435T3 ES20196854T ES20196854T ES2948435T3 ES 2948435 T3 ES2948435 T3 ES 2948435T3 ES 20196854 T ES20196854 T ES 20196854T ES 20196854 T ES20196854 T ES 20196854T ES 2948435 T3 ES2948435 T3 ES 2948435T3
Authority
ES
Spain
Prior art keywords
pivot
candidate
positions
sequence
round
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES20196854T
Other languages
English (en)
Inventor
Jeppe Pihl
Pedersen Morten Videbæk
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Steinwurf Aps
Original Assignee
Steinwurf Aps
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Steinwurf Aps filed Critical Steinwurf Aps
Application granted granted Critical
Publication of ES2948435T3 publication Critical patent/ES2948435T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0057Block codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0076Distributed coding, e.g. network coding, involving channel coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Communication Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

Un método para codificar datos comprende elegir una secuencia de posiciones candidatas de pivote para una secuencia de g vectores de codificación para codificar un bloque de g símbolos de datos en una ronda de paquetes codificados: proporcionando un conjunto de g posiciones candidatas de pivote; elegir una posición candidata de pivote para la secuencia del conjunto de posiciones candidatas de pivote; eliminar la posición candidata de pivote elegida del conjunto de posiciones candidatas de pivote; y repetir hasta que el conjunto de posiciones candidatas de pivote esté vacío y la secuencia de posiciones candidatas de pivote elegidas para la ronda sea no lineal. Se genera un conjunto de vectores de codificación basándose en la secuencia elegida de posiciones candidatas de pivote, comprendiendo cada vector de codificación coeficientes con valor cero para las posiciones dentro del vector de codificación antes de la posición candidata de pivote para el vector de codificación y un coeficiente con valor distinto de cero para al menos el posición del candidato pivote. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Selección de posiciones de pivote para códigos de redes lineales
Campo
La presente invención se refiere a un método para codificar datos.
Antecedentes
Un Código de Corrección de Borrado (ECC) es una herramienta útil cuando se construyen sistemas de comunicación por aire eficientes y escalables. El principio básico es (1) en un codificador producir un flujo de paquetes codificados a partir de un bloque de datos de origen y (2) en un decodificador recopilar los paquetes codificados para reconstruir el bloque original de datos de origen.
La Figura 1 muestra la arquitectura básica de un sistema basado en ECC. Un escenario común es tener un solo codificador 10 que transmita paquetes codificados a un solo decodificador 20. Sin embargo, en muchas aplicaciones prácticas (p. ej., multidifusión) un solo codificador 10 también puede transmitir, simultáneamente, a muchos decodificadores 20-1, 20-2...20-m ya sea por los mismos, o diferentes, canales (por cable, inalámbricos, etc.) 30-1, 30-2,30-p de comunicación. Alternativamente, también pueden utilizarse varios codificadores 10-1, 10-2, 10-n, siempre y cuando operen sobre el mismo bloque de datos de origen.
En la práctica, un archivo o flujo puede dividirse en múltiples bloques. Un bloque consta de g símbolos de origen, cada uno de m bytes de tamaño, donde g se denomina tamaño del bloque y donde el bloque contiene g m bytes. Si se utilizan múltiples bloques, pueden tener diferentes tamaños. Además, dentro de un bloque también pueden utilizarse símbolos de origen de tamaño desigual, en cuyo caso pueden utilizarse técnicas de relleno con ceros, o similares, durante la codificación y decodificación.
Un desafío en los sistemas basados en ECC es cuando el bloque de datos de origen crece (p. ej., miles de símbolos de origen), ya que esto da como resultado una alta complejidad computacional en el codificador y el decodificador.
Este problema suele abordarse de dos maneras:
1. Dividir el bloque de datos de origen en múltiples bloques más pequeños y más manejables. Sin embargo, esta solución a menudo introduce ineficiencias en el sistema cuando hay muchos receptores involucrados. A cada receptor le puede faltar un subconjunto diferente de los bloques y, por lo tanto, cada transmisión del remitente solo puede beneficiar a un subconjunto de los receptores.
2. Utilizar un bloque único o grande, pero estructurar la codificación para reducir la complejidad de la decodificación.
Un enfoque popular es utilizar un código disperso en el que un solo símbolo codificado es una combinación lineal de solo un conjunto muy limitado de símbolos de origen, es decir, la mayoría de los coeficientes del vector de codificación para cualquier paquete codificado dado serán ceros. Se transmitirán g símbolos de origen en g paquetes codificados en una ronda que tiene el vector de codificación que varía para cada paquete codificado de la ronda.
Si se utiliza un ECC disperso bien diseñado, la opción (2) a menudo proporciona el uso más eficiente del canal de comunicación. Además, el uso de un bloque grande simplifica el diseño general del sistema.
Con referencia a la Figura 2, para realizar la codificación de un bloque de datos, los g símbolos de origen que componen el bloque se organizan normalmente en una matriz M = [m0, m1, ..., mg-1], donde cada mi es un vector de columna.
Para producir un símbolo codificado x dado, M se multiplica con un vector v de codificación que contiene g coeficientes de codificación sobre algún campo GF finito. Una interpretación práctica es que cada símbolo codificado es una combinación de uno o más símbolos de origen y los coeficientes de codificación correspondientes, con muchos de los coeficientes siendo cero en un esquema disperso.
El proceso de producción del vector de codificación es clave para el rendimiento de la codificación de red. Algunas estrategias incluyen una fase sistemática en donde todos los g símbolos de origen se envían tal cual. Otras estrategias utilizan métodos deterministas en función de la retroalimentación, mientras que otras estrategias producen coeficientes de codificación aleatorios utilizando métodos probabilísticos.
Cada símbolo codificado y la información que representa el vector de codificación utilizado se incluyen en un paquete codificado. Tenga en cuenta que, en el paquete codificado, el vector de codificación puede estar representado por los coeficientes de codificación reales o por cualquier otra representación que permita al decodificador reconstruir el vector de codificación. Una implementación común es utilizar una semilla para un generador de números aleatorios.
El propósito del decodificador es deshacer la mezcla de símbolos de origen realizada por el codificador para recuperar los g símbolos de origen. En general, sostiene que la decodificación puede completarse después de agregar g paquetes codificados lineales independientes al decodificador. Decimos que un paquete codificado es lineal independiente si y solo si el vector de codificación recuperado del paquete codificado es linealmente independiente con respecto a cualquier vector de codificación recuperado previamente para el bloque específico. Si un paquete codificado se determina como lineal dependiente, no aporta información útil para la decodificación y puede descartarse.
En la práctica, la decodificación de una ronda de paquetes codificados a menudo se realiza disponiendo los vectores de codificación recibidos como filas en una matriz X y los símbolos codificados como filas en una matriz G. Inicialmente, antes de recibir cualquier paquete codificado, tanto la matriz X como la matriz G contendrán solo ceros. Para cada paquete codificado que llega, el decodificador realiza la eliminación de Gauss-Jordan en el vector de codificación entrante y en las filas distintas de cero de X. Todas las operaciones de fila realizadas en el vector de codificación también se realizan en el símbolo codificado con filas de la matriz G. Si el vector de codificación entrante se reduce a todo ceros, el paquete codificado es lineal dependiente y se descartará. Por el contrario, si el vector de codificación contiene coeficientes distintos de cero, el paquete codificado es lineal independiente y el vector de codificación y el símbolo codificado pueden insertarse en X y G, respectivamente.
Al insertar un vector de codificación y un símbolo codificado en el decodificador, decimos que el decodificador tiene un pivote en j si contiene una fila distinta de cero lineal independiente en la matriz X donde el coeficiente distinto de cero más a la izquierda está en el índice j. De este modo, un pivote es el coeficiente distinto de cero más a la izquierda de un vector de codificación lineal independiente. El número de pivotes en la matriz X se denomina rango del decodificador y la decodificación se completa una vez se han encontrado g pivotes.
Un paquete codificado se puede insertar directamente si no se necesitan cálculos para determinar si es lineal independiente. Este es el caso, si y solo si, el coeficiente distinto de cero más a la izquierda del vector de codificación representado en el paquete codificado no tiene el mismo índice de un pivote en el decodificador. En lo que sigue, nos referiremos al coeficiente distinto de cero más a la izquierda del vector de codificación representado en el paquete codificado antes de cualquier cálculo como el candidato a pivote, Figura 3.
Los paquetes insertables directamente tanto disminuyen la sobrecarga de codificación como minimizan la cantidad de trabajo computacional que debe realizarse al decodificar un símbolo.
Hoy en día, la mayoría de soluciones de Codificación de Red Lineal Aleatoria (RLNC) dispersas generan el vector de codificación según alguna distribución aleatoria. Esto hace la sobrecarga de codificación independiente del canal de comunicación subyacente, es decir, las soluciones realizarán lo mismo sobre un canal con, por ejemplo, 0%, 10%, o 50% de pérdida de paquetes con o sin ráfagas. Un ejemplo de este proceso se explica con más detalle en et al, "Perpetual Codes for Network Coding", de Janus Heide, 15 de septiembre de 2015 (https://arxiv.org/pdf/1509.04492.pdf). Si bien esto proporciona una complejidad computacional y una sobrecarga de codificación predecibles, desafortunadamente también tiene una proporción baja de paquetes codificados insertados directamente, incluso cuando la pérdida de paquetes es baja.
El procedimiento de Janus Heide et al, "On Code Parameters and Coding Vector Representation for Practical RLNC", Conferencia International del IEEE 2011 sobre Comunicaciones, 5-9 de junio de 2011, Kioto, Japón, páginas 1-5, discute los inconvenientes asociados con RLNC, que incluyen la complejidad de la decodificación y la sobrecarga resultante del vector de codificación. Aumentar el tamaño del campo y el tamaño de la generación presenta una compensación fundamental entre el rendimiento basado en paquetes y la sobrecarga operativa. Por un lado, disminuir la probabilidad de transmitir paquetes redundantes es beneficioso para el rendimiento y, en consecuencia, reduce la energía de transmisión. Por otro lado, la complejidad de la decodificación y la cantidad de sobrecarga de cabecera aumentan con el tamaño del campo y la duración de la generación, lo que lleva a un mayor consumo de energía.
Qureshi Jalaluddin et al, "Erasure Coding for Ultra-Lower Power Wireless Networks", Transacciones del IEEE sobre Comunicaciones y Redes Ecológicas, vol. 3, núm. 4 del IEEE, 1 de diciembre de 2019, páginas 866-875, describe un esquema de codificación concatenada paralela dispersa (SPCC), en el que la dispersión y la relación de paquetes codificados se optimizan sobre GF(2) (es decir, campo de Galois de tamaño dos) y un tamaño de campo más grande, como GF(32), para diferentes valores de k de forma que se minimice el coste energético total de la red.
Para que un decodificador determine si un candidato a pivote se puede insertar directamente, basta con comprobar si no existe ya un pivote en la misma posición (es decir, un pivote que tenga el mismo índice de un candidato a pivote) para una ronda. En lo que sigue, evaluamos la fracción de candidatos a pivote que se pueden insertar directamente utilizando las técnicas existentes.
Como referencia, consideremos el caso donde el índice candidato a pivote (es decir, la posición candidata a pivote dentro del vector de codificación) se produce aleatoriamente de manera uniforme a partir de todos los candidatos disponibles en el codificador. Este es el enfoque típico en la mayoría de los métodos ECC dispersos, como los mencionados anteriormente.
Primero miramos cuántos pivotes nos faltan en el decodificador después de recibir g paquetes codificados.
1. La probabilidad de que no se seleccione un candidato a pivote es la probabilidad de que se seleccione un candidato a pivote diferente: 1 - (1/g).
2. La probabilidad de que no se haya seleccionado un candidato a pivote después de g intentos es entonces (1 -(1/g))g.
3. La probabilidad de que se haya seleccionado un candidato a pivote es entonces 1 - (1/g))g, que tiende hacia aproximadamente el 63% a medida que g aumenta.
Esto significa que, en promedio, insertaremos directamente, aproximadamente, el 63 % de los candidatos a pivote como pivotes utilizando la estrategia uniforme aleatoria.
Otra forma de mejorar la proporción de paquetes codificados que pueden insertarse directamente en el decodificador es utilizar un enfoque sistemático, como una secuencia lineal. En la secuencia lineal, el codificador produce el índice candidato a pivote en orden a partir de 0, 1, 2 hasta g - 1 (y luego el codificador reinicia desde 0 la producción de la secuencia del índice).
Los g - 1 índices producidos se utilizan para generar cada vector de codificación para una ronda. En cada caso, el vector de codificación incluye un coeficiente distinto de cero de un campo finito en la posición del índice candidato a pivote. Los coeficientes para las posiciones del índice antes de la posición del índice candidato a pivote son cero; mientras que los coeficientes para las posiciones del índice después de la posición candidata a pivote se determinan según el esquema de codificación, pero en general estos comprenden un número limitado de coeficientes distintos de cero cuyos valores y posiciones son conocidos por el codificador y el decodificador, ya sea implícita o explícitamente.
Como ejemplo, si g = 10, la secuencia de posiciones candidatas a pivote se vería como se muestra en las rondas de la Figura 4.
Si consideramos el caso donde no tenemos pérdidas, entonces solo se necesitaría una única ronda de paquetes codificados para que todos los receptores puedan decodificar los datos y cada candidato a pivote se insertaría directamente y la sobrecarga de codificación sería cero. Además, para las pérdidas aleatorias uniformes experimentadas de ronda en ronda, ilustradas en la Figura 4, este enfoque funciona bien y, a medida que aumenta el nivel de pérdida, nos acercamos al rendimiento de la producción de candidatos uniforme aleatoria, descrita anteriormente.
Para analizar el rendimiento del enfoque de secuencia lineal, observamos cuántos pivotes nos faltan en el decodificador después de recibir g paquetes codificados.
1. Primero vemos cuántas rondas necesitamos para tener g símbolos recibidos, es decir, cuántas veces repetiremos la secuencia. Dada una pérdida p de paquete necesitamos 1/(1 - p) rondas.
2. La probabilidad de que se reciba un candidato a pivote en una de las rondas es la probabilidad de que no se pierda en todas las rondas 1 - prondas.
Desafortunadamente, esto no funciona muy bien si la pérdida de paquetes es por ráfagas o periódica. El problema fundamental es que, dado que las posiciones candidatas a pivote se seleccionan de forma lineal, tenemos una alta probabilidad de superposición. Si tenemos una superposición en el índice i, entonces es probable que i + 1 también se superpondrá y así sucesivamente.
El modelo de la Figura 5 puede utilizarse para simular pérdidas por ráfagas/periódicas. El modelo tiene un buen y un mal estado. En el buen estado se reciben paquetes de longitud de la ráfaga, seguidos de una transición aleatoria al estado bueno o malo. En el mal estado se descartan paquetes de longitud de la ráfaga seguidos de una transición aleatoria al estado bueno o malo.
Haciendo referencia a la Figura 6, puede verse que el rendimiento por utilizar una secuencia lineal fluctúa ampliamente, en particular cuando las pérdidas son muy abundantes de una ronda a otra. En ese caso, observamos un comportamiento sub-óptimo en el peor de los casos y casos en los que una estrategia de selección de posiciones candidatas a pivote uniforme aleatoria funcionaría mejor que la estrategia de secuencia lineal.
En resumen, las dos estrategias actuales "Selección de Posiciones Candidatas a Pivote Uniforme Aleatoria" y "Selección de Posiciones Candidatas a Pivote de Secuencia Lineal" presentan ambas desventajas significativas. Cuando se utiliza una estrategia uniforme aleatoria, el rendimiento sigue siendo independiente del canal subyacente (cantidad de pérdida de paquetes por ráfagas, no por ráfagas), sin embargo, solo permite, sistemáticamente, la inserción directa de aproximadamente el 63 % de los símbolos. La estrategia de secuencia lineal funciona mucho mejor cuando la pérdida de paquetes es baja y uniforme. Sin embargo, si las pérdidas son abundantes, exhibe un comportamiento fluctuante y pobre en el peor de los casos.
Compendio
Según la presente invención, se proporciona un método para codificar datos según la reivindicación 1.
En un segundo aspecto, se proporciona un programa informático producido, que comprende un código legible por ordenador almacenado en un medio legible por ordenador y que incluye instrucciones que, cuando se ejecutan en un codificador, están configuradas para realizar los pasos de la reivindicación 1.
En un tercer aspecto, se proporciona un codificador configurado para recibir un bloque de datos para transmitir a uno o más receptores y que incluye un procesador configurado para realizar los pasos de la reivindicación 1.
Las realizaciones mejoran el rendimiento de un ECC disperso aumentando el número de paquetes que contienen vectores de codificación que se pueden insertar directamente en una matriz de decodificación dentro de un decodificador.
Las realizaciones disminuyen la sobrecarga de codificación y minimizan la cantidad de trabajo computacional que se debe realizar al decodificar un símbolo codificado. Esto es especialmente útil para códigos de bloque grandes (es decir, los códigos se generan a partir de un bloque grande de símbolos).
En algunos casos, la cantidad de símbolos insertados directamente se maximiza al implementar codificación de red, por ejemplo, al implementar Codificación de Red Lineal Aleatoria (RLNC). El método presentado se implementa en el codificador y no asume nada sobre el canal de comunicación y no requiere retroalimentación del decodificador al codificador.
Las realizaciones aseguran que la selección de posiciones candidatas a pivote en el codificador sea aleatoria en comparación con cualquier ronda anterior.
Breve descripción de los dibujos
Se describirán ahora realizaciones de la invención, a modo de ejemplo, con referencia a los dibujos adjuntos, en los que:
La Figura 1 muestra una estructura de codificador decodificador convencional;
La Figura 2 ilustra una matriz de codificación convencional;
La Figura 3 ilustra un candidato a pivote en un vector de codificación;
La Figura 4 ilustra una producción de posiciones candidatas a pivote ejemplares para una secuencia lineal convencional, donde g=10 y la pérdida de paquetes es del 50%;
La Figura 5 ilustra un algoritmo para simular pérdidas por ráfagas utilizado en la evaluación de las realizaciones de la presente invención;
La Figura 6 compara resultados de enfoques convencionales para seleccionar candidatos a pivote para codificar vectores;
La Figura 7 ilustra la selección de posiciones candidatas a pivote para codificar vectores según una primera realización de la presente invención donde g=10;
La Figura 8 ilustra la permutación de ronda a ronda de las posiciones candidatas a pivote de la Figura 7 con más detalle;
La Figura 9 ilustra el rendimiento de una primera realización de la presente invención a pesar de las pérdidas por ráfagas;
La Figura 10 muestra resultados para una primera realización de la presente invención en comparación con enfoques convencionales para seleccionar candidatos a pivote para codificar vectores;
La Figura 11 muestra 5 rondas de posiciones candidatas a pivote seleccionadas según una implementación de una primera realización de la presente invención; y
Las Figuras 12 y 13 ilustran el uso de tiempo y el número de candidatos a pivote inválidos, respectivamente, para implementaciones de una primera realización de la presente invención.
Descripción de las realizaciones
En una primera realización, para proporcionar una fracción alta y estable de pivotes que se pueden insertar directamente en un decodificador, se proporciona un método en un codificador de selección de las posiciones de los candidatos a pivote para que los vectores de codificación se combinen con una matriz de g símbolos de datos en una ronda de paquetes codificados. Una vez que los vectores de codificación han sido determinados y utilizados para producir la ronda de símbolos codificados, los paquetes codificados, que incluyen información que representa el vector de codificación y los símbolos codificados, pueden transmitirse y decodificarse de una manera convencional, pero más eficiente computacionalmente.
Una implementación de la primera realización comprende:
1. Dado un bloque de datos de origen que contiene g símbolos.
2. Para generar las posiciones candidatas a pivote 0 a g - 1 para cada vector de codificación de una ronda i dada:
a. Sin repetición para la ronda i, elegir al azar una posición candidata a pivote del conjunto de posiciones candidatas a pivote 0 a g - 1.
b. Repetir desde el paso 2a hasta que se hayan elegido todas las posiciones candidatas a pivote.
3. Para cada ronda posterior, repetir el paso 2.
Como consecuencia, cada ronda dará como resultado una permutación de "secuencia aleatoria" de las posiciones candidatas a pivote disponibles. Cada permutación puede proporcionarse utilizando un algoritmo aleatorio imparcial, sin embargo, también son posibles otras distribuciones aleatorias.
Como se indicó, una posición candidata a pivote se selecciona al azar, pero sin repetición, en cada ronda, así por ejemplo, si g = 10, la secuencia de posiciones candidatas a pivote para una primera Ronda 0 podría verse como se muestra en la Figura 7.
Suponiendo que los paquetes codificados se envían en orden, en este caso, el primer paquete incluirá un candidato a pivote en la posición 8 del índice. Todos los coeficientes de codificación antes de esta posición serán cero y el valor de cualquier coeficiente de codificación después de esta posición se determina por medio del esquema de codificación. El siguiente paquete tendrá un candidato a pivote en la posición 6 del índice, con todos los coeficientes de codificación antes de esta posición siendo cero y el valor de cualquier coeficiente de codificación después de esta posición que se determina por medio del esquema de codificación y así durante el resto de la ronda.
Para garantizar que se minimicen los efectos de las pérdidas por ráfagas que afectan a múltiples rondas de transmisiones, en otra implementación de la realización descrita anteriormente, en lugar de repetir el paso 2 para múltiples rondas, la secuencia aleatoria que se determina para una primera ronda puede compensarse de ronda posterior a ronda posterior. La Figura 8 muestra cómo puede permutarse la secuencia para la Ronda 0, para producir la secuencia de la Ronda 1, compensando la secuencia de ronda a ronda y de manera similar para las rondas sucesivas por uno. Obsérvese que, en variaciones de esta implementación, pueden utilizarse diferentes valores de compensación.
El análisis de este enfoque es el mismo que para la secuencia lineal, ya que lo que determina si un candidato a pivote puede insertarse directamente durante una ronda dada es si existe un pivote en esa posición. Por lo tanto, obtenemos el mismo rendimiento que para la secuencia lineal en el sentido de que, si no se produce pérdida de paquetes, insertamos directamente todos los candidatos a pivote y no tenemos sobrecarga.
Sin embargo, si un canal experimenta pérdida de paquetes por ráfagas o periódica a lo largo de las rondas, el enfoque de "secuencia aleatoria" de esta realización disminuye la probabilidad de superposiciones frente a la repetición de una secuencia lineal y, por lo tanto, proporciona un rendimiento más estable bajo esas condiciones. Esto se muestra para la implementación de la Figura 9, donde la permutación para una ronda se compensa por uno para cada ronda posterior, pero esto también aplica si la permutación para cada ronda se elige como se define en el paso 2 anterior.
Podemos comparar directamente la fracción de pivotes que se pueden insertar directamente entre los enfoques de secuencia lineal y de secuencia uniforme aleatoria anteriores y el enfoque de "secuencia aleatoria" de esta realización, como se muestra en la Figura 10.
Como puede verse, la estrategia de "secuencia aleatoria" de la primera realización mejora el comportamiento del peor caso de la "secuencia lineal" y funciona consistentemente mejor que "uniforme aleatoria" tanto bajo modelos de pérdida periódica como de pérdida uniforme.
Una implementación del presente enfoque de secuencia aleatoria es para generar una tabla de búsqueda con una secuencia permutada aleatoria previamente calculada de posiciones candidatas a pivote, p. ej., utilizando la reproducción aleatoria de Fisher-Yates, y luego, tras cada iteración, compensar aleatoriamente la secuencia. Tenga en cuenta que, en las implementaciones de la primera realización, los candidatos a pivote que tienen las mismas posiciones no se repiten dentro de una sola ronda para mantener la propiedad de sobrecarga cero cuando no observamos pérdidas.
En la práctica, una implementación de una tabla de búsqueda funciona bien para tamaños de bloque pequeños. Sin embargo, en los casos donde el tamaño del bloque aumenta, puede que no sea práctico. Como un ejemplo, para un tamaño de bloque de 700 MB y un tamaño de símbolo de 1400 bytes, se necesita una tabla de búsqueda de 2 MB. Para algunos dispositivos integrados, la cantidad de memoria disponible es limitada, por lo que es deseable una solución alternativa que consuma menos memoria.
Una implementación alternativa con un consumo de memoria mucho menor utiliza una propiedad de los campos finitos, a saber, que un elemento primitivo de un campo finito GF(p) es un generador del campo. En otras palabras, si a es un elemento primitivo de algún campo GF(p), entonces cualquier elemento distinto de cero de ese campo puede escribirse como a' para algún entero i. Esto significa que si el número de elementos en el campo es p. Podemos generar todos los elementos distintos de cero del campo haciendo un bucle desde i = 0 hasta i = p - 1.
Veamos un ejemplo de GF(11). Este es un campo finito con 11 elementos (10 elementos distintos de cero) para el que 2 es un elemento primitivo.
El siguiente programa en Python genera una secuencia pseudoaleatoria:
# El primo elegido
prime = 11
# Dado que el cero y el primo no son parte de la secuencia generada,
# el número de posiciones pivote que podemos representar es
# number_pivot_positions
number_pivot_positions = prime - 1
# El elemento primitivo para el primo elegido
primitive_element = 2
# Nuestro valor inicial
x = primitive_element
# La compensación de ronda agregada para codificar la secuencia en cada ronda
round_offset = 0
def n ext_p ivot_ca n didate_positi on (v):
v = v * primitive_element
v = v if v <= prime else v % prime
return v
# Ejemplo 5 rondas
for_ in range(number_pivot_positions * 5):
# La siguiente posición candidata a pivote generará nuestra secuencia original
x = next_pivot_candidate_position(x)
# 1. Menos uno ya que el cero no es parte de la secuencia original
pivot_position = x - 1
# Incrementar con el contador de rondas
pivot_position = (pivot_position round_offset) % number_pivot_positions
# El elemento primitivo será el último en la secuencia
# así que cuando lo alcancemos, podemos incrementar el contador de rondas
if x == primitive_element:
round offset = 1
La salida para este método se muestra en la Figura 11.
De este ejemplo podemos derivar los componentes de un proceso general como sigue:
1. Dado un tamaño g de bloque encontrar un número primo p que satisfaga p > g.
2. Para el primo p encontrado, encontrar un elemento primitivo e.
3. Utilizar el elemento primitivo para generar una secuencia de posiciones candidatas a pivote.
4. Para cada iteración, agregar una compensación de ronda para codificar la secuencia en comparación con rondas anteriores.
5. Una vez que se alcanza el elemento primitivo, la secuencia ha realizado una iteración completa, incrementar la compensación de ronda y continuar.
Podemos estimar los requisitos de memoria de este enfoque. En el pseudocódigo anterior, almacenamos 5 valores enteros. Estos pueden ser de 8, 16, 32 o 64 bits. Esto produce un requisito de memoria máxima de 5 ■ 64 bit = 5 ■ 8 bytes = 40bytes, sustancialmente menor que el enfoque basado en tablas.
Para generar la secuencia, primero necesitamos encontrar un campo finito adecuado. Para hacer esto podemos utilizar un algoritmo de búsqueda de primos. El número de elementos en el campo finito debe ser igual a, o mayor que, el número de posibles posiciones candidatas a pivote. Al generar el campo, podemos seleccionar una posición candidata a pivote que esté fuera del rango válido. En este caso, simplemente nos saltamos esta y pasamos a la siguiente. Además, una vez que se ha elegido un primo, debe encontrarse un elemento primitivo que genere la secuencia. Actualmente no existe ningún algoritmo determinista para resolver este problema - sin embargo, en la literatura se proponen varios algoritmos basados en heurística.
Para simplificar la búsqueda, solo buscamos primos para los que 2 sea un elemento primitivo. El uso del 2 como el elemento primitivo puede generar implementaciones más rápidas, ya que sus potencias pueden calcularse utilizando cambios de bits.
La Figura 12 muestra el tiempo necesario para buscar un primo con el 2 de elemento primitivo para generar las posiciones candidatas a pivote para un número específico de símbolos de origen. Tenga en cuenta que, esta operación solo se realiza una vez.
La diferencia entre el tamaño del campo finito y el tamaño real del bloque (número de símbolos de origen) indica la cantidad de posiciones candidatas a pivote que deben omitirse al generar la secuencia, Figura 13.
Cabe señalar que la sobrecarga asociada con la búsqueda de un elemento primo y uno primitivo solo debe calcularse una vez para cada bloque de datos de origen. Además, el elemento primo y el primitivo solo los necesita el codificador. El decodificador solo utiliza candidatos a pivote reales para insertar el paquete codificado.
Finalmente, podemos comentar que si es ventajoso, también es posible construir una tabla de búsqueda de elementos primos y primitivos y así evitar su búsqueda en tiempo de ejecución.
También son posibles otras implementaciones además de las descritas anteriormente, siempre que permitan que se genere una permutación aleatoria de una secuencia de posiciones candidatas a pivote. En una segunda realización, la repetición u omisión de candidatos a pivote que tienen una posición dada dentro de una sola ronda puede ser beneficioso. Por ejemplo:
• Si se conoce que un pivote que tiene una posición dada ha sido determinado por todos los receptores, podemos omitir la posición dada del conjunto de posiciones candidatas a pivote en la próxima ronda.
• Un codificador que utiliza UEP (Protección contra Errores Desiguales) puede decidir incluir símbolos específicos con más frecuencia que otros (es decir, aumentar la probabilidad de elegir un candidato a pivote en una posición específica), para aumentar la probabilidad de decodificar un subconjunto específico de símbolos y así el conjunto de posiciones candidatas a pivote puede incluir uno o más duplicados. Esto es beneficioso si ciertas partes del contenido / fichero son más importantes que otras.
De este modo, podemos ampliar la primera realización para cubrir casos donde se utiliza un algoritmo determinista para permitir la repetición u omisión de posiciones candidatas a pivote dentro de la misma ronda como sigue:
1. Dado un bloque de datos de origen que contiene g símbolos.
2. Para generar las posiciones candidatas a pivote 0 a g - 1 para una ronda i dada:
a. Determinar el conjunto de posiciones candidatas a pivote que incluye omitir, potencialmente, posiciones candidatas a pivote para símbolos que se sabe que han sido recibidos por todos los receptores en rondas anteriores; duplicar posiciones candidatas a pivote para símbolos que son más importantes que otros; o reintroducir una posición candidata a pivote de un candidato a pivote que se sabe que se ha perdido en todos los receptores dentro de la ronda.
b. Elegir una posición candidata a pivote del conjunto de posiciones candidatas a pivote.
c. Eliminar la posición candidata a pivote elegida del conjunto de posiciones candidatas a pivote.
d. Repetir desde el paso 2a hasta que el conjunto de posiciones candidatas a pivote esté vacío.
3. Para cada ronda posterior, repetir el paso 2.
De nuevo, en el paso 2b, las posiciones de los candidatos a pivote se eligen de modo que la secuencia de posiciones candidatas a pivote para una ronda sea no lineal entre sí y de modo que la repetición de una posición candidata a pivote dentro de la ronda sea solo para retransmitir, deliberadamente, información conocida a priori como crítica, para evitar un retraso en la retransmisión en caso de pérdida; o para retransmitir un paquete codificado dentro de una ronda, si se sabe que se ha producido una pérdida para todos los receptores dentro de una ronda.
También es posible que el conjunto de posiciones candidatas a pivote cambie dinámicamente dentro de una ronda determinada. De este modo, si hay retroalimentación disponible de los receptores al remitente antes de que se complete una ronda, podemos reintroducir un candidato a pivote en la misma posición de un candidato a pivote que se sabe que se perdió en todos los receptores dentro de una ronda y retransmitir un paquete codificado en función de ese candidato a pivote codificado dentro de la ronda.
No obstante, se apreciará que las implementaciones de la presente solicitud encuentran una utilidad en particular en la distribución de información, por ejemplo, actualizaciones de software o medios a un gran número de receptores, particularmente, receptores con recursos computacionales limitados, donde no hay retroalimentación disponible.

Claims (11)

REIVINDICACIONES
1. Un método para codificar datos que comprende:
a) elegir una secuencia de posiciones candidatas a pivote para una secuencia de g vectores de codificación, para codificar un bloque de g símbolos de datos en una ronda de g paquetes codificados mediante:
i) proporcionar un conjunto de g posiciones candidatas a pivote;
ii) elegir una posición candidata a pivote para la secuencia del conjunto de posiciones candidatas a pivote; iii) eliminar la posición candidata a pivote elegida del conjunto de posiciones candidatas a pivote; y iv) repetir desde el paso ii) hasta que el conjunto de posiciones candidatas a pivote esté vacío y la secuencia de posiciones candidatas a pivote elegidas para la ronda sea no lineal;
b) generar la secuencia de g vectores de codificación en función de la secuencia elegida de posiciones candidatas a pivote, comprendiendo cada vector de codificación coeficientes de valor cero para posiciones dentro del vector de codificación antes de la posición candidata a pivote para el vector de codificación y un coeficiente de valor distinto de cero para, al menos, la posición candidata de pivote;
c) generar un conjunto de símbolos de datos codificados codificando dicho bloque de símbolos de datos con los respectivos vectores de codificación generados;
d) generar paquetes codificados, incluyendo cada uno un respectivo símbolo de datos codificados e información que representa el vector de codificación utilizado para codificar el símbolo de datos;
e) transmitir los paquetes codificados; y
f) para, al menos, una ronda posterior, permutar la secuencia de posiciones candidatas a pivote elegidas de modo que la secuencia de posiciones candidatas a pivote elegidas cambie de ronda a ronda, y luego repetir los pasos b) a e).
2. El método de la reivindicación 1, en donde dicha permutación asegura que una única posición candidata a pivote para una ronda no aparece en la misma posición en una secuencia de posiciones candidatas a pivote elegidas para una ronda sucesiva.
3. El método de la reivindicación 1, en donde dicho paso de permutación comprende compensar la secuencia de posiciones candidatas a pivote elegidas de una ronda anterior para generar la secuencia de posiciones candidatas a pivote para una ronda posterior.
4. El método de la reivindicación 1, en donde el paso ii) comprende elegir al azar una posición candidata a pivote del conjunto de posiciones candidatas a pivote.
5. El método según la reivindicación 1, en donde el esquema de codificación es disperso y sólo un subconjunto de coeficientes en posiciones posteriores de un vector de codificación que sigue a la posición candidata a pivote tiene un valor distinto de cero.
6. El método según la reivindicación 1 donde, si un símbolo de datos dado de dicho bloque de símbolos de datos es más crítico que otros símbolos de datos, el método comprende incluir una posición candidata a pivote correspondiente a una posición de dicho símbolo de datos en dicho bloque de símbolos de datos más de una vez en dicho conjunto de posiciones candidatas a pivote.
7. El método según la reivindicación 1, que comprende reducir g para rondas posteriores en respuesta a la recepción de la información de que uno o más símbolos de datos han sido recibidos por todos los receptores.
8. El método según la reivindicación 1, en donde dicho conjunto de g posiciones candidatas a pivote comprende elementos de un campo finito que tiene p>g elementos y en donde dichos pasos de elegir una posición candidata a pivote y eliminar la posición candidata a pivote elegida se realizan atravesando el campo finito en función de la generación de potencias crecientes de un elemento primitivo del campo finito.
9. El método según la reivindicación 1, que comprende además almacenar dicha secuencia de posiciones candidatas a pivote elegidas en una tabla.
10. Un producto de programa informático que comprende código legible por ordenador almacenado en un medio legible por ordenador y que incluye instrucciones que, cuando se ejecutan en un codificador, están configuradas para hacer que el codificador realice los pasos de cualquiera de las reivindicaciones 1 a 9.
11. Un codificador configurado para recibir un bloque de datos para transmitir a uno o más receptores y que incluye un procesador configurado para realizar los pasos de cualquiera de las reivindicaciones 1 a 9.
ES20196854T 2020-09-18 2020-09-18 Selección de posiciones de pivote para códigos de redes lineales Active ES2948435T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP20196854.2A EP3972133B1 (en) 2020-09-18 2020-09-18 Selection of pivot positions for linear network codes

Publications (1)

Publication Number Publication Date
ES2948435T3 true ES2948435T3 (es) 2023-09-12

Family

ID=72561628

Family Applications (1)

Application Number Title Priority Date Filing Date
ES20196854T Active ES2948435T3 (es) 2020-09-18 2020-09-18 Selección de posiciones de pivote para códigos de redes lineales

Country Status (5)

Country Link
US (1) US12047171B2 (es)
EP (1) EP3972133B1 (es)
CN (1) CN116195195A (es)
ES (1) ES2948435T3 (es)
WO (1) WO2022058063A1 (es)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8068426B2 (en) * 2008-05-29 2011-11-29 Massachusetts Institute Of Technology Feedback-based online network coding
CN101621353B (zh) * 2008-07-03 2013-08-07 华为技术有限公司 一种随机线性网络编码的方法、装置和系统
US8130776B1 (en) * 2009-08-28 2012-03-06 Massachusetts Institute Of Technology Method and apparatus providing network coding based flow control
US20130058276A1 (en) * 2011-09-07 2013-03-07 Qualcomm Incorporated Method and apparatus for signaling side information for network coding in a wireless communication network
US9209943B1 (en) * 2012-06-06 2015-12-08 Bae Systems Information And Electronic Systems Integration Inc. Control over network coding for enhanced radio transport optimization
US9883420B2 (en) * 2015-10-23 2018-01-30 Motorola Mobility, Llc Random linear network encoded data transmission from user equipment
US10713332B2 (en) * 2017-06-23 2020-07-14 University Of Dayton Hardware accelerated linear system solver
US11379558B2 (en) * 2020-05-12 2022-07-05 National Cheng Kung University System enhancement methodology via matrix multiplication efficiency speedup using sparse basis approach
US11452003B1 (en) * 2021-04-01 2022-09-20 The Chinese University Of Hong Kong Compatible packet separation for communication networks

Also Published As

Publication number Publication date
EP3972133C0 (en) 2023-06-07
EP3972133B1 (en) 2023-06-07
US12047171B2 (en) 2024-07-23
EP3972133A1 (en) 2022-03-23
CN116195195A (zh) 2023-05-30
US20230361914A1 (en) 2023-11-09
WO2022058063A1 (en) 2022-03-24

Similar Documents

Publication Publication Date Title
ES2673513T3 (es) Procedimientos que emplean códigos de FEC con inactivación permanente de símbolos para procesos de codificación y decodificación
KR101355761B1 (ko) 통신 시스템의 다중 필드 기반 코드 발생기 및 디코더
CN103354456B (zh) 发送装置、接收装置、发送方法和接收方法
JP5863200B2 (ja) フレキシブルなソースブロックのマッピングを伴う伸縮性符号を使用した符号化および復号
KR101184242B1 (ko) 순방향 오류 정정 코딩 및 스트리밍
EP1949545A2 (en) A set of irregular ldpc codes with random structure and low encoding complexity
WO2004068715A2 (en) Systems and processes for fast encoding of hamming codes
KR20060096156A (ko) 서브심볼 기반 코드를 이용한 데이터 삭제를 방지하기 위한방법
Shrivastava et al. Error detection and correction using Reed Solomon codes
ES2559867T3 (es) Corrección de errores sin retorno mejorada con intercalación a nivel de bits
ES2948435T3 (es) Selección de posiciones de pivote para códigos de redes lineales
Zhong et al. Turbo-like codes for distributed joint source-channel coding of correlated senders in multiple access channels
Chen Analysis of forward error correcting codes
JP4972128B2 (ja) 符号化・復号システム及び符号化・復号方法
Sonawane et al. Implementation of RS-CC Encoder and Decoder using MATLAB
JP5238060B2 (ja) 符号化装置及び方法及び符号化・復号化システム及び復号化方法
CN111052614B (zh) 消息处理和对应装置
Fuentes Cortez Efficent algorithms for searching burst-error-correcting cyclic and shortened cyclid codes
Kukieattikool et al. Variable‐rate staircase codes with RS component codes for optical wireless transmission
Lin et al. Application of the concatenation of reed solomon and luby transform codes in deep communications
Paul et al. ARQ protocol on Mobile Communication and Networks
Ahmed et al. Binary erasure multiple descriptions: Worst-case distortion
El-Gohary et al. Study the performance of fountain codes in wireless communication systems
JP2009049896A (ja) 通信路符号化方法及び通信路符号化システム及び階層的通信路符号化プログラム及び階層的通信路復号プログラム
Ma et al. Introduction of FECs and its Applications on Internet & Wireless Communications