Generación de números aleatorios con distribución sesgada

1

Me gustaría implementar un circuito completamente digital que pueda generar una variable aleatoria X con P (1) = p, P (0) = 1-p (donde, idealmente, la probabilidad p sería configurable con un parámetro programable).

Un LFSR es útil para la generación de números pseudoaleatorios y para obtener una variable aleatoria en la que las probabilidades de estar en 0 o 1 son (casi) iguales: esto no es lo que estoy buscando.

Las ideas en las que estaba pensando:

  • Podría 'Y' los resultados de varios LFSR, pero dado que en mi aplicación p a menudo será de < 0.1, el número de LFSR necesarios no será práctico.
  • También podría intentar agregar un comparador y comparar el contenido del LFSR con un umbral configurable para obtener la probabilidad p. Pero dado que un LFSR "cambia" su contenido, ¿no serían los resultados sucesivos del comparador demasiado similares o predecibles? No estoy familiarizado con estos conceptos, por lo que no estoy seguro.

Necesito que los valores sucesivos de la variable aleatoria generada sean lo más independientes posible, pero no es un problema si el patrón de valores sucesivos es cíclico a muy largo plazo (como para cualquier salida de LFSR). Gracias de antemano por cualquier mejora de las ideas anteriores o cualquier idea totalmente diferente que pueda resolver mi problema.

EDITAR - Un microcontrolador está fuera del alcance de esta pregunta por dos razones:

  • Esta implementación apunta a un ASIC
  • Tengo recursos limitados y es posible que tenga que crear una instancia de este circuito un par de veces, un µC es simplemente un exceso de ingresos
  • esto tiene que ser una generación de números aleatorios de alta velocidad (un µC requeriría varios ciclos de reloj)
pregunta C_Computing

2 respuestas

2

No es necesario XOR muchos LSFR para obtener algo que se ve mucho más aleatorio (menos shifty) que un solo LSFR. Otras técnicas para mejorar la salida de los LSFR son almacenar en caché la salida en una pequeña RAM de 2 puertos, leyendo y luego reemplazando un bit aleatorio cada vez, esa dirección aleatoria dada por otro LSFR de diferente longitud.

Teniendo en cuenta varias transmisiones cortas basadas en LSFR, podría construir un número multibit cada ciclo de reloj que ingresa en su comparador contra \ $ p \ $, asegurándose de que al menos unos pocos MSB provengan de las mejores fuentes.

Nada de esto te llevará a niveles criptográficos de bondad aleatoria, pero mitigará contra las deficiencias más obvias de la LSFR.

    
respondido por el Neil_UK
1

Distribución superpuesta

Tiene dos generadores distribuidos normalmente (o un & canalización) pero con diferente densidad de probabilidad & más importante significa diferente.

Si el generador 2ns tiene una densidad más baja pero una media ligeramente más positiva, el sesgo general tendrá un sesgo negativo

La suma de las dos fuentes proporcionará una distribución sesgada

    
respondido por el JonRB

Lea otras preguntas en las etiquetas