¿Generación de reloj aleatorio con distribución desigual de 1 y 0?

Necesitamos un reloj pseudoaleatorio con una longitud de N, de tal manera que de cada Npulso de reloj, Mde ellos se conviertan aleatoriamente en cero ( M<<N). Lo que queremos hacer es muestrear una señal de forma aleatoria. Lo que significa que, de todos Nlos puntos de muestra (de la cuadrícula de Nyquist) necesitamos tomar Mmuestras. N-MLuego, a través de algunos procesamientos y suposiciones sobre la estructura de la señal, se recuperan otros puntos (muestras) no muestreados . Ahora estoy usando registros de desplazamiento lineal, algo como a continuación:

esquemático

simular este circuito : esquema creado con CircuitLab

Funciona bien, sin embargo, no quiero una distribución equitativa para 1 y 0, quiero decir que quiero que el 20% de los ciclos de reloj sean 1 y el 80% sean cero. Para lograr eso, realicé la ANDsalida de dos circuitos como el anterior para cambiar la probabilidad del 50 % para los 1 y los ceros al 25 % para los 1 y el 75 % para los ceros (en la figura a continuación, con diferentes semillas).

esquemático

simular este circuito

Es bueno a costa de duplicar la potencia y el área del chip :( . Estoy buscando una manera de hacer que el sistema funcione con solo 1 circuito generador de reloj aleatorio, no dos.

  • ¿Es posible mediante la implantación de alguna distribución de probabilidad de cambio de semilla inicial especial de 1 y 0 en la secuencia de salida?
  • ¿Hay algún método eficiente de área de potencia para lograr esto?

Estaba pensando en almacenar una secuencia binaria aleatoria (con una longitud de N) en una ROM y luego Andsu salida con el reloj para hacer un reloj aleatorio.

Depende de lo aleatorio que tenga que ser. Si almacenar una secuencia en una ROM no es un problema, también puede usar un LFSR para hacer una secuencia pseudoaleatoria. Un poco más de información sobre la aplicación ayudaría.
Secundo a la lfsr. busque "polinomio irreducible" y elija cuál le da las variaciones que desea
La frecuencia del reloj es de hasta 1Mhz
explique "M de ellos deberían convertirse aleatoriamente en cero" borde aleatorio, ¿qué rango de tiempo mínimo y máximo y coherente con 1MHz? ¿Fase aleatoria?
¿No sería más fácil simplemente tomar todas las muestras a la velocidad máxima del reloj y luego descartar algunas de ellas al azar?
@Dave Tweed, buena idea, pero ya lo hicimos para demostrar que el sistema funciona en general, pero como sistema del mundo real, este sistema debería ser eficiente, por lo que se debe adquirir una cantidad mínima de muestras.
Encontré la respuesta, como @Tom Carpenter y @b degnan mencionaron usando LFSR, así que modifiqué la pregunta para que sea más específica.
Realmente no puedo entender por qué esto tiene que ser eficiente. Parece que estás haciendo un experimento y tu velocidad es muy baja. ¿Estás seguro de que no estás haciendo microoptimizaciones prematuras aquí?
@pipe, porque será parte de un ADC de baja potencia, y si consume una gran potencia, el ADC ya no se llamará de baja potencia.

Respuestas (1)

Piense en el contenido del LFSR de N bits como un número entero de N bits. Este número tendrá una distribución uniforme de valores de 1 a 2 N - 1. Puede generar una densidad variable de bits de máscara comparando este número con un umbral que también varíe de 1 a 2 N - 1. La salida de este comparador es la máscara de reloj que buscas.

Este método es flexible para cambiar la distribución, por lo que cuando quiero un 17 % de 1, estableceré el umbral en 0,17*(2^N-1). Verificaré si también es eficiente en el área y la energía.
La respuesta es excelente y proporciona una distribución flexible, sin embargo, aún requiere un Comparador. Estoy investigando para averiguar si solo uso unos pocos bits del generador aleatorio de N bits y lo comparo con un umbral que puede lograr un buen rendimiento.
Sí, claro. Cualquier subconjunto de M bits del LFSR de N bits contendrá una distribución uniforme de valores de 0 a 2^M - 1. Por lo tanto, si solo necesita una parte con una resolución de 2^M en su configuración de umbral, puede usar una M -comparador de bits.