Skip to content

Sincronizacion para el SDR#14

Open
AguTrachta wants to merge 9 commits into
developfrom
feat/timing-synchronization
Open

Sincronizacion para el SDR#14
AguTrachta wants to merge 9 commits into
developfrom
feat/timing-synchronization

Conversation

@AguTrachta

@AguTrachta AguTrachta commented Oct 17, 2025

Copy link
Copy Markdown
Owner

Se ha adoptado el algoritmo de Schmidl & Cox, un estándar de la industria para la sincronización en OFDM, debido a su robustez y simplicidad computacional.

A. El Preámbulo de Sincronización (Transmisor)

La clave del método es un símbolo de entrenamiento especial, o preámbulo, que se antepone a cada trama de datos.

  • Estructura: Se ha creado la función synchronization.generate_schmidl_cox_preamble(). Esta genera un símbolo OFDM en el dominio del tiempo con una propiedad matemática única: su primera mitad es idéntica a su segunda mitad ([A, A]). Esto se logra transmitiendo una secuencia pseudoaleatoria solo en las subportadoras de índice par.
  • Construcción de Trama: La nueva función transmisor.build_full_frame() ahora construye una trama realista [PREÁMBULO_CON_CP, CARGA_ÚTIL_DE_DATOS], que es la estructura que se enviará al SDR.
B. Detección y Estimación (Receptor)

Se ha creado el módulo synchronization.py que contiene la lógica del receptor para encontrar este patrón.

  • Estimación de Tiempo:

    • Mecanismo: El receptor utiliza una correlación cruzada deslizante para buscar la estructura repetida [A, A] en la señal recibida.
    • Métrica M(d): Se implementó la métrica de sincronización M(d) = |P(d)|² / R(d)², donde P(d) mide la correlación entre las dos mitades de una ventana de análisis y R(d) mide la energía total.
    • Detección: Cuando la ventana se alinea con el preámbulo, M(d) produce un pico agudo y claro cercano a 1. La posición de este pico (best_offset) nos da la estimación del inicio del símbolo.
  • Estimación de Frecuencia (CFO):

    • Mecanismo: El algoritmo reutiliza de forma elegante el cálculo de la correlación. El desfase de frecuencia Δf causa un giro de fase φ entre la primera y la segunda mitad del preámbulo.
    • Estimación: Este ángulo φ es directamente el ángulo del número complejo P(d) calculado en el punto de máxima correlación. La estimación del CFO se obtiene con la fórmula Δf̂ = angle(P(d)) / (π ⋅ T).

3. Integración y Demostración: El "Laboratorio de Sincronización"

Para validar esta nueva funcionalidad, se ha añadido un nuevo bloque de demostración al notebook.

  • Simulación Realista: Este bloque simula un escenario de SDR:

    1. Crea una trama completa con preámbulo.
    2. Le añade un CFO artificial.
    3. La inserta en medio de un bloque de ruido de fondo (simulando el "silencio" entre paquetes).
    4. Pasa la señal completa por el canal (awgn o multitap).
  • Visualización de Resultados: El bloque genera dos gráficos clave:

    1. Métrica de Sincronización vs. Tiempo: Muestra el valor de M(d) a lo largo de la señal, permitiendo visualizar el pico agudo que el algoritmo detecta.
    2. Señal Recibida vs. Tiempo: Muestra la magnitud de la señal y superpone la estimación del inicio del paquete (Pico detectado) con la posición real (Ground Truth), demostrando visualmente la precisión del algoritmo.

Tambien acomode las notebooks, separe el codigo del teorico para que sea mas sencilla la lectura.

@AguTrachta AguTrachta requested a review from matterod October 17, 2025 00:56
@AguTrachta AguTrachta self-assigned this Oct 17, 2025
@AguTrachta

Copy link
Copy Markdown
Owner Author

TODO: falta dividir la trama de simbolos en paquetes y cada uno con su preambulo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant