Sincronizacion para el SDR#14
Open
AguTrachta wants to merge 9 commits into
Open
Conversation
… lectura y el seguimiento
…ente el ecualizador con el modo de sincronizacion
Owner
Author
|
TODO: falta dividir la trama de simbolos en paquetes y cada uno con su preambulo |
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.
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.
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.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.pyque contiene la lógica del receptor para encontrar este patrón.Estimación de Tiempo:
[A, A]en la señal recibida.M(d): Se implementó la métrica de sincronizaciónM(d) = |P(d)|² / R(d)², dondeP(d)mide la correlación entre las dos mitades de una ventana de análisis yR(d)mide la energía total.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):
Δfcausa un giro de faseφentre la primera y la segunda mitad del preámbulo.φes directamente el ángulo del número complejoP(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:
awgnomultitap).Visualización de Resultados: El bloque genera dos gráficos clave:
M(d)a lo largo de la señal, permitiendo visualizar el pico agudo que el algoritmo detecta.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.