Refactor: Implementa simulación de Monte Carlo adaptativa (min_tandas…#16
Open
matterod wants to merge 1 commit into
Open
Refactor: Implementa simulación de Monte Carlo adaptativa (min_tandas…#16matterod wants to merge 1 commit into
matterod wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refactor: Implementa simulación de Monte Carlo adaptativa (min_tandas y min_errors)
Descripción
Este PR refactoriza por completo la lógica de la simulación de Monte Carlo (
run_montecarlo_simulation) para asegurar que los resultados de BER sean estadísticamente robustos y eficientes en todo el rango de Eb/N0.El cambio principal es la introducción de un parámetro
min_tandasque trabaja en conjunto conmin_errorspara crear una simulación adaptativa.1. El Problema: Por qué
min_errorsno era suficienteEl método anterior usaba una sola condición de parada:
while (total_errores < min_errors). Esto presentaba un problema fundamental en la zona de Eb/N0 bajo (BER alto, ej. 0-5 dB):Problema: En esta zona, los errores son muy comunes. La simulación alcanzaba
min_errors(ej: 1500) demasiado rápido, a veces en una sola tanda (iteración).Por qué es malo: Un resultado de BER basado en 1 o 2 tandas no es un promedio; es una anécdota. Depende enteramente de la "suerte" (aleatoriedad) de esa única tanda, resultando en un gráfico "ruidoso" o con picos.
2. La Solución: Lógica Adaptativa con
min_tandasSe introduce un nuevo parámetro,
min_tandas, y la lógica del buclewhilese actualiza a:Esta lógica es adaptativa y usa el parámetro de control correcto para cada zona del gráfico:
En Eb/N0 bajos (BER Alto):
total_erroresse alcanza rápido. Peromin_tandasfuerza al bucle a seguir, garantizando un promedio sobre un mínimo de tandas (ej: 500). El jefe aquí esmin_tandas.En Eb/N0 altos (BER Bajo):
min_tandasse alcanza rápido. Perototal_errores(ej: 300) es difícil de alcanzar. El bucle sigue corriendo hasta lograr la confianza estadística. El jefe aquí esmin_errors.3. ¿Por qué encontrar "X" errores (
min_errors) da Confiabilidad?La confiabilidad se basa en la estabilidad del numerador.
Analogía del Dado: No es lo mismo medir la probabilidad de un evento raro (ej. sacar "triple 6") tirando 100 veces y obteniendo 1 o 2 éxitos (un resultado "ruidoso"), que tirar hasta obtener 300 éxitos.
Al fijar
min_errors = 300, estamos fijando el numerador de nuestra fórmulaBER = Errores / Total_Bits.8 / N_bitsvs9 / N_bitses muy inestable (una diferencia del 12.5%).300 / N_bitsvs301 / N_bitses extremadamente estable (una diferencia del 0.3%).Forzar 300 errores nos obliga a simular el
Total_Bits(denominador) necesario para que esa medición sea consistente y confiable.4. Impacto de los Nuevos Parámetros del Sistema (Tandas Chicas)
Adicionalmente, se modificaron los parámetros en
params.py(K_TOTAL,N,N_sym) para reducir el tamaño de cada "tanda" a 126 bits (antes 144,000).Impacto: Como cada tanda es ~1000 veces más pequeña, los valores de simulación debieron re-balancearse drásticamente.
Valores sugeridos:
min_errors = 300: Un buen balance entre confianza y tiempo.min_tandas = 500: Asegura un promedio de 500 × 126 = 63,000 bits en la zona de BER alto.max_bits = 10_000_000: Un "freno de seguridad" para evitar que la simulación tarde eternamente en puntos de BER muy bajo.5. ¿Cómo probarlo y a qué me tengo que aproximar?
El objetivo no es que la curva verde (medida) toque la roja (teórica). El "gap" entre ellas es la penalización real del canal y el ecualizador.
El objetivo es que la curva verde (medida) sea precisa y suave.
Cómo probar:
Observa la izquierda del gráfico (0-7 dB): ¿La curva es "suave" o tiene picos?
min_tandas(ej. de 500 a 1000).Observa la derecha del gráfico (8-10 dB): ¿La curva se "aplana" o se corta abruptamente?
min_errors(ej. de 300 a 1000).min_errors, la simulación se corta pormax_bits, también deberás aumentarmax_bits(ej. de 10M a 20M).Resultado
El resultado de este PR es una simulación que genera un gráfico de BER robusto, confiable y publicable, como el que se obtuvo en las pruebas.