242
UNIVERSITAT POLIT ` ECNICA DE CATALUNYA ESCOLA T ` ECNICA SUPERIOR D´ENGINYERIA DE TELECOMUNICACIONS DE BARCELONA PROJECTE FI DE CARRERA MODULADOR DIGITAL PROGRAMABLE Juan Luis T´ ebar Garc´ ıa Barcelona, 2000

PFC Modulador Digital Programable modulAD mediBER

Embed Size (px)

DESCRIPTION

El objetivo de este trabajo ha sido el desarrollo de unModulador Digital Programable para su empleo en la realización depruebas de laboratorio. Se pretende realizar medidas depropagación con nuevos tipos de comunicaciones digitales talescomo $W-CDMA$, habiéndose conseguido alcanzar una velocidad demodulación de 13.5~Mbps, valor suficiente para la realización delas mismas.El trabajo realiza un repaso teórico de lo que es la SíntesisDigital Directa poniendo de relieve los avances más recientes eneste campo. Se observa un esfuerzo por parte de los fabricantesen añadir nuevas prestaciones a los circuitos integrados DDS queya está incidiendo en la implantación de estos sistemas de formageneralizada. Al final de este capítulo teórico se incluye unarecopilación de circuitos DDS comerciales junto con susprincipales características, aunque cada mes aparecen chips queigualan o superan las prestaciones de sus competidores.El montaje práctico utiliza un modulador DDS, y en él se venaplicados los conceptos de interpolación y filtrado mediantefiltros FIR. Es por ello que también se repasan estos conceptos eincluso se incluye un ejemplo de utilidad en el propio diseño: Sehan calculado los coeficientes a programar en cada etapa delfiltro según la curva de respuesta en coseno alzado,acompañándose gráficas mostrando los resultados obtenidos.En segundo lugar, y para poder llevar a cabo las pruebas defuncionamiento del modulador, se ha desarrollado conjuntamente ungenerador de secuencias pseudoaleatorias. Éste sistema funcionacomo un equipo medidor de tasa de bits erróneos BER y estádiseñado para poder funcionar de manera autónoma e independientedel modulador, con lo que se puede aprovechar para realizar todotipo de medidas por separado.Con respecto a la medida de tasas de error, ha sido necesario elestudio de los criterios establecidos al respecto por la UIT.Aquellos contenidos básicos de aplicación en el trabajo tambiénhan sido reflejados en esta memoria. Lo que se pretendía erarealizar una aplicación que pudiera ser utilizada en la práctica,de modo que era deseable suscribir al máximo posible las citadasrecomendaciones.Para los dos sistemas desarrollados se han realizado sendasaplicaciones de control desde PC en el entorno Labwindows CVI.Por sencillez, economía y facilidad de uso se ha escogido comométodo de control el puerto paralelo del PC, para así favorecersu utilización en un entorno portátil si se desean realizarmedidas de campo.

Citation preview

Page 1: PFC Modulador Digital Programable modulAD mediBER

UNIVERSITAT POLITECNICA DE CATALUNYAESCOLA TECNICA SUPERIOR D´ENGINYERIA DE

TELECOMUNICACIONS DE BARCELONA

PROJECTE FI DE CARRERA

MODULADOR DIGITAL PROGRAMABLE

Juan Luis Tebar GarcıaBarcelona, 2000

Page 2: PFC Modulador Digital Programable modulAD mediBER

PROJECTE FI DE CARRERA

MODULADOR DIGITAL PROGRAMABLE

Autor:

Juan Luis Tebar Garcıa

Tutor:

Josep Vidal ManzanoProfesor Titular del Dept. de Teoria del Senyal i Comunicacions

Universitat Politecnica de Catalunya

DEPARTAMENT DE TEORIA DEL SENYAL I COMUNICACIOESCOLA TECNICA SUPERIOR D´ENGINYERIA DE

TELECOMUNICACIONS DE BARCELONAUNIVERSITAT POLITECNICA DE CATALUNYA

Barcelona, 2000

Page 3: PFC Modulador Digital Programable modulAD mediBER

A mi unica familia

Page 4: PFC Modulador Digital Programable modulAD mediBER

Agradecimientos

Este Proyecto de Fin de Carrera no hubiera sido posible sin la ayuda de algunas personasa quienes me gustarıa expresar mi sincera gratitud.

Comenzare este turno por mi familia, pues ellos han sido en gran parte los “cul-pables” de que este trabajo haya visto la luz: A mis padres Eusebio y Emilia por suscontinuos animos, a mi hermano Eusebio por ser el responsable de mi reciclaje software, aJose Antonio y Marıa Jose por su ayuda y soporte “hardware” en mis viajes a Barcelona,y en general a todos por su carino y apoyo moral.

Tambien he de dar las gracias a mi tutor, Josep Vidal, por las facilidades y consejosprestados a la hora de desarrollar este trabajo en la distancia. No puedo dejarme en eltintero a mi amigo Cesar, quien con su inestimable ayuda tanto en el plano tecnico como enel anımico tiene parte del merito de este trabajo. Gracias tambien a mi companero Cesareopor su ayuda con los equipos de medida y a Garve por su apoyo con la mecanografıa.

No puedo tampoco dejar de nombrar a mis amigos de siempre Avelino, Inaki, JuanErnesto, Claudio y a sus familias por su paciencia conmigo a lo largo de tanto tiempo.

BarcelonaSeptiembre del 2000 Juan Luis Tebar Garcıa

i

Page 5: PFC Modulador Digital Programable modulAD mediBER

Resumen

El objetivo de este trabajo ha sido el desarrollo de un Modulador Digital Programablepara su empleo en la realizacion de pruebas de laboratorio. Se pretende realizar medidasde propagacion con nuevos tipos de comunicaciones digitales tales como W − CDMA,habiendose conseguido alcanzar una velocidad de modulacion de 13.5 Mbps, valor suficientepara la realizacion de las mismas.

El trabajo realiza un repaso teorico de lo que es la Sıntesis Digital Directa poniendode relieve los avances mas recientes en este campo. Se observa un esfuerzo por partede los fabricantes en anadir nuevas prestaciones a los circuitos integrados DDS que yaesta incidiendo en la implantacion de estos sistemas de forma generalizada. Al final deeste capıtulo teorico se incluye una recopilacion de circuitos DDS comerciales junto consus principales caracterısticas, aunque cada mes aparecen chips que igualan o superan lasprestaciones de sus competidores.

El montaje practico utiliza un modulador DDS, y en el se ven aplicados los conceptosde interpolacion y filtrado mediante filtros FIR. Es por ello que tambien se repasan estosconceptos e incluso se incluye un ejemplo de utilidad en el propio diseno: Se han calculadolos coeficientes a programar en cada etapa del filtro segun la curva de respuesta en cosenoalzado, acompanandose graficas mostrando los resultados obtenidos.

En segundo lugar, y para poder llevar a cabo las pruebas de funcionamiento delmodulador, se ha desarrollado conjuntamente un generador de secuencias pseudoaleato-rias. Este sistema funciona como un equipo medidor de tasa de bits erroneos BER yesta disenado para poder funcionar de manera autonoma e independiente del modulador,con lo que se puede aprovechar para realizar todo tipo de medidas por separado.

Con respecto a la medida de tasas de error, ha sido necesario el estudio de loscriterios establecidos al respecto por la UIT. Aquellos contenidos basicos de aplicacion enel trabajo tambien han sido reflejados en esta memoria. Lo que se pretendıa era realizaruna aplicacion que pudiera ser utilizada en la practica, de modo que era deseable suscribiral maximo posible las citadas recomendaciones.

Para los dos sistemas desarrollados se han realizado sendas aplicaciones de controldesde PC en el entorno Labwindows CVI. Por sencillez, economıa y facilidad de uso se haescogido como metodo de control el puerto paralelo del PC, para ası favorecer su utilizacionen un entorno portatil si se desean realizar medidas de campo.

ii

Page 6: PFC Modulador Digital Programable modulAD mediBER

Indice general

1. La sıntesis digital directa 41.1. Teorıa de operacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Espectro de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.3. Capacidad de sintonıa en fase y frecuencia de los DDS . . . . . . . . . . . . 10

1.3.1. Sintonıa en frecuencia . . . . . . . . . . . . . . . . . . . . . . . . . . 101.3.2. Velocidad de cambio de sintonıa . . . . . . . . . . . . . . . . . . . . 111.3.3. Registros adicionales preprogramados . . . . . . . . . . . . . . . . . 12

1.4. Efecto del DAC en sistemas DDS . . . . . . . . . . . . . . . . . . . . . . . . 121.4.1. Conversores D/A de alta velocidad . . . . . . . . . . . . . . . . . . . 121.4.2. Conversores A/D de alta velocidad . . . . . . . . . . . . . . . . . . . 14

1.4.2.1. Parametros de los dispositivos de conversion . . . . . . . . 151.4.2.2. Efectos del “jitter” de apertura y del reloj de muestreo . . 191.4.2.3. Arquitectura de conversores A/D de alta velocidad . . . . . 19

1.4.3. Efecto del sobremuestreo en el nivel de ruido de cuantificacion . . . 211.5. Efecto del truncamiento del acumulador de fase . . . . . . . . . . . . . . . . 22

1.5.1. Magnitud de los espureos por truncamiento de fase . . . . . . . . . . 241.5.2. Distribucion espectral de los espureos por truncamiento de fase . . . 251.5.3. Resumen del truncamiento de fase . . . . . . . . . . . . . . . . . . . 28

1.6. Otras fuentes de espureos en un sistema DDS . . . . . . . . . . . . . . . . . 291.7. Consideraciones sobre el filtrado de salida . . . . . . . . . . . . . . . . . . . 311.8. Caracterısticas de salida de los sistemas DDS . . . . . . . . . . . . . . . . . 34

1.8.1. Acoplamiento con transformador simetrico . . . . . . . . . . . . . . . 351.8.2. Consideraciones sobre la potencia de salida . . . . . . . . . . . . . . 361.8.3. Terminacion de salida del DDS-DAC . . . . . . . . . . . . . . . . . . 37

1.9. Modulacion digital con DDS . . . . . . . . . . . . . . . . . . . . . . . . . . . 371.9.1. Requerimientos y arquitectura del sistema . . . . . . . . . . . . . . . 381.9.2. Filtros digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

1.9.2.1. Filtros FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . 401.9.2.2. Filtros IIR . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

1.9.3. Procesado DSP a varias velocidades . . . . . . . . . . . . . . . . . . 431.9.3.1. Interpolacion . . . . . . . . . . . . . . . . . . . . . . . . . . 441.9.3.2. Decimado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451.9.3.3. Conversion de velocidad racional n/m . . . . . . . . . . . . 471.9.3.4. Filtros digitales multivelocidad . . . . . . . . . . . . . . . . 471.9.3.5. Consideraciones acerca del sincronismo entre el reloj y los

datos de entrada . . . . . . . . . . . . . . . . . . . . . . . . 511.10. Evolucion y tecnicas auxiliares en los DDS . . . . . . . . . . . . . . . . . . . 52

iii

Page 7: PFC Modulador Digital Programable modulAD mediBER

1.10.1. Mejora del Margen Libre de Espureos mediante dithering de fase . . 531.10.2. Generacion de barridos “chirp” mediante DDS . . . . . . . . . . . . 541.10.3. Generacion de modulacion de amplitud mediante DDS . . . . . . . . 551.10.4. Funcionalidades adicionales en DDS . . . . . . . . . . . . . . . . . . 561.10.5. Chips DDS comerciales . . . . . . . . . . . . . . . . . . . . . . . . . 58

2. Secuencias pseudoaleatorias y registros de desplazamiento 612.1. Secuencias con propiedades de aleatoriedad . . . . . . . . . . . . . . . . . . 62

2.1.1. Propiedades de las secuencias aleatorias . . . . . . . . . . . . . . . . 622.2. Secuencias generadas mediante registros de desplazamiento . . . . . . . . . 63

2.2.1. Funciones generadoras . . . . . . . . . . . . . . . . . . . . . . . . . . 652.2.2. Determinacion del perıodo . . . . . . . . . . . . . . . . . . . . . . . . 67

2.2.2.1. Una condicion necesaria para longitud maxima . . . . . . . 672.2.3. El metodo matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.3. Polinomios modulo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.3.1. Periodos primos de Mersenne . . . . . . . . . . . . . . . . . . . . . . 692.3.2. Las funciones de Euler y de Mobious . . . . . . . . . . . . . . . . . . 692.3.3. Numero de polinomios irreducibles . . . . . . . . . . . . . . . . . . . 702.3.4. Periodos mas pequenos . . . . . . . . . . . . . . . . . . . . . . . . . 72

2.4. Aleatoriedad de las secuencias de registros de desplazamiento . . . . . . . . 722.4.1. Propiedad de balance . . . . . . . . . . . . . . . . . . . . . . . . . . 722.4.2. Propiedad de realizacion . . . . . . . . . . . . . . . . . . . . . . . . . 732.4.3. Propiedad de correlacion . . . . . . . . . . . . . . . . . . . . . . . . . 73

2.5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

3. Medidas de calidad 753.1. La Recomendacion G.821 ITU . . . . . . . . . . . . . . . . . . . . . . . . . 753.2. Asignacion de los objetivos G.821 . . . . . . . . . . . . . . . . . . . . . . . . 783.3. Especificaciones G.821 para otras velocidades . . . . . . . . . . . . . . . . . 80

4. Modulador DDS 824.1. Especificaciones de la placa DDS . . . . . . . . . . . . . . . . . . . . . . . . 834.2. Diseno hardware de la placa DDS . . . . . . . . . . . . . . . . . . . . . . . . 86

4.2.1. El modulador AD9853 . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2.1.1. Filtrado de datos (FIR + etapas interpoladoras) . . . . . . 90

4.2.2. Bloques funcionales de la placa DDS . . . . . . . . . . . . . . . . . . 944.2.2.1. Puerto paralelo de control . . . . . . . . . . . . . . . . . . . 974.2.2.2. Buffer de control y datos . . . . . . . . . . . . . . . . . . . 974.2.2.3. Modulador DDS . . . . . . . . . . . . . . . . . . . . . . . . 994.2.2.4. Generador de reloj de bit . . . . . . . . . . . . . . . . . . . 1014.2.2.5. Oscilador de referencia . . . . . . . . . . . . . . . . . . . . 1044.2.2.6. Salida de FI . . . . . . . . . . . . . . . . . . . . . . . . . . 1054.2.2.7. Entrada-salida de datos . . . . . . . . . . . . . . . . . . . . 1064.2.2.8. Alimentacion . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.3. Software de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084.3.1. Modulo principal mod.c . . . . . . . . . . . . . . . . . . . . . . . . . 108

4.3.1.1. Funcion ValorDiv . . . . . . . . . . . . . . . . . . . . . . . 1104.3.1.2. Funcion ValorFirAx . . . . . . . . . . . . . . . . . . . . . . 111

iv

Page 8: PFC Modulador Digital Programable modulAD mediBER

4.3.2. Modulo de funciones hardware mod hard.c . . . . . . . . . . . . . . 1124.3.2.1. Funcion prog hard . . . . . . . . . . . . . . . . . . . . . . . 1124.3.2.2. Funcion interpolador . . . . . . . . . . . . . . . . . . . . . 112

4.4. Resultados practicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

5. Generador medidor de tasa de bits erroneos 1205.1. Opciones de diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205.2. Especificaciones de la placa BER . . . . . . . . . . . . . . . . . . . . . . . . 1225.3. Diseno hardware de la placa BER . . . . . . . . . . . . . . . . . . . . . . . . 123

5.3.1. Composicion interna del DS2172 . . . . . . . . . . . . . . . . . . . . 1245.3.1.1. Configuracion del registro de desplazamiento . . . . . . . . 126

5.3.2. Bloques funcionales de la placa de BER . . . . . . . . . . . . . . . . 1295.3.2.1. Puerto paralelo de control . . . . . . . . . . . . . . . . . . . 1305.3.2.2. Buffer de control . . . . . . . . . . . . . . . . . . . . . . . . 1315.3.2.3. Buffer de datos . . . . . . . . . . . . . . . . . . . . . . . . . 1325.3.2.4. Medidor de BER DS2172 . . . . . . . . . . . . . . . . . . . 1335.3.2.5. Conector de transmision-recepcion . . . . . . . . . . . . . . 1355.3.2.6. Alimentacion . . . . . . . . . . . . . . . . . . . . . . . . . . 137

5.4. Software de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375.4.1. Modulo principal ber.c . . . . . . . . . . . . . . . . . . . . . . . . . . 138

5.4.1.1. Funcion principal bucle . . . . . . . . . . . . . . . . . . . . 1385.4.2. Modulo de funciones hardware ber hard.c . . . . . . . . . . . . . . . 139

5.4.2.1. Funcion lee par bert . . . . . . . . . . . . . . . . . . . . . . 1405.4.2.2. Funcion escribe par bert . . . . . . . . . . . . . . . . . . . 1405.4.2.3. Funcion aplicacion bert . . . . . . . . . . . . . . . . . . . . 141

5.5. Resultados practicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425.6. Mejoras futuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

A. El puerto paralelo del PC 146A.1. Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146A.2. Propiedades de la interfaz fısica . . . . . . . . . . . . . . . . . . . . . . . . . 148A.3. Direcciones del puerto paralelo . . . . . . . . . . . . . . . . . . . . . . . . . 149A.4. Registros software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149A.5. Utilizacion particular en la aplicacion . . . . . . . . . . . . . . . . . . . . . 152

B. Fotografıas del montaje 154

C. Listados fuente 158C.1. Aplicacion modulAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158C.2. Aplicacion mediBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196C.3. Ficheros de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

v

Page 9: PFC Modulador Digital Programable modulAD mediBER

Indice de figuras

1.1. Esquema interno de un NCO . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Flujo de senal a traves de la arquitectura DDS . . . . . . . . . . . . . . . . 61.3. Rueda digital de fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4. Reconstruccion de la senal a la salida del convertidor D/A . . . . . . . . . . 71.5. Ejemplo de senal analogica y sus diversos tipos de muestreo . . . . . . . . . 81.6. Espectro resultante para los diferentes tipos de muestreo practico . . . . . . 91.7. Espectro positivo teorico de salida de un sistema DDS . . . . . . . . . . . . 101.8. Cambios de frecuencia en la arquitectura DDS . . . . . . . . . . . . . . . . 111.9. Estructura completa de un dispositivo DDS . . . . . . . . . . . . . . . . . . 131.10. Estructuras de los conversores D/A . . . . . . . . . . . . . . . . . . . . . . . 131.11. Degradacion del margen libre de espureos en un D/A . . . . . . . . . . . . . 141.12. Espectro de salida de un conversor D/A . . . . . . . . . . . . . . . . . . . . 151.13. Espectro de la FFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.14. Potencia equivalente de ruido (NPR) . . . . . . . . . . . . . . . . . . . . . . 181.15. Relacion S/N en funcion del “jitter” de apertura y del reloj de muestreo . . 191.16. Conversor de subrango de 8 bits . . . . . . . . . . . . . . . . . . . . . . . . 201.17. Conversor A/D serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.18. El efecto del sobremuestreo sobre el ruido de cuantificacion . . . . . . . . . 221.19. Rueda de fase y Error por truncamiento de fase . . . . . . . . . . . . . . . . 231.20. Relacion del Truncamiento de fase con los espureos generados . . . . . . . . 241.21. Secuencia seguida por el acumulador de fase . . . . . . . . . . . . . . . . . . 261.22. Comportamiento de la palabra de truncamiento . . . . . . . . . . . . . . . . 271.23. Espectro de los espureos producidos por el truncamiento de fase . . . . . . 281.24. Efecto del desdoblamiento de los armonicos por el aliasing . . . . . . . . . . 291.25. Glitches a la salida de un DAC . . . . . . . . . . . . . . . . . . . . . . . . . 301.26. Filtro antialiasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311.27. Respuestas de la familia Chevyshev . . . . . . . . . . . . . . . . . . . . . . . 321.28. Respuestas de la familia Gausiana . . . . . . . . . . . . . . . . . . . . . . . 331.29. Respuesta de la familia Legendre . . . . . . . . . . . . . . . . . . . . . . . . 341.30. Combinacion de salidas complementarias en un DDS-DAC . . . . . . . . . . 351.31. Acoplo de cargas reactivas a la salida del conjunto DDS-DAC . . . . . . . . 361.32. Estructuras de modulacion basicas en el dominio temporal . . . . . . . . . . 371.33. Estructuras de modulacion basicas digitales . . . . . . . . . . . . . . . . . . 381.34. Estructuras de modulacion basicas DDS . . . . . . . . . . . . . . . . . . . . 391.35. Modulador DDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.36. Filtro FIR basico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401.37. Respuesta FIR de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.38. Filtro FIR generalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

vi

Page 10: PFC Modulador Digital Programable modulAD mediBER

1.39. Filtro IIR basico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.40. Filtro IIR generalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441.41. Interpolador basico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451.42. Vision en el dominio frecuencial de la interpolacion . . . . . . . . . . . . . . 451.43. Decimador basico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461.44. Vision en el dominio frecuencial de la decimacion . . . . . . . . . . . . . . . 461.45. Convertidor de velocidad de muestreo n/m basico . . . . . . . . . . . . . . . 471.46. Etapas basicas de los bloques filtro peine e integrador . . . . . . . . . . . . 481.47. Respuesta en frecuencia de los bloques basicos del filtro peine y del integrador 481.48. CIC funcionando de interpolador y de decimador . . . . . . . . . . . . . . . 491.49. Respuesta en frecuencia del filtro CIC basico . . . . . . . . . . . . . . . . . 491.50. Variaciones al bloque CIC basico . . . . . . . . . . . . . . . . . . . . . . . . 501.51. Comparacion de las respuestas CIC modificadas . . . . . . . . . . . . . . . . 501.52. Diagrama de bloques de un modulador DDS generico . . . . . . . . . . . . . 511.53. Compresion de la memoria ROM . . . . . . . . . . . . . . . . . . . . . . . . 521.54. Diagrama de bloques de un DDS generico . . . . . . . . . . . . . . . . . . . 531.55. Dithering de fase en un DDS . . . . . . . . . . . . . . . . . . . . . . . . . . 541.56. Sistema Chirp basado en DDS . . . . . . . . . . . . . . . . . . . . . . . . . 541.57. DDS con control de amplitud . . . . . . . . . . . . . . . . . . . . . . . . . . 561.58. Prestaciones anadidas en un sistema DDS . . . . . . . . . . . . . . . . . . . 561.59. Modulaciones de fase en un dispositivo DDS . . . . . . . . . . . . . . . . . . 57

2.1. Ejemplo de registro de desplazamiento con realimentacion lineal . . . . . . . 642.2. Funcion de autocorrelacion de la secuencia pseudoaleatoria de ejemplo . . . 66

3.1. Consideracion de los errores en la determinacion del tiempo de disponibilidad 763.2. Tiempo de disponibilidad en un enlace . . . . . . . . . . . . . . . . . . . . . 763.3. Terminos de la recomendacion G.821 . . . . . . . . . . . . . . . . . . . . . . 773.4. La conexion hipotetica de referencia segun la recomendacion G.821 . . . . . 78

4.1. Puentes de configuracion hardware en la placa DDS . . . . . . . . . . . . . 854.2. Diagrama de bloques del modulador DDS AD9853 . . . . . . . . . . . . . . 864.3. Funcionamiento del codificador Reed-Solomon . . . . . . . . . . . . . . . . . 884.4. Detalle de construccion de las etapas de interpolacion en el AD9853 . . . . 904.5. Simulacion en Matlab de respuestas impulsivas en coseno alzado . . . . . . 934.6. Compensacion del efecto de la etapa CIC en el filtro FIR . . . . . . . . . . 954.7. Esquema de bloques de la placa DDS . . . . . . . . . . . . . . . . . . . . . . 964.8. Buffer de control y datos de la placa DDS . . . . . . . . . . . . . . . . . . . 984.9. El circuito AD9853 y su conexionado en la placa DDS . . . . . . . . . . . . 1004.10. Selector JP2 de habilitacion de transmision . . . . . . . . . . . . . . . . . . 1004.11. Esquema del generador de reloj de bit . . . . . . . . . . . . . . . . . . . . . 1014.12. Formas de onda de salida del generador de reloj de bit . . . . . . . . . . . . 1034.13. Oscilador interno de referencia y jumper JP1 de seleccion de reloj maestro . 1044.14. Filtro antialiasing de salida en la placa DDS . . . . . . . . . . . . . . . . . . 1054.15. Conector de entrada de datos de la placa DDS . . . . . . . . . . . . . . . . 1064.16. Reguladores de alimentacion independientes en la placa DDS . . . . . . . . 1084.17. Distintas pantallas de la aplicacion de control modulAD . . . . . . . . . . . 1094.18. Protocolo hardware del puerto serie en el AD9853 . . . . . . . . . . . . . . 1124.19. Placa DDS y placa de BER trabajando conjuntamente . . . . . . . . . . . . 114

vii

Page 11: PFC Modulador Digital Programable modulAD mediBER

4.20. Medidas de salida realizadas con analizador vectorial HP89410A . . . . . . 1154.21. Medidas de los espureos de truncamiento de fase de salida . . . . . . . . . . 1164.22. Medidas en banda ancha para QPSK con imagenes generadas por el proceso

de conversion D/A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.23. Medidas en banda ancha para FSK sin filtro antialiasing . . . . . . . . . . . 1174.24. Efecto del filtro antialiasing de salida. . . . . . . . . . . . . . . . . . . . . . 1184.25. Espectro cercano para los tres tipos de modulaciones principales. . . . . . . 119

5.1. Diagrama de bloques del integrado medidor de BER DS2172 . . . . . . . . 1255.2. Registro de desplazamiento para generacion de secuencias en el DS2172 . . 1265.3. Diagrama de bloques de la placa de BER . . . . . . . . . . . . . . . . . . . 1305.4. Buffer de control de la placa de BER . . . . . . . . . . . . . . . . . . . . . . 1315.5. Buffer de datos de la placa de BER . . . . . . . . . . . . . . . . . . . . . . . 1335.6. El DS2172 y su conexionado en la placa de BER . . . . . . . . . . . . . . . 1345.7. Entrada salida de senales en la placa de BER . . . . . . . . . . . . . . . . . 1355.8. Regulador de alimentacion de la placa de BER . . . . . . . . . . . . . . . . 1375.9. Entorno grafico de la aplicacion de control mediBER . . . . . . . . . . . . . 1375.10. Conexion de la placa de BER para la simulacion de una medida . . . . . . . 1425.11. Diversos tipos de secuencias generadas en la placa de BER . . . . . . . . . . 143

A.1. Conexionado externo para lectura de datos en el puerto paralelo del PC . . 147A.2. Hardware interno del PC en puertos bidireccionales . . . . . . . . . . . . . . 151A.3. Utilizacion particular del puerto paralelo en nuestra aplicacion . . . . . . . 153

B.1. Vista general del montaje que contiene las placas DDS y BER . . . . . . . . 155B.2. Vista interior donde se pueden distinguir las dos placas . . . . . . . . . . . 155B.3. Vista lateral con los conectores de IF y de entrada/salida de datos . . . . . 156B.4. Vista lateral con los conectores de control y alimentacion . . . . . . . . . . 157

viii

Page 12: PFC Modulador Digital Programable modulAD mediBER

Indice de cuadros

1.1. “Estado del Arte” de la tecnologıa DDS comercial (1999) . . . . . . . . . . 58

2.1. Primos de Mersenne: 2p − 1. Primeros 23 valores de p. . . . . . . . . . . . . 702.2. Funciones φ y µ tabuladas hasta para n = 50 . . . . . . . . . . . . . . . . . 712.3. Funciones ψ y λ tabuladas hasta r = 24 . . . . . . . . . . . . . . . . . . . . 72

3.1. Objetivos maximos de servicio defectuoso segun G.821 . . . . . . . . . . . . 773.2. Asignacion de objetivos de minutos degradados y segundos erroneos . . . . 793.3. Distribucion del 0.1 % de segundos severamente erroneos . . . . . . . . . . . 793.4. Clasificacion de calidad de seccion digital . . . . . . . . . . . . . . . . . . . 80

4.1. Funcion de los puentes hardware de la placa DDS . . . . . . . . . . . . . . . 844.2. Coeficientes del filtro FIR sin compensar . . . . . . . . . . . . . . . . . . . . 924.3. Coeficientes del filtro FIR compensados . . . . . . . . . . . . . . . . . . . . 954.4. Interface paralelo de la placa DDS. . . . . . . . . . . . . . . . . . . . . . . . 974.5. Sumario de velocidades de bit generadas en la placa DDS . . . . . . . . . . 104

5.1. Descripcion matematica de las secuencias generadas en la placa de BER . . 1285.2. Descripcion de las secuencias repetitivas programadas en la placa de BER. . 1295.3. Interface entre la placa BER y el puerto paralelo del PC. . . . . . . . . . . 131

A.1. Hilos del puerto paralelo del PC . . . . . . . . . . . . . . . . . . . . . . . . 148A.2. Posiciones de la BIOS que almacenan las direcciones de I/O de LPTs . . . . 149A.3. Puerto de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150A.4. Puerto de estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150A.5. Puerto de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151A.6. Puerto paralelo en la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . 152

B.1. Conector de interface de la placa DDS . . . . . . . . . . . . . . . . . . . . . 156B.2. Conector de interface de la placa BER . . . . . . . . . . . . . . . . . . . . . 156B.3. Pines del conector al puerto paralelo . . . . . . . . . . . . . . . . . . . . . . 157B.4. Conector de alimentacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

ix

Page 13: PFC Modulador Digital Programable modulAD mediBER

Introduccion

En la era de la informacion en que vivimos, y dado que la naturaleza de la mayorıa dela misma, por no decir la practica totalidad, es digital, la actual tendencia de desarrollotecnologico se ha ido dirigiendo claramente desde hace anos hacia el procesado digitalde senal. Sin embargo, hasta hace poco tiempo, la “limpieza” que suponıa el realizar lasoperaciones a nivel teorico en el dominio digital se veıa devaluada por el elevado costede los circuitos practicos unido a su considerable consumo. Esto reducıa el margen deempleo de las tecnicas DSP (Procesado Digital de la Senal) al rango de aplicaciones debaja frecuencia.

Actualmente la situacion ha cambiado de manera radical, pues el DSP mas avanzadode Texas esta ya sobre los 800 MIPS (los modelos TMS320C55xx) haciendo gala de unosrendimientos de 0.05 mw/MIPS, con lo que se puede ver que la industria se esta volcandoes este campo. Lo mismo sucede en la rama de la sıntesis digital directa, donde se haconseguido integrar el nucleo DDS junto a DACs exhibiendo un excelente comportamientodinamico, bajo consumo, tamano y precio.

Tradicionalmente la aplicacion mas corriente e inmediata de la sıntesis digital directaha sido en sintetizadores de senal como sustitucion de los tradicionales PLLs analogicos.

A medida que ha ido avanzando el grado de integracion de estos circuitos, los fab-ricantes han anadido filtros digitales y otras funcionalidades DSP a los mismos. De estamanera, ya podemos encontrar todo tipo de sistemas como moduladores y demoduladoresintegrados en un solo chip, que dan lugar a aplicaciones practicas mas compactas y demenor consumo, liberando ası de carga computacional a los controladores.

Este trabajo hace un repaso a la tecnologıa de la sıntesis digital directa mostrandoel actual “estado del arte” de esta especialidad, a la vez que se desarrolla un sistema deutilidad practica en el laboratorio.

Por otra parte se ha realizado otro sistema como fuente de senal de datos parael montaje DDS. Lo que en un principio iba a ser una pequena aplicacion, al final haresultado tener casi la misma entidad que el sistema principal. Por esta razon, no seconsidera desacertado incluir en la memoria un pequeno capıtulo que repase las bases deeste “sistema auxiliar”.

Se trata de una introduccion sobre las secuencias generadas en registros de de-splazamiento realimentados. Constituye un intento de animar al lector a profundizar en elconocimiento de las secuencias pseudoleatorias y los polinomios primitivos, pues a pesarde ser un tema poco novedoso, no es facil encontrar informacion ordenada sobre el mismo.Personalmente, este interes resurgio durante el diseno de la placa de generacion de medidade BER.

1

Page 14: PFC Modulador Digital Programable modulAD mediBER

2

Organizacion de la memoria

El trabajo se ha organizado en dos partes principales:

Descripciones Teoricas.

Comprenden los 3 primeros capıtulos, y en ellos se resumen los fundamentos teoricosde aplicacion en los dos montajes del trabajo.

El capıtulo 1 es el principal componente de este bloque teorico. En el se comentanlos aspectos principales de las tecnicas de sıntesis digital directa (DDS) haciendoespecial incapie en los procesos de conversion D/A [?]. Como complemento a ladescripcion teorica, se ha realizado una labor de recopilacion de datos y comparativaentre algunos de los chips que implementan tecnicas DDS de entre los principalesfabricantes [?].

A continuacion, el capıtulo 2 contiene una descripcion particularmente interesantede las caracterısticas matematicas de las secuencias pseudoaleatorias recogidas prin-cipalmente de [?]. Por ultimo, en el capıtulo 3 se recogen las precisiones principalesestablecidas por la UIT para la realizacion de medidas de calidad en los enlaces dedatos, obtenidas de las recomendaciones [?] y [?].

Diseno Practico.

La segunda mitad del trabajo comprende dos capıtulos que constituyen la memoriade las mismas aplicaciones practicas. En ellos se comenta el funcionamiento individ-ual de cada circuito incluyendo esquematicos, y tambien se hace una descripcion delsoftware de control desarrollado para cada placa.

El capıtulo 4 esta dedicado a la placa PCB donde se ha montado un modulador DDS.Se trata de un modulador digital QPSK, FSK y 16QAM, con un margen de frecuenciade salida de hasta 65 Mhz y diversas funcionalidades integradas que se veran durantesu exposicion. Entre estas, podemos destacar la inclusion dentro del chip DDS de unfiltro de datos FIR, que permite la realizacion de gran cantidad de caracterısticas defiltrado en el dominio digital. La aplicacion de control del modulador digital disponede una pantalla donde se pueden cambiar los coeficientes del filtro. Para servir deayuda en el calculo de los mismos se realiza un ejercicio en Matlab de calculo de loscoeficientes de un filtro FIR con una curva de respuesta en coseno alzado.

El capıtulo 5 corresponde a la placa de circuito impreso donde se ha implementadoun generador de secuencias pseudoaleatorias. Este diseno, construido como apoyo dela placa de modulacion DDS, constituye por sı mismo un montaje independiente quepuede utilizarse por separado para la medida de tasa de bits erroneos. El programa decontrol suministra informacion sobre los parametros mas importantes recomendadospor la UIT para la realizacion de medidas de calidad en enlaces. Entre ellos podemosdestacar el numero de segundos con errores, los segundos severamente erroneos, ypor supuesto, la tasa de BER del canal bajo prueba.

Las secuencias generadas en la parte de transmision de este circuito se utilizarancomo senal de informacion en la placa de modulacion DDS sirviendo como tramadigital de entrada al mismo.

Durante la exposicion de estos capıtulos se presentan medidas variadas obtenidascon diferentes equipos de laboratorio tales como analizador de espectros, analizadorvectorial y osciloscopio.

Page 15: PFC Modulador Digital Programable modulAD mediBER

3

Para finalizar, se presentan tres apendices con informacion adicional. El apendice Acontiene una breve descripcion teorica del funcionamiento del puerto paralelo en el PC,los diversos registros que son de interes para el programador, y unos pocos conceptosreferentes a su construccion hardware. Todo ello para entender mejor el modo en que seha desarrollado la interface de control del sistema.

En el apendice B se muestran diversas fotografıas presentando el aspecto real de loscircuitos y el chasis donde se ha mecanizado todo el conjunto, y tambien se han incluidounas tablas recopilando las funciones de cada terminal en los diversos conectores a los quetiene acceso el usuario.

Por ultimo, en el apendice C se han incluido los codigos fuente de las aplicacionesde control realizadas en Labwindows CVI.

Page 16: PFC Modulador Digital Programable modulAD mediBER

Capıtulo 1

La sıntesis digital directa

La Sıntesis Digital Directa (DDS) se puede definir como un medio de generar senalesa partir de representaciones digitales armonicamente puras y altamente precisas. Estarepresentacion digital es posteriormente reconstruida mediante un convertidor Digital-Analogico de alta velocidad, para proporcionar una senal de salida analogica, tıpicamenteun tono sinusoidal o una secuencia de tonos. Como en estos dispositivos la senal se procesade forma digital, su generacion es facilmente configurable mediante software, haciendo masamplia su gama de utilidades.

Actualmente se encuentran disponibles una amplia gama de DACs de altas presta-ciones con los que se consiguen espureos de potencia extremadamente baja a la salida delconjunto DDS-DAC.

Las tecnicas DDS ofrecen prestaciones unicas en contraste con los otros metodosde sıntesis. Aunque se encuentran limitados por el criterio de Nyquist (hasta 1/2 de lafrecuencia del reloj aplicado como referencia), la tecnica DDS permite un control en laresolucion de frecuencia del orden de milihertzios, al igual que con la resolucion en fase,donde es facil obtener resoluciones de 0.02o en los dispositivos comerciales.

Adicionalmente, las tecnicas DDS no imponen restricciones de tiempo de establec-imiento (settling time) en cambios de frecuencia, salvo los requeridos por el control digital.Como resultado se consiguen frecuencias de conmutacion extremadamente elevadas, delorden de nanosegundos.

Todos los cambios de frecuencia se realizan automaticamente sin discontinuidadde fase. Como la senal se genera en el dominio digital, el proceso se puede manipularcon excepcional precision. Esto permite un control preciso tanto de la fase como de lafrecuencia, consiguiendose facilmente las modulaciones PSK o FSK.

Si se desea, un sistema controlado por microprocesador se puede utilizar para alma-cenar datos de compensacion de frecuencia en lazo abierto de un dispositivo particular ode algun parametro del sistema. El microprocesador puede controlar el DDS para corregirde forma dinamica la frecuencia segun se necesite. Con un detector de frecuencia adecuadoen un sistema de recepcion, se puede construir facilmente un sistema de lazo cerrado.

En resumen, podemos enumerar las ventajas de las tecnicas DDS:

Resolucion en frecuencia muy elevada (hasta ordenes de µHz, y tambien en fase(mejor del orden de un grado), todo bajo control digital.

Extremada velocidad de “salto de frecuencia o fase”, cambios de frecuencia continuosen fase y sin problemas de transitorios como ocurre en los sintetizadores analogicos.

4

Page 17: PFC Modulador Digital Programable modulAD mediBER

1.1 Teorıa de operacion 5

Eliminacion de los problemas relacionados con los retoques y la sintonıa fina manualocasionados por el envejecimiento de componentes y derivas de temperatura tıpicosde los sintetizadores analogicos.

Control digital del sistema, con las ventajas que esto conlleva: posibilidad de controlremoto, ajuste optimizado, y cualquier aplicacion que se nos pueda ocurrir bajocontrol de un microprocesador.

Cuando se utilizan como sintetizadores en cuadratura, posibilidad de afrontar ajustesy controles independientes para cada canal I y Q.

1.1. Teorıa de operacion

Un DDS esta formado basicamente por un contador de elevado numero de bits quedirecciona una memoria ROM en la que se han almacenado los valores de amplitud de unafuncion del tipo seno o coseno. La salida de la memoria va directamente a un convertidorD/A el cual transforma los “numeros” almacenados en la memoria en valores de tension,reconstruyendo ası la senal analogica.

El problema fundamental con esta arquitectura es que para cambiar la frecuenciade salida es necesario cambiar la frecuencia de reloj, lo que es un metodo poco practico.Para evitar esto, se emplea una tecnica hardware muy eficiente que se denomina OsciladorControlado Numericamente (NCO). Un diagrama de bloques de esta tecnica se puede veren la figura 1.1.

Figura 1.1: Esquema interno de un NCO

El corazon del sistema es el acumulador de fase cuyos contenidos se actualizan unavez por ciclo de reloj. Cada pulso de reloj, el numero digital almacenado en el registro defase se incrementa con el valor almacenado en el registro de incremento de fase M. Por lotanto, puesto que el acumulador es de un elevado numero de bits, por ejemplo N = 32bits, se necesitan 232 ciclos de reloj (mas de 4000 millones) para que el acumulador genereun ciclo completo.

Otra forma de entender la funcion del acumulador de fase es observando la figura 1.3,donde se puede considerar la oscilacion de salida como un vector girando a velocidadconstante alrededor de un cırculo de fase (la velocidad de giro sera la del reloj de referencia).Cada punto del cırculo de fase se corresponde con un punto equivalente de un ciclo de lafuncion seno. El acumulador de fase se utiliza para “direccionar” cada uno de los puntos

Page 18: PFC Modulador Digital Programable modulAD mediBER

1.1 Teorıa de operacion 6

Figura 1.2: Flujo de senal a traves de la arquitectura DDS

del cırculo y la palabra de sintonıa M determina el salto del vector en cada pulso dereloj. La resolucion del acumulador N determina el numero de puntos en que se divide la“rueda”.

Figura 1.3: Rueda digital de fase

Para transformar la salida lineal del acumulador de fase en cualquier tipo de ampli-tud, normalmente senoidal, se necesita una tabla de referencia, generalmente en memoriaROM. Existen tecnicas para ahorrar memoria en esta tabla, por ejemplo el explotar lasimetrıa de la forma de onda senoidal, de manera que solo se guardan los valores de ampli-tud correspondientes a 1/4 de ciclo y por medio de los 2 bits mas significativos se determinael cuadrante de situacion: el mas significativo directamente indica el signo de la amplitudal DAC, mientras que el segundo determina la forma de recorrer la tabla de referencia.

El acumulador de fase es un contador modulo N que incrementa su valor cada vezque recibe un pulso de reloj. La magnitud de ese incremento depende de la palabra desintonıa M cargada en el “registro de incremento de fase”. Este registro es el que determinala cantidad de puntos que se avanzan en cada salto de la rueda de fase. Por tanto si M = 1la frecuencia del reloj de referencia se divide por 232 (continuando con el ejemplo anteriorde N = 32), si M = 2 por la mitad, y ası sucesivamente. De acuerdo con esto, la frecuenciade salida vale:

Fout =M · fclk

2N(1.1)

Page 19: PFC Modulador Digital Programable modulAD mediBER

1.2 Espectro de salida 7

Ecuacion conocida como de sintonıa basica del NCO, siendo la resolucion en fre-cuencia:

∆f =fclock2N

(1.2)

Como la resolucion del convertidor D/A de salida esta limitada a 12 o 14 bits, lasalida del acumulador se trunca a los 13 - 15 bits mas significativos. Esto reduce el tamanode la tabla de referencia y no afecta a la resolucion en frecuencia. El truncamiento de fasesolamente anade una cierta cantidad de ruido de fase a la salida del circuito.

La resolucion del convertidor D/A es tıpicamente 2 a 4 bits menor que el ancho dela tabla de referencia, siendo los espureos generados por el truncamiento del acumuladorinferiores a 90 dBc, [?] y [?], para el caso de emplear 15 bits en el acumulador, valorsuperior a las prestaciones que ofrecen los mejores convertidores D/A.

1.2. Espectro de salida

Para entender mas facilmente el espectro de la forma de onda que se genera a lasalida del convertidor D/A, en la figura 1.4 se incluye una representacion de lo que serıaun ciclo de onda senoidal reconstruida a la salida del mismo:

Figura 1.4: Reconstruccion de la senal a la salida del convertidor D/A

Dado que por mucha resolucion que quiera tener un DAC, esta va a ser siemprelimitada, a su salida la senal siempre tendra la forma de onda tıpica con escalones deamplitud equiespaciados un perıodo de tiempo igual a la frecuencia de reloj del sistema,que es la frecuencia a la que se actualiza.

Comparando las figuras 1.4 y 1.5, se puede deducir que la salida del convertidores equivalente al muestreo practico instantaneo de la senal senoidal a reconstruir x(t),por una senal muestreadora s(t) en forma de trenes de pulsos muestreadores p(t − nTs),llevando el caso al lımite en el que la duracion del pulso es igual al periodo de muestreo;en la figura corresponde al apartado (d).

El pulso muestreador y la senal muestreadora son:

p(t) ∼=∏(

t

Ts

)(1.3)

s(t) =∑n

p(t− nTs) (1.4)

resultando:

Page 20: PFC Modulador Digital Programable modulAD mediBER

1.2 Espectro de salida 8

Figura 1.5: Ejemplo de senal analogica y sus diversos tipos de muestreo(a) Forma de onda analogica original(b) Muestreo practico natural(c) Muestreo practico instantaneo(d) Muestreo practico instantaneo de tipo sample and hold

xsi(t) = x(t) · s(t) para t = nTs

xsi(t) =∑n

x(nTs) · p(t− nTs) (1.5)

que es lo mismo que:

xsi(t) = p(t) ∗

[x(t) ·

∑n

δ(t− nTs)

](1.6)

Realizando la transformada de Fourier encontramos el espectro de salida:

Xsi(f) =1Ts· P (f) ·

∑m

X(f − m

Ts) (1.7)

como

P (f) = Ts ·sen(πfTs)πfTs

(1.8)

resulta el espectro de salida de la senal generada por el convertidor D/A:

XDAC(f) =sen(πfTclk)πfTclk

·∑m

X(f − m

Tclk) (1.9)

que corresponde al espectro de la senal muestreada, en nuestro caso la senal sinteti-zada sen(ωt), repetida a intervalos iguales a la frecuencia de muestreo, el reloj del sistemaDDS, y conformado por la envolvente sinc(fTclk). La representacion grafica de este resul-tado para una senal paso bajo generalizada la podemos apreciar el la figuras 1.6 (g) y (h),

Page 21: PFC Modulador Digital Programable modulAD mediBER

1.2 Espectro de salida 9

donde se representa tambien el espectro resultante para los demas tipos de muestreo. Elresultado particular para un tono fijo se muestra en la figura 1.7.

Figura 1.6: Espectro resultante para los diferentes tipos de muestreo practico

Segun se puede apreciar, el proceso de construccion de la senal analogica por elDAC produce por sı mismo la aparicion de respuestas imagen alrededor de N ·fclock±fout.Tambien es de destacar la coincidencia de los nulos de la envolvente con los multiplos dela frecuencia de reloj del sistema. Para eliminar las componentes imagen, lo normal esutilizar un filtro pasobajo externo con frecuencia de corte ligeramente inferior al anchode banda de Nyquist fclock/2 (por conveniencia practica en los requerimientos del mismo,normalmente el 40 % de fclock).

Se puede calcular la caıda de la curva de respuesta en un sistema DDS a causa dela envolvente sinc(fTclk), resultando valer −3,92 dB desde DC hasta el ancho de bandade Nyquist. Las arquitecturas DDS actuales incluyen un filtro con curva caracterısticax/sen(x) que compensa esta caıda, dejando la respuesta en amplitud a la salida del con-vertidor A/D practicamente plana (±0,1 dB) sobre un ancho de banda igual al 45 % de lafrecuencia de reloj, equivalente al 80 % de Nyquist.

Page 22: PFC Modulador Digital Programable modulAD mediBER

1.3 Capacidad de sintonıa en fase y frecuencia de los DDS 10

Figura 1.7: Espectro positivo teorico de salida de un sistema DDS. No se consid-eran las no-linealidades del mismo

Es de destacar la gran amplitud de la primera frecuencia imagen, que para valoresde frecuencia de salida cercanos a Nyquist puede tener niveles de amplitud muy similaresa la componente fundamental. Es preciso, por tanto, realizar un estudio del margen defrecuencias utiles segun la aplicacion particular, y especificar un filtro antialiasing apropi-ado.

El resto de imperfecciones del sistema tales como errores de linealidad, energıa deglitches asociada al convertidor D/A, acoplamiento de la frecuencia de reloj, etc, no siguenla curva de caıda sen(x)/x, dependiendo en este caso del layout del circuito impreso, lacalidad de la fuente de alimentacion, la calidad del reloj de referencia, etc. De estos efectosse hablara en las secciones siguientes.

1.3. Capacidad de sintonıa en fase y frecuencia de los DDS

En principio, la frecuencia de salida del DDS es facilmente controlable siguiendo lasecuaciones 1.1 y 1.2 de sintonıa del NCO. Veamos a continuacion un ejemplo concretodonde se emplean estas relaciones para conseguir una resolucion en pasos de Hz exactos.

1.3.1. Sintonıa en frecuencia

Por ejemplo, utilizando una frecuencia de reloj fclock = 227 = 134,217728 MHz, sidisponemos de un DDS con un registro de frecuencia de 32 bits (N=32), se puede generaruna frecuencia decimal exacta:

∆f =227

232= 1Hz/25

Ahora solo tenemos que calcular la palabra M de sintonıa de frecuencia:

Fout = M ·∆f

M = 25 = 20(h para fout = 1Hz

M = 26 = 40(h para fout = 2Hz

M = 96 = 60(h para fout = 3Hz...

...M = 1720583456 = 668E0520(h para fout = 53768233Hz

Page 23: PFC Modulador Digital Programable modulAD mediBER

1.3 Capacidad de sintonıa en fase y frecuencia de los DDS 11

1.3.2. Velocidad de cambio de sintonıa

Esta prestacion es clave en aplicaciones en las que se requiere una maxima veloci-dad de cambio de frecuencia como GMSK y FSK en “modo rampa”. Viene claramentedeterminada por la velocidad maxima de la interface de control y por su configuracion.

Existen muchos tipos de configuraciones para esta interface, tanto con carga paralelocomo su contrapartida serie. Se puede encontrar desde registros simples de 40 bits quealmacenan todas las palabras de configuracion, hasta puertos de comunicaciones sıncronoscompatibles con algunos microprocesadores.

Obviamente sera mucho mas rapida una interface de tipo paralelo que una serie. Ladesventaja esta en el numero de pines empleados, cuya cuenta aumenta considerablementeen el caso de la interface paralelo.

Actualmente ya se encuentran DDS con control paralelo y velocidades de carga dedatos del orden de 100 MHz. Esto significa que se puede presentar una palabra de frecuencianueva a la salida del DDS cada ¡10ns!. La caracterıstica de cambio de fase continua delos dispositivos DDS los hace adecuados para aplicaciones de salto de frecuencias a altavelocidad (frequency hopping).

(a)

(b)

Figura 1.8: Cambios de frecuencia en la arquitectura DDS(a) Cambio de frecuencia en el acumulador de fase(b) Detalle del cambio de frecuencia en la senal de salida

Existen dispositivos DDS con diversos registros adicionales que pueden programarsecon otras palabras de sintonıa de frecuencia; el contenido de estos registros se ejecuta pormedio de algun terminal externo del integrado, consiguiendose facilmente la generacion deFSK. Utilizando estos registros preprogramados se pueden obtener velocidades de salto defase de hasta 250 MHz.

La velocidad de conmutacion es un tema importante en muchos disenos de sinteti-zadores. Un sintetizador se consideraba “rapido” cuando su tiempo de asentamiento erade pocos milisegundos. La evolucion de los sintetizadores analogicos-directos permitio con-seguir el establecimiento en unos pocos microsegundos. Sin embargo, DDS es incuestion-ablemente la tecnica de conmutacion mas rapida.

Page 24: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 12

Los disenos mas lentos DDS incluyen tecnicas pipeline que degradan la caracterısticade conmutacion. Cuando la velocidad de conmutacion es una especificacion crıtica, lavelocidad del DDS puede ser tan rapida como un ciclo de reloj mas el retardo anadido porel filtro de salida. Algunos disenos DDS pueden conmutar a cualquier frecuencia dentrode su ancho de banda en un ciclo de reloj.

1.3.3. Registros adicionales preprogramados

Aunque en la seccion anterior nos hemos referido unicamente a la conmutacion enfrecuencia, todo lo dicho sirve para la caracterıstica de fase si el dispositivo DDS disponede un registro de fase entre el acumulador de fase y la memoria ROM del mismo.

En general, existen otros registros adicionales que no forman parte de la estructuramadre de un DDS, pero que aportan beneficios indudables a la hora de utilizarlos enaplicaciones practicas. Algunos de ellos ya se han nombrado, pero de nuevo se enumerantodos a continuacion, de forma que la estructura final de un dispositivo DDS genericopuede ser la que se observa en la figura 1.9:

1. Registro adicional de sintonıa de frecuencia (acumulador de fase). Seleccionando conun terminal externo del DDS un registro u otro se consiguen facilmente modulacionesFSK.

2. Registro de control de fase cuyo contenido se suma al acumulador, permitiendo alusuario comandar retardos de fase programados. La cantidad de retardo que se puedeprogramar varıa desde 11.5o (5 bits), hasta ±0,02o (14 bits). Es la forma inmediatade implementar modulaciones del tipo PSK.

3. Registro de control de amplitud. La salida de la memoria ROM se multiplica conel contenido de este registro. Se toman los bits mas significativos del resultado paraalimentar al DAC. De este modo obtenemos modulaciones de amplitud.

4. En otras arquitecturas DDS mas especıficas como moduladores y convertidor ascen-dentes digitales, se incluyen registros adicionales para realizar funciones tales comofiltros FIR, etapas de interpolacion, ası como inversion espectral de la senal de salida.Se trataran en la seccion 1.9.

1.4. Efecto del DAC en sistemas DDS

Los convertidores D/A son los que marcan las prestaciones de los sistemas DDS.Dado que el sistema trabaja con representaciones de senales en el dominio digital, portanto perfectas en teorıa y sin fuentes de ruido alguno, de el bloque de conversion D/A vaa depender en buena parte la calidad y el funcionamiento final del sistema. En esta seccionse van a analizar los distintos tipos de conversores existentes, sus prestaciones, problemaspracticos, etc.

1.4.1. Conversores D/A de alta velocidad

Un conversor D/A esta formado por una serie de fuentes de corriente que se conmu-tan por medio de conmutadores analogicos para generar las distintas tensiones de salida,como se puede ver en la figura 1.10.

Page 25: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 13

Figura 1.9: Estructura completa de un dispositivo DDS equipado para todas lasfuncionalidades

Figura 1.10: Estructuras de los conversores D/A

Los problemas derivados de esta arquitectura son:

Resolucion

No linealidades

Generacion de impulsos o “glitches”

Dependencia de la distorsion con la relacion reloj de salida/frecuencia de salida

Un convertidor D/A no ideal introduce distorsion por varios motivos, entre los prin-cipales que podemos citar estan las no linealidades del amplificador de entrada, las difer-encias entre las fuentes de corriente y los impulsos que se producen al conmutar los inter-ruptores analogicos. Las dos primeras fuentes de distorsion son difıciles de cuantificar yanalizar, pues son parametros intrınsecos del circuito.

Page 26: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 14

El tercer problema es la generacion de impulsos o “glitches”. Este efecto presenta lamaxima incidencia a mitad de escala, cuando se pasa del codigo 1000..00 al 0111..11, y portanto se deben conmutar todos los interruptores de corriente al mismo tiempo. En estasituacion, se producen impulsos por el desigual tiempo de conmutacion de los interruptoresde corriente lo que produce la aparicion de ruido dentro y fuera de la banda de trabajodel conversor. Este proceso se repite con menor incidencia a 1/4, 1/8 de escala, etc.

(a) (b)

Figura 1.11: Degradacion del margen libre de espureos (D/A de 12 bits)(a) En funcion de la frecuencia de entrada.(b) En funcion de la frecuencia de entrada para 5 MSPS.

Por otra parte, la energıa de impulso aumenta exponencialmente al aumentar lafrecuencia de reloj y al aumentar la frecuencia de la senal de entrada, por lo que lasprestaciones del D/A se degradan de forma logarıtmica al aumentar la frecuencia de relojpor causa de este fenomeno. En la figura 1.11 se puede ver este parametro que se caracterizapor medio del margen libre de espureos “SFDR”, tanto en funcion de la frecuencia deentrada como de la de muestreo.

En la figura 1.12 se compara el SFDR de dos conversores, uno de 10 bits y otro de12 bits, trabajando a un regimen elevado de frecuencia de reloj (100 MSPS). A pesar deque la frecuencia de salida no es la misma en ambos, se observa una importante reducciondel nivel de espureos en el de 12 bits, siendo este el actual lımite practico del no de bits enlos conversores D/A de alta velocidad con tecnologıa TTL, pues el aumento del numerode bits a 14 o superior no supone una reduccion del nivel de espureos a causa de las nolinealidades y los glitches que se producen.

En resumen, si se van a emplear frecuencias de muestreo del orden de 50 Mhz, elconversor D/A optimo sera de 12 bits con tecnologıa TTL, con lo que conseguirıamos unmargen libre de espureos de unos 60 dB.

De cualquier forma, las prestaciones de las etapas de conversion D/A son superioresa las de conversion A/D, por lo tanto es este el elemento mas delicado en un procesadordigital de senal.

1.4.2. Conversores A/D de alta velocidad

Hoy en dıa estan apareciendo multitud de aplicaciones en las que se realiza muestreode alta velocidad. Las mas comunes son aplicaciones de vıdeo y de radiofrecuencia dondese muestrea una senal de frecuencia intermedia para luego procesarla.

Page 27: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 15

(a) (b)

Figura 1.12: Espectro de salida de un conversor D/A.(a) Conversor D/A de 10 bits, 125 MSPS.(b) Conversor D/A de 12 bits, 100 MSPS

El auge de estas aplicaciones, ha provocado el desarrollo de los convertidores analogi-co/ digital (ADC) que han aumentado sus prestaciones de forma considerable, pues sonestos dispositivos los que limitan la calidad maxima en un procesador de senal.

En estos nuevos conversores disenados para aplicaciones de alta velocidad, las carac-terısticas en alterna y el margen dinamico son mucho mas importantes que las de contınua,por lo tanto existe una nueva generacion de dispositivos especıficamente optimizados parael trabajo en alta velocidad.

1.4.2.1. Parametros de los dispositivos de conversion

En este apartado vamos a tratar los efectos de la cuantificacion en los conversorA/D (y tambien D/A). Los unicos errores asociados a un conversor ideal de N bits sonlos asociados al proceso de muestreo y cuantificacion. El maximo error que comete unconvertidor al digitalizar una senal de DC es ±1/2LSB. Por lo tanto cualquier senal deCA generada por un conversor de n bits ideal producira un ruido de cuantificacion cuyovalor eficaz medido en el ancho de banda de Nyquist y para senal uniforme es:

ERRORRMS =q√12

(1.10)

ası, para una senal sinusoidal tenemos que la relacion senal ruido vale:

S

N= 6,02N + 1,76dB (1.11)

donde “N” es el numero de bits. Esta relacion solamente es valida si el ruido es medidoen todo el ancho de banda de Nyquist, desde DC a fs/2.

Por ejemplo, un convertidor A/D de 8 bits exhibe un SQR de 49.92 dB. Una precisionimportante a la ecuacion 1.11 es que en ella no se hace referencia a la situacion frecuencialde los espureos ni a su amplitud individual, unicamente se calcula la potencia combinadatotal de los mismos en relacion a la componente fundamental.

Page 28: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 16

Otro punto a considerar es que la SRQ definida en la ecuacion 1.11 toma la amplitudde salida de la componente fundamental como la del fondo de escala. Por tanto, cuandotal situacion no sea la real se empeorara un factor igual a:

A = 20log(FFS) (dB) (1.12)

con FFS igual a la fraccion del fondo de escala a la que opera el DAC. Tomando enconsideracion este efecto resulta:

SQR = 1, 76 + 6,02N +A = 1, 76 + 6,02N + 20log(FFS) (dB) (1.13)

Continuando con el ejemplo anterior, si el DAC opera al 70 % del fondo de escala(A=0.7), el SQR resultante es de 46.82 dB ( una reduccion de 3.1 dB respecto al fun-cionamiento original del DAC).

En lo que respecta al ruido de cuantificacion, aunque su valor eficaz si es aproximada-mente q/

√12, su contenido en el dominio de la frecuencia puede estar altamente correlado

con la senal alterna de entrada. Ası por ejemplo, hay una correlacion mucho mayor parasenales periodicas de pequena amplitud que para senales aleatorias de gran amplitud. Poreso, aunque normalmente se toma el ruido de cuantificacion como ruido blanco distribuidouniformemente en todo el ancho de banda, esta suposicion no es correcta, pues en el casode fuerte correlacion el ruido aparece concentrado en los armonicos de la senal, justamentedonde menos se desea.

Normalmente se muestrean senales aleatorias, centradas en una banda de frecuencias,por lo que el ruido de cuantificacion suele ser aleatorio. Sin embargo, las correlacion entreel ruido de cuantificacion y la senal depende de la relacion entre la frecuencia de muestreoy la senal de entrada. Ası, si introducimos dos tonos de distinta frecuencia a un conversorA/D y variamos la diferencia de frecuencias entre ellos, podemos observar como el nivelde espureos varıa en funcion de dicha diferencia, por lo tanto dicho nivel no viene marcadopor la distorsion del conversor A/D sino que se trata de un artefacto del proceso demuestreo y de la correlacion del error de cuantificacion con la frecuencia de entrada. Enuna aplicacion practica de conversion A/D, generalmente el ruido de cuantificacion esaleatorio, porque siempre existe una cierta cantidad de ruido en el sistema que actuacomo “dither” aleatorizando el espectro del error de cuantificacion.

Es importante entender este proceso, porque la prueba que se emplea habitualmentepara medir las prestaciones en alterna de un A/D consiste en realizar la FFT de lasmuestras de un tono sinusoidal. Se trata de un metodo universalmente aceptado, y paramedir de forma precisa la distorsion armonica se deben respetar una serie de normas paraasegurar que realmente se mide la distorsion del A/D. En primer lugar hay que elegiradecuadamente la relacion de frecuencias, y algunas veces inyectar una cierta cantidad deruido. Luego hay que tener en cuenta el numero de muestras que se toman en la FFT,pues estas marcan el nivel de ruido de la funcion. Este nivel vale:

GFFT = 10log(M

2

)(1.14)

siendo M el numero de puntos, por tanto si por ejemplo M=4096, la ganancia de procesode la FFT serıa de 33 dB, por lo que el ruido de la FFT estarıa 33 dB por debajo del ruidodel conversor A/D.

En la figura 1.13 se puede ver detalladas los distintos parametros que se usan paracaracterizar un conversor A/D de 12 bits.

Page 29: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 17

Figura 1.13: Espectro de la FFT

Un conversor A/D real presenta una serie de fuentes de ruido y distorsion. En primerlugar esta el buffer de entrada que es un circuito de banda ancha que aporta ruido blanco yno linealidades, y presenta un ancho de banda limitado. A continuacion esta el circuito demuestreo y retencion que introduce mas no linealidades, limitaciones del ancho de banday “jitter”, por ultimo el cuantificador del A/D introduce ruido de cuantificacion y nolinealidades diferenciales.

De acuerdo a estas fuentes de error se emplean una serie de parametros para carac-terizar los conversores A/D:

Distorsion armonica.

Peor armonico.

Distorsion armonica total.

Distorsion armonica total mas ruido.

Relacion senal ruido y relacion de distorsion.(SINAD)

Numero efectivo de bits.(ENOB)

Relacion senal a ruido.(SNR)

Ancho de banda analogico (ABW).

Margen libre de espureos (SFDR).

Distorsion de intermodulacion de dos tonos.

Relacion de potencia de ruido (NPR).

Hay varias formas de medir la distorsion armonica de un A/D, pero todas ellasemplean la FFT para medir dicho valor. Para medir este efecto se introduce al A/D unasenal 1 dB por debajo del fondo de escala y se mide la relacion en dB de la senal con

Page 30: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 18

respecto a el peor armonico, para saber el pero caso, o con respecto al valor cuadraticomedio de la suma de todos los armonicos para saber la distorsion armonica total.

La distorsion total mas ruido es igual a la distorsion armonica total pero te-niendo en cuenta el ruido de cuantificacion.

La relacion senal-ruido-distorsion es la relacion entre el valor eficaz de la am-plitud de la senal con respecto al valor cuadratico medio de todas las demas componentesespectrales.

El numero efectivo de bits se define (ENOB) como:

ENOB =SINAD − 1,76dB

6,02(1.15)

La relacion senal ruido (S/N) sin armonicos se define como la relacion entre elvalor RMS de la senal con respecto al valor medio de la suma de los cuadrados de todaslas demas componentes espectrales excluyendo los 5 primeros armonicos y la componentecontınua [?].

El ancho de banda analogico es el valor para el cual el espectro de un barridode entrada plano en frecuencia cae 3 dB.

El margen libre de espureos (SFDR) es uno de las medidas mas empleadas yse define como el valor rms entre la componente principal y los picos de las componenteespureas, medido sobre la primera ventana de Nyquist. Este valor depende de la amplitudde la senal y se suele expresar en funcion del fondo de escala.

La distorsion de intermodulacion de dos tonos es igual a la medida clasica encualquier circuito analogico. Se emplean dos senales cuya amplitud esta 6 dB por debajodel nivel de fondo de escala del A/D y se miden las componentes nf1 ±mf2.

Figura 1.14: Potencia equivalente de ruido (NPR)

La relacion de potencia de ruido (NPR) se emplea frecuentemente en los sis-temas de multiples por division en frecuencia (FDM). En estos sistemas los canales de vozse multiplexan en bloques de 4 Khz para su transmision, por lo que resulta importantever la influencia de los canales adyacentes sobre el de interes. Para realizar la medida seinyecta ruido blanco al A/D y se filtra una banda de 4 Khz por medio de un filtro bandaeliminada, de forma que el ruido que aparece en esa banda es debido a la intermodulacion

Page 31: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 19

y distorsion del A/D, midiendose la relacion (NPR) entre el nivel de ruido de entrada yel de la banda filtrada. Esta medida se puede ver en la figura 1.14.

1.4.2.2. Efectos del “jitter” de apertura y del reloj de muestreo

El jitter de apertura es otro parametro importante que hace disminuir la relacionS/N de un A/D. El “jitter de fase” causa un error que es funcion del tiempo de subiday que resulta en una degradacion total de la relacion S/N. Este es un parametro muyimportante, especialmente para frecuencia de entrada/salida muy elevadas, por lo que elreloj de muestreo debe ser de muy bajo “jitter”. En la figura 1.15 se puede ver dicho efecto.

Figura 1.15: Relacion S/N en funcion del “jitter” de apertura y del reloj demuestreo

1.4.2.3. Arquitectura de conversores A/D de alta velocidad

La arquitectura de los conversores resulta determinante en sus caracterısticas dinami-cas, por lo que es muy importante conocer las posibilidades existentes para aplicacionesde alta velocidad:

Aproximaciones sucesivas (SAR).

Flash.

Subrango.

Serie.

Los conversores de Aproximaciones Sucesivas han sido muy populares y se hanusado y siguen usandose para frecuencias de muestreo por debajo de 1 MSPS o menos.

Page 32: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 20

Un bloque SAR es unicamente un cuantificador, pues no realiza muestreo, y para unaconversion adecuada la entrada debe permanecer constante durante todo el tiempo deconversion.

Los conversores FLASH tambien llamados paralelo, son los A/D mas rapidos exis-tentes lo que consiguen gracias al empleo de un gran numero de comparadores en paralelo.Un conversor Flash de N bits emplea 2N resistencias y 2N − 1 comparadores en paralelo,de forma que cada comparador tiene una tension de referencia que es 1 LSB superior a ladel anterior. La senal de entrada se aplica a todos los comparadores a la vez, por lo que elretardo de propagacion es el de un solo comparador, sin embargo la arquitectura empleaun gran numero de resistencias y comparadores, lo que limita su resolucion a un numeroreducido de bits. Ademas para que los comparadores sean rapidos deben trabajar conuna potencia elevada, por lo tanto los problemas de los conversores Flash son su limitadaresolucion, elevada disipacion de potencia y elevado coste.

Tıpicamente, los conversores Flash emplean 8 bits y alcanzan frecuencias de 500 Mspscon anchos de banda analogicos de mas de 300 Mhz. Pero como se ha mencionado antes,el ancho de banda de potencia total no tiene porque ser el mismo que el ancho de bandade resolucion.

Idealmente los comparadores de un convertidor Flash estan bien adaptados en CCy CA, pero en la practica hay diferencias cuando se aplica una senal a la entrada detodos los comparadores simultaneamente, lo que causa una degradacion en la senal a altasfrecuencias. Esto se traduce en que la distorsion de estos conversores es de unos 70 dBcpara frecuencias de 1 Mhz y se degrada a 35 dBc a 100 Mhz.

Por lo tanto, estos conversores tienen aplicacion en sistemas donde se requiere unmuestreo de muy alta velocidad con una calidad media o baja en cuanto a distorsion yespureos. Algunas aplicaciones serıan por ejemplo, osciloscopios digitales, aplicaciones decomunicaciones de alta velocidad, etc.

Aunque no es practico realizar un conversor FLASH con un elevado numero debits, sin embargo estos conversores se utilizan como subsistemas para realizar Conversoresde Subrango tambien denominados como conversores “medio Flash” que son capaces deconseguir una resolucion de hasta 16 bits y cuya arquitectura interior es la de la figura1.16.

Figura 1.16: Conversor de subrango de 8 bits

En estos conversores, el proceso de conversion se realiza en dos pasos, en el primerolos 4 bits mas significativos se digitalizan por medio de un conversor analogico digital

Page 33: PFC Modulador Digital Programable modulAD mediBER

1.4 Efecto del DAC en sistemas DDS 21

del tipo Flash, el dato digitalizado se convierte de nuevo a analogico por medio de otroconversor D/A y se resta del valor de entrada, de forma que el residuo resultante seamplifica y se aplica al segundo conversor Flash. Por ultimo, la salida de los dos conversoresFlash se combina en una palabra binaria de 8 bits.

Esta tecnica de conversion multietapa se puede extender a dos, tres o cuatro etapasde forma que la precision en bits puede llegar a ser de 12, 14 o 16 bits. El tiempo deconversion se multiplica por el numero de etapas de que disponga el sistema, por lo tantoun A/D de dos etapas y 12 bits tendra un regimen de muestreo de 50 MSPS.

Por ultimo los conversores Serie emplean una etapa por bit para realizar una con-version A/D, por tanto son equivalentes a conversores de subrango con un bit por etapay sin correccion de errores. La figura 1.17 muestra un conversor de este tipo.

Figura 1.17: Conversor A/D serie

El circuito de muestreo y retencion mantiene la senal de entrada constante duranteel tiempo que dura el ciclo de conversion , y hay N etapas, cada una tiene una salida de bity una de residuo que va a la etapa siguiente. El ultimo bit es detectado con un comparadorcomo se muestra en la figura.

El problema fundamental de esta arquitectura son las discontinuidades en el residuode salida y la necesidad de que exista un tiempo de establecimiento adecuado entre etapas,por lo tanto, no es una arquitectura adecuada para aplicaciones de alta velocidad.

Para terminar este apartado dedicado a los procesos de conversion, podemos resumirel margen de posibilidades de eleccion en aplicaciones de alta velocidad a los siguientestipos:

Flash: muy alta velocidad (500 MSPS), con baja resolucion (8-9 bits) y elevadadistorsion (SFDR=-30 dBc)

Subrango: alta resolucion (10-14 bits) con baja distorsion (SFDR= -60 dBc ) y altavelocidad de operacion (50 MSPS).

1.4.3. Efecto del sobremuestreo en el nivel de ruido de cuantificacion

Sobremuestrear equivale a utilizar una frecuencia de muestreo mayor de la de Nyquistintencionadamente. La figura 1.18 demuestra como el sobremuestreo mejora la relacionSQR, Senal-Ruido de Cuantificacion.

En la ecuacion 1.11 se mostraba la relacion senal-ruido para el caso en que el anchode banda util era el de Nyquist. Cuando se sobremuestrea, el ancho de banda de interes

Page 34: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 22

Figura 1.18: El efecto del sobremuestreo sobre el ruido de cuantificacion

o utilizado, BW, es menor de Fs/2. La relacion S/N con respecto al ancho de banda seincrementa porque el porcentaje de ruido de cuantificacion es menor.

La resolucion del DAC determina la potencia de ruido de cuantificacion, es unacantidad fija y esta representada por el area sombreada en la figura. En el caso de so-bremuestreo la potencia de ruido es la misma que el caso de muestreo a la frecuencia deNyquist. Al existir un ancho de banda mayor sobre el que distribuir la potencia de ruidode cuantificacion, en la banda de interes el rectangulo que representa la potencia de ruidotiene menor altura, lo que indica que se mejora la relacion senal-ruido en esta zona.

El efecto de mejora producido por el sobremuestreo es cuantificable:

C = 10log(Fsos/Fs) (dB) (1.16)

donde Fs es la frecuencia de muestreo de Nyquist y Fsos la frecuencia de sobre-muestreo. La relacion SQR modificada por todos los efectos es:

SQR = 1, 76 + 6,02N +A+ C = 1, 76 + 6,02N + 20log(FFS) + 10log(Fsos/Fs) (dB)(1.17)

1.5. Efecto del truncamiento del acumulador de fase

El truncamiento de fase es un aspecto importante de las arquitecturas DDS. Porejemplo, consideremos un DDS con un acumulador de fase de 32 bits. Convertir cada unode esos valores en un nivel de amplitud requerirıa una tabla de 232 entradas, o lo que es lomismo, ¡ 4294967296 posiciones de memoria !. Si cada una de estas entradas almacenaraun valor de amplitud de 8 bits, serıa necesaria una memoria de 4 Gigabits. Claramenteesto es algo impracticable.

La solucion es utilizar una fraccion de los bits mas significativos del acumulador paraproporcionar la informacion de fase. En el ejemplo anterior, de los 32 bits del acumuladorde fase solo se aprovechan los 12 mas significativos. Los 20 restantes seran ignorados.Ahora solo se necesitan 48 kilobits de memoria suponiendo informacion de amplitud de 12bits.

Para entender las implicaciones del truncamiento de fase se recurrira con insistenciaa la figura 1.19, que dibuja el caso hipotetico de un acumulador de 8 bits donde solamentelos 5 bits superiores se utilizan para resolver la fase.

Page 35: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 23

Figura 1.19: Rueda de fase y Error por truncamiento de fase

En esta figura se representan dos cırculos punteados representando los valores defase representables con cada una de las resoluciones utilizadas: con 8 bits se dispone deuna resolucion de 360o/28 = 1,41o, mientras que si utilizamos unicamente los 5 bits massignificativos de la palabra de fase, en este caso tendremos una resolucion de 360o/25 =11,25o. El cırculo externo de puntos verdes representa la resolucion de 8 bits, mientras queal caso de peor resolucion le corresponde la circunferencia de puntos rojos interior.

Ahora supongamos por ejemplo que la palabra de sintonıa programada en nuestroDDS del ejemplo es igual a 6. Esto quiere decir que la cuenta del acumulador se realiza conincrementos de 6 en 6. En la ya nombrada figura 1.19, tambien se representan los cuatroprimeros cambios de angulo de fase realizados por el DDS. Como se puede distinguir, seproduce una discrepancia entre la fase indicada en el acumulador (la circunferencia externade 8 bits), y la fase determinada por la resolucion de 5 bits (circunferencia interior).

Estas discrepancias corresponden a los arcos E1 para la primera cuenta, E2 parala segunda y ası sucesivamente hasta llegar a la cuarta cuenta para la que no se produceerror. La equivalencia en grados es de 8.46o, 5.64o y 2.82o para los errores E1, E2 y E3respectivamente.

A partir de ahı el patron se repite periodicamente conforme el acumulador se incre-menta a saltos de 6 en 6 posiciones en la circunferencia exterior a cada intervalo de relojdel sistema.

Obviamente, estos errores de fase introducidos por el truncamiento de fase se tra-duciran en errores de amplitud durante el proceso de conversion fase-amplitud inherentea todo dispositivo DDS. Estos errores son periodicos porque, independientemente de lapalabra de sintonıa elegida, tras un numero determinado de vueltas en la rueda de fase,la fase de acumulador y la fase truncada coincidiran. Como los errores de amplitud sonperiodicos en el tiempo, aparecen como lıneas espectrales de frecuencia conocidos con elnombre de espureos por truncamiento de fase.

En [?] se determina que la magnitud y distribucion de los espureos por truncamientode fase dependen de tres factores:

1. Tamano del acumulador de fase (A bits)

2. Tamano de la palabra de fase, es decir, el numero de bits de fase despues del trun-

Page 36: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 24

camiento (P bits)

3. Palabra de sintonıa (M)

1.5.1. Magnitud de los espureos por truncamiento de fase

Hay palabras de sintonıa que no provocan espureos de truncamiento de fase, mientrasque otras los generan del maximo nivel. Si la diferencia entre el tamano del acumulador Ay el tamano de la palabra de fase despues del truncamiento P es mayor de 4, (A−P ≥ 4),lo cual es muy corriente en los disenos DDS practicos, se puede establecer el nivel maximode espureos:

Pmax espur trunc∼= −6,02 · P (dBc) (1.18)

Por ejemplo, para un DDS de 32 bits de resolucion en frecuencia y un truncamientode fase a 12 bits, los espureos por truncamiento de fase nunca estaran por encima de−72 dBc independientemente de la palabra de sintonıa de frecuencia elegida.

(a)

(b)

Figura 1.20: Relacion del Truncamiento de fase con los espureos generados(a) Patrones de palabras de sintonıa que provocan el maximo nivelde espureos(b) Patrones de sintonıa que provocan el mınimo nivel de espureos

En la figura 1.20 se representa graficamente el acumulador de fase de un dispositivoDDS de A bits de resolucion en la que aparece indicado el truncamiento a los P bits massignificativos.

La primera parte de la figura corresponde al caso en que se generan los espureos demayor nivel; son aquellas palabras de sintonıa M que cumplen:

MCD(M, 2(A−P )) = 2A−P−1 (1.19)

Page 37: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 25

siendo MCD(X,Y ) el maximo comun divisor de X e Y .En el ejemplo de la figura, la palabra de sintonıa es de A bits (resolucion del acu-

mulador de fase), donde los P bits superiores constituyen la palabra de fase (los bits quese van a utilizar para la conversion). Los bits A − P inferiores se desprecian, esto es, seignoran en lo que se refiere a resolucion de fase. La palabra de sintonıa T, consta de losA− 1 bits menos significativos (el bit mas significativo de la palabra de sintonıa debe ser0 para evitar el aliasing). Tal y como se aprecia en la figura, cualquier palabra de sintonıacon un 1 en la posicion de bit 2A−P−1 y ceros en el resto de los bits de menos peso nosdan el truncamiento de fase con peor nivel de espureos (−6,02P dBc).

El otro extremo se da en las palabras de sintonıa que no producen espureos al-gunos. Son palabras de sintonıa cuya parte “despreciada” es igual a cero. Formalmenteson aquellas que cumplen:

MCD(M, 2(A−P )) = 2A−P (1.20)

Para que esta ecuacion se cumpla, el patron de la palabra de sintonıa debe ser eldel apartado (b) de la figura 1.20. Por tanto, las palabras de sintonıa que no provocanespureos de truncamiento de fase se caracterizan por tener un 1 en la posicion de bit 2A−P

y ceros en los restantes bits de menos peso. El resto de patrones de palabra de sintonıaprovocan niveles intermedios de espureos.

1.5.2. Distribucion espectral de los espureos por truncamiento de fase

Analizar de forma precisa la distribucion de los espureos que provoca el truncamientode la palabra de fase es bastante complicado. Un analisis detallado se puede encontrar en[?]. Aquı se hara una presentacion mas intuitiva.

Hay que recordar, en primer lugar, que el nucleo de un DDS consta de un acumuladorque suma de forma recursiva el valor de la palabra de sintonıa. En la figura 1.21 se puedenver varias iteraciones de este proceso. Inicialmente, el acumulador contiene el valor de lapalabra de sintonıa, (en este caso el valor arbitrario K). A cada ciclo sucesivo de relojla palabra de sintonıa se suma al contenido anterior del acumulador. El proceso continuaindefinidamente hasta que se vuelve a la posicion de partida, pues al ser el acumuladormodulo 2A, llega un momento en el cual se produce desbordamiento en el mismo. Elnumero de pulsos de reloj necesarios hasta completar uno de estos ciclos se llama Velocidadde Repeticion Superior, (GRR).

GRR = 2A/MCD(M, 2A) (1.21)

Por ejemplo, si A vale 20 y M es 182.898 (base 10), resulta un GRR de 524.288.De este resultado se desprende que se necesitan alrededor de medio millon de ciclos dereloj antes de que el acumulador comience a repetir su secuencia. Aunque esto puedeparecer un perıodo de repeticion grande, no es comparable al de algunos DDS que utilizanacumuladores de 48 bits.

Volvamos a la figura 1.21. Como de los A bits de la palabra de fase, (que representanla verdadera fase), solo se utilizan en el proceso de conversion a amplitud los P bits massignificativos, podemos considerar la senal de salida como una senal compuesta de unasenal de resolucion completa (que serıa la que se obtendrıa sin truncamiento de fase) yuna senal de error equivalente a los B bits de la palabra de truncamiento.

Se puede considerar entonces que la senal de error es la fuente de los espureos. Estu-diando las propiedades de esta palabra de truncamiento profundizaremos en la naturalezade la senal de error.

Page 38: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 26

Figura 1.21: Secuencia seguida por el acumulador de fase

Si se consideran por separado los bits de truncamiento, es posible determinar elperıodo de repeticion de la palabra de truncamiento; es decir, el GRR de la palabra detruncamiento. Por ejemplo, para las condiciones de la figura 1.21, el valor de A se convierteen 12 (el numero de bits de truncamiento). La palabra de truncamiento se comporta comoun acumulador de B bits con una palabra de sintonıa equivalente (ETW) dada por:

ETW = T modulo 2B (1.22)

donde T es la palabra de sintonıa original. El resultado de esta operacion no es nadamas que el valor de la parte truncada de la palabra de sintonıa original. En el ejemploconsiderado, la ETW vale 2.674 (base 10). Por tanto, con A = 12 y T = 2674, la GRRes 2.048. Esto quiere decir que cada 2.048 ciclos de reloj, la palabra de truncamientorepetira el patron de su secuencia. Acabamos de demostrar una propiedad importante dela palabra de truncamiento: su perıodo.

¿Cual es el comportamiento de la palabra de truncamiento durante este perıodo? Lacuestion se puede responder observando que la “capacidad” de la palabra de truncamientoes 2B. Dividiendo la capacidad por la ETW obtendremos el numero de ciclos de relojnecesarios para provocar que el acumulador se desborde. En el ejemplo considerado, comoB=12, la capacidad de la palabra de truncamiento es 212 = 4,096.

Antes de dividir por la ETW, sin embargo, es importante senalar que el bit massignificativo del ETW es un 1. Esto implica un perıodo de desbordamiento menor de 2ciclos de reloj, o lo que es lo mismo, se producirıa una frecuencia con aliasing. Por tanto,debemos ajustar la ETW restandola de la capacidad de la palabra de truncamiento (4.096).Ası la ETW ajustada es 1.422 (4.096-2.674). Si el bit mas significativo de la ETW hubierasido 0, este ajuste no hubiese sido necesario.

Ahora que ya conocemos la capacidad de la palabra de truncamiento y el valor deETW ajustado correctamente, podemos determinar el perıodo de desbordamiento de lapalabra de truncamiento:

Page 39: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 27

Capacidad/ETW = 2B/1422 = 4096/1422 = 2,88045 (1.23)

Este valor es el numero medio de ciclos de reloj que se necesitan para que la palabrade truncamiento se desborde. Como sabemos que la GRR de la palabra de truncamiento esde 2.048 ciclos de reloj y que se lleva 2,88 ciclos de reloj el que la palabra de truncamientose desborde, entonces el numero de desbordamientos que ocurren sobre un perıodo de laGRR es:

Nro de desbordamientos = GRR/(Capacidad/ETW ) = 2048/2,88045 = 711 (1.24)

Con esta informacion se puede observar el comportamiento de la palabra de trun-camiento en la figura 1.22.

Figura 1.22: Comportamiento de la palabra de truncamiento

La palabra de truncamiento alcanza un valor maximo de 2B. Tiene la forma dediente de sierra con un perıodo de 4,096/1,422 = 2,88 ciclos de reloj.

La forma de onda de diente de sierra resulta de la caracterıstica de desbordamientodel acumulador. Tambien se ve que la secuencia completa de valores de la palabra de trun-camiento se repite despues de un perıodo de 2.048 ciclos de reloj. Como el comportamientode la palabra de truncamiento es periodico en el dominio del tiempo su transformada deFourier es periodica en el dominio de la frecuencia. Como la secuencia de la palabra detruncamiento es una secuencia real, su transformada se puede representar por la mitadde puntos de los que consta la secuencia en el dominio del tiempo aprovechando suspropiedades de simetrıa. Por tanto, habra 1.024 frecuencias discretas asociadas al compor-tamiento de la palabra de truncamiento, y estas frecuencias constituyen los espureos detruncamiento.

Por tanto, el espectro de la secuencia de la palabra de truncamiento sera el de unaforma de onda en diente de sierra con el matiz siguiente: La frecuencia fundamental deldiente de sierra es Fs × (ETW/Capacidad) o 0,3472Fs en el ejemplo. Como sabemos quehay 1.024 frecuencias asociadas con la secuencia de la palabra de truncamiento, entoncesel espectro esta formado por los primeros 1.024 armonicos del espectro de la forma de ondaen diente de sierra espaciados a intervalos de 0,3472Fs. Esto se expande hasta un margende frecuencia de 355,5Fs. Por supuesto, se produce aliasing de los armonicos de alto ordendentro del ancho de banda de Nyquist, Fs/2. La figura 1.23 ilustra este fenomeno.

La traza superior de la figura 1.23 muestra el espectro parcial de la forma de onda endiente de sierra. La figura intermedia indica “la reflexion”de las lıneas espectrales debidaal aliasing. Observese que los espureos que caen dentro de bandas de frecuencia que son

Page 40: PFC Modulador Digital Programable modulAD mediBER

1.5 Efecto del truncamiento del acumulador de fase 28

Figura 1.23: Espectro de los espureos producidos por el truncamiento de fase

multiplos enteros impares de Fs/2 coinciden directamente en la region de Fs/2. En cambio,los espureos que caen en bandas de frecuencias que son multiplos pares de Fs/2 quedancomo imagenes simetricas en la region de Nyquist. La traza inferior de la figura muestrala region Fs/2 resultante. Este es el verdadero espectro de espureos que se produce en elDDS a causa del truncamiento del acumulador de fase. Por supuesto, aunque en la figurasolo se representa el margen desde 0 hasta 3Fs, ya hemos determinado en el ejemplo quelos armonicos generados llegaban hasta 355,5Fs. Esto quiere decir que realmente habrıamuchısimos mas espureos por truncamiento de los que se representan en esta figura.

1.5.3. Resumen del truncamiento de fase

En resumen, el truncamiento del acumulador de fase resulta en un error de la senalde salida del DDS. Esta senal de error se caracteriza mediante el estudio de la palabrade truncamiento (la palabra de truncamiento es la porcion del acumulador de fase quecontiene los bits truncados). Ademas la senal de error de truncamiento provoca espureosdiscretos en frecuencia a la salida del DDS.

La magnitud de los espureos de truncamiento de fase tiene un lımite superior deter-minado por el numero de bits de la palabra de fase P. El valor de este lımite es −6,02P dBcy este lımite superior se da en un tipo especıfico de palabras de sintonıa. Nominalmente,estas palabras de sintonıa son aquellas en las que los bits truncados son todos 0 exceptoel bit truncado mas significativo. Sin embargo una segunda clase de palabras de sintonıano provocan espureos de truncamiento de fase. Estas se caracterizan por ser todo cerosen la palabra de sintonıa y un 1 en al menos la posicion del bit menos significativo de lapalabra de fase. El resto de palabras de sintonıa producen espureos de truncamiento defase cuyo maximo valor es siempre menor de −6,02P dBc.

La distribucion espectral de las palabras de truncamiento no se caracteriza tanfacilmente como su magnitud maxima. Sin embargo, se ha explicado que la porcion depalabra de truncamiento del acumulador se puede considerar como una fuente de senal

Page 41: PFC Modulador Digital Programable modulAD mediBER

1.6 Otras fuentes de espureos en un sistema DDS 29

de error de fase. Esta senal de error tiene la forma de onda de diente de sierra con unfrecuencia de:

F esp trunc = Fs(ETW/2B) (1.25)

Donde Fs, es la frecuencia del reloj del sistema del DDS, ETW es la palabra desintonıa equivalente representada por los bits truncados (despues de la correccion delaliasing), y B es el numero de bits truncados. El numero de armonicos de esta frecuenciaque se deben de considerar en el analisis de espureos de truncamiento de fase viene dadopor:

Noarmonicos trunc = 2B−1/MCD(ETW, 2B) (1.26)

donde MCD(x, y) es el maximo comun divisor de x e y. El resultado es un espec-tro que se expande muchos multiplos de Fs. Sin embargo, debido al desdoblamiento dearmonicos producido por el aliasing, todos estos armonicos caen dentro del ancho de ban-da de Nyquist, constituyendo la distribucion de espureos por truncamiento de fase que segenera en los DDS.

1.6. Otras fuentes de espureos en un sistema DDS

Hasta ahora, hemos analizado en las dos secciones anteriores las dos fuentes prin-cipales de espureos en un DDS, el ruido de cuantificacion en el convertidor D/A y eltruncamiento de fase. Podemos enumerar otras fuentes adicionales de espureos a la salidade un sistema DDS:

1. Distorsion armonica a causa de la no linealidad del DAC. Tambien tratamos la nolinealidad y sus fuentes en el apartado 1.4. Su efecto es la generacion de armonicosde la senal sintetizada. Para conocer la situacion exacta de estos armonicos hay queconsiderar el fenomeno de “reflexion” que se produce en aquellos que son superioresal ancho de banda de Nyquist. El fenomeno se muestra en la figura 1.24.

Figura 1.24: Efecto del desdoblamiento de los armonicos por el aliasing

El procedimiento para determinar la frecuencia resultante al aliasing del N-esimoarmonico es:

a) Calcular el resto R del cociente (Nfo)/Fs donde N es el orden del armonico.

Page 42: PFC Modulador Digital Programable modulAD mediBER

1.6 Otras fuentes de espureos en un sistema DDS 30

b) Sea SPURN la frecuencia reflejada del N-esimo armonico.

c) Entonces SPURN = R si R ≤ 1/2Fs, en otro caso SPURN = Fs −R

El procedimiento anterior es un medio para conocer la situacion del armonico queresulta de las no linealidades asociadas a un convertidor D/A practico. Como ya seha dicho antes, la magnitud de este armonico no se puede predecir ya que esta di-rectamente relacionada con la cantidad de no linealidad exhibida por el DAC enparticular.

2. Transitorios de conmutaciones asociados con el DAC. Los “glitches” de con-mutacion constituyen otra fuente de espureos que se generan debido a la arquitec-tura fısica del DAC. Tiempos de subida y bajada desiguales contribuyen tambien ala distorsion armonica. La cantidad de distorsion esta determinada por la funcion detransferencia dinamica. Los transitorios pueden provocar oscilaciones en los flancosde subida y / o bajada de la forma de onda de salida del DAC. Estas oscilacionestienden a ocurrir a la frecuencia natural de resonancia del circuito implicado y sepueden manifestar como espureos en la salida. Su efecto de salida se observa en lafigura 1.25.

(a)

(b)

Figura 1.25: Glitches a la salida de un DAC(a) Senal de salida con glitches de conmutacion(b) Etapa de conmutacion disenada para minimizar los glitches

3. El acoplamiento de la senal de reloj. Es otra fuente importante de espureos enlos sistemas DDS. Muchos disenos incluyen uno o mas circuitos de reloj integrados.No es extrano que estas senales de reloj aparezcan a la salida del DAC a causa deacoplamientos inductivos o capacitivos. Obviamente este acoplamiento se manifiestaen el espectro de salida como una lınea espectral a la frecuencia del reloj interferente.Otra posibilidad es que la senal de reloj se acople al reloj de muestreo del DAC.Esto provoca que la senal de salida del DAC este modulada por la senal de reloj. Elresultado se manifiesta en espureos simetricos alrededor de la frecuencia de la senalde salida.

Page 43: PFC Modulador Digital Programable modulAD mediBER

1.7 Consideraciones sobre el filtrado de salida 31

La unica defensa contra esta forma de espureos consiste en una buena tecnica de fab-ricacion del circuito impreso, con un buen desacoplo en las fuentes de alimentacion.

1.7. Consideraciones sobre el filtrado de salida

Fundamentalmente, un DDS es un sistema muestreado. Como tal, el espectro desalida es infinito. Aunque el dispositivo este “sintonizado” a una frecuencia especıfica, (sesupone que esta cae dentro del ancho de banda de Nyquist), en realidad, el espectro desalida consta de F0 y sus componentes de aliasing como se demostro en la seccion 1.2.Tambien se puede ver el espectro resultante en un ejemplo para un tono sintetizado en lafigura 1.7.

La teorıa de muestreo en banda base vigente en la generacion DDS implica, comoya se ha dicho, que la senal generada este en la primera zona de Nyquist. Sin embargo,siempre es necesario filtrar la salida del convertidor D/A, en primer lugar para eliminarlas componentes generadas fuera de esta zona, pero tambien para evitar el efecto nocivo decualquier senal o espureo que caiga fuera del ancho de banda de Nyquist, ya que tambientendran una imagen solapada dentro de esta zona. Por esta razon, un filtro anti-aliasing seusa en casi todas las aplicaciones DDS. Las especificaciones de este filtro pueden limitarel margen dinamico a determinadas frecuencias, como se puede ver en la figura 1.26. Enmuchas aplicaciones no se emplea todo el ancho de banda de Nyquist por lo que el empleode este filtro no es tan riguroso, aunque en las aplicaciones basadas en DSP si se sueleaplicar este criterio.

Figura 1.26: Filtro antialiasing

El filtro antialiasing es un elemento crıtico en el diseno de un sistema DDS. Existenmuchas clases de filtros en la literatura tecnica. Sin embargo, para la mayorıa de apli-caciones el campo se restringe a tres familias de filtros basicos. Los tres tipos de filtrosson las respuestas de las familias Chebyshev, Gausianos y de Legendre. Las aplicacionesde filtrado que requieren respuestas en frecuencia bastante abruptas utilizan respuestasde tipo Chebyshev. En este caso, en cambio, se asume que la respuesta en el dominio deltiempo no tiene gran importancia. Por contra, las aplicaciones de filtrado que requierencaracterısticas en el dominio temporal suaves (sobreimpulso y retardo de grupo constante)suelen utilizar la respuesta de tipo Gausiano. En estas aplicaciones se supone que no senecesitan transiciones abruptas en frecuencia. Para las aplicaciones que estan entre estosdos extremos, la familia de filtros de Legendre es la mejor eleccion.

En resumen, la complejidad del filtro antialiasing puede llegar a ser muy grande,especialmente cuando la senal de interes esta muy proxima a fs/2. Por ejemplo, si se

Page 44: PFC Modulador Digital Programable modulAD mediBER

1.7 Consideraciones sobre el filtrado de salida 32

emplea un filtro Butterworth que consigue 6 dB de atenuacion por octava, para obtener60dB de atenuacion en un ancho de banda de 1 a 2 Mhz se requiere un mınimo de 10polos, lo que no es ni mucho menos un filtro trivial. Por lo tanto, para aplicaciones dealta velocidad que utilicen todo el ancho de banda de Nyquist el filtro utilizado debe decumplir los siguientes requerimientos:

Transicion abrupta.

Respuesta plana en la banda de paso.

Respuesta en fase lineal.

Los filtros elıpticos suelen cumplir estos criterios y son la solucion mas popular, decualquier forma son filtros complejos y caros.

Otra posibilidad que permite relajar el filtro antialiasing es que no halla nunca unasenal de fondo de escala en alta frecuencia. Esto ocurre en muchas aplicaciones de altafrecuencia en las que la senal se concentra en una zona del espectro centrada en unafrecuencia.

De todas formas, cada aplicacion particular tiene sus propias connotaciones, y sera pre-ciso realizar un estudio pormenorizado de las especificaciones concretas a la hora de selec-cionar el filtro antialiasing. Seguidamente se recuerdan brevemente las caracterısticas masimportantes de las tres familias de filtros.

Las respuestas de la Familia Chebyshev

Esta familia generalmente ofrece caracterısticas abruptas en el dominio de la frecuen-cia. Como tal, la respuesta en el dominio del tiempo es bastante pobre con sobreimpulsosy retardos de grupo significativos. Esto hace que la familia de Chebyshev sea la adecuadaen aplicaciones para las cuales las caracterısticas en frecuencia son la premisa dominante,mientras que las caracterısticas temporales son de menor importancia.

Figura 1.27: Respuestas de la familia Chevyshev

La respuesta de Butterworth es completamente monotona. La atenuacion se incre-menta continuamente segun la frecuencia aumenta; es decir, no existe rizado en la curvade atenuacion. De la familia de filtros Chebyshev, la respuesta de Butterworth es la masplana. Su frecuencia de corte se toma como el punto de atenuacion a 3 dB. La atenuacioncontinua incrementandose con la frecuencia, pero el ritmo de atenuacion despues del cortees bastante lento.

La respuesta Chebyshev se caracteriza por rizados de atenuacion en la banda depaso seguida de atenuacion que se incrementa de forma monotona en la banda eliminada.

Page 45: PFC Modulador Digital Programable modulAD mediBER

1.7 Consideraciones sobre el filtrado de salida 33

Tiene una transicion de la banda de paso a la banda eliminada mucho mas abrupta que larespuesta de Butterworth. El coste es el rizado de la banda de paso. La profundidad de laatenuacion en la banda eliminada es directamente proporcional a la magnitud del rizadoen la banda de paso; cuanto mayor es el rizado, mas profunda es la atenuacion.

La respuesta Chebyshev Inversa se caracteriza por una atenuacion que se incrementacontinuamente en la banda de paso con rizado en la banda eliminada. Igual que en larespuesta de Chebyshev, cuanto mas grande es el rizado en la banda eliminada mas abruptaes la transicion de la banda de paso a la banda eliminada.

La respuesta elıptica ofrece la transicion desde la banda de paso a la banda elimi-nada mas profunda de toda esta familia. La contrapartida, por supuesto, son los rizadosde atenuacion. En este caso se producen tanto en la banda de paso como en la bandaeliminada. En aplicaciones de filtros anti aliasing, este suele ser el filtro utilizado debido alo abrupto de su region de transicion.

Las respuestas de la Familia Gausiana

La familia Gausiana de respuestas es la mas adecuada para aplicaciones en las que esfundamental la respuesta temporal. Ofrecen caracterısticas suaves en el dominio del tiempocon mınimo sobreimpulso. Ademas, el retardo de grupo es practicamente constante. Comolas caracterısticas en el dominio del tiempo tienen buen comportamiento, la respuestafrecuencial no exhibe transiciones muy abruptas. De hecho, la respuesta en frecuenciaes completamente constante. La curva de atenuacion siempre mantiene una pendientenegativa sin picos tanto en la banda de paso como en la banda eliminada.

La familia Gausiana se puede dividir en tres tipos de respuesta, cada una de ellas consus caracterısticas especiales. Son las respuestas Magnitud Gausiana, Bessel, y Retardo deGrupo con Rizado Constante. La figura 1.28 muestra estos tres tipos de respuesta. Aunquela curva de amplitud parece ser la misma en los tres tipos, cada una tiene su caracterısticaparticular en el dominio del tiempo para la que ha sido optimizada.

Figura 1.28: Respuestas de la familia Gausiana

La respuesta de Magnitud Gausiana esta optimizada para conseguir la curva enamplitud que mas se asemeje a la distribucion gausiana. La caracterıstica en el dominiodel tiempo ofrece respuesta de fase practicamente lineal con el mınimo sobreimpulso. Elretardo de grupo no es tan constante, pero es mucho mejor que el de la familia Chebyshev.

La respuesta de Bessel esta completamente optimizada para el retardo de grupo.Ofrece un retardo de grupo casi plano en la banda de paso. La respuesta de Bessel es aldominio de tiempo lo que la respuesta de Butterworth al dominio de la frecuencia. Estohace del filtro de Bessel la eleccion adecuada cuando el retardo de grupo es la principalespecificacion. Ofrece respuesta de fase practicamente lineal con el mınimo sobreimpulso.

Page 46: PFC Modulador Digital Programable modulAD mediBER

1.8 Caracterısticas de salida de los sistemas DDS 34

La respuesta de Retardo de Grupo con Rizado Constante esta optimizada para pro-porcionar rizados en la respuesta del retardo del grupo que no excedan el maximo especifi-cado en la banda de paso (muy parecido a la respuesta en amplitud del filtro Chebyshev).Debido a que la banda de paso completa ofrece un maximo retardo de grupo, este filtro esadecuado para aplicaciones de banda ancha donde el retardo de grupo se debe de controlarsobre la banda de interes en su totalidad. Al igual que en los otros filtros gausianos, larespuesta de fase es principalmente lineal con mınimo sobreimpulso.

La respuestas de la Familia Legendre

Figura 1.29: Respuesta de la familia Legendre

La familia de filtros Legendre consta de un unico tipo. Su respuesta en la banda depaso tiene ligeros rizados y es similar a la respuesta de Chebyshev de 0.1 dB de rizado.La respuesta en la banda eliminada decae continuamente. La velocidad de atenuaciondespues de la frecuencia de corte es mas pronunciada que la del tipo Butterworth, pero notanto como la del tipo Chebyshev. El retardo de grupo es virtualmente constante sobre elprimer 25 % de la banda de paso, pero se incrementa continuamente conforme se aproximala frecuencia de corte.

1.8. Caracterısticas de salida de los sistemas DDS

Los DDS de alta velocidad con DAC integrado proporcionan una salida en modocorriente. Esta corriente se puede aplicar a cualquier carga resistiva, incluyendo un corto-circuito, siempre que la tension generada en el pin de salida referida a masa, no viole laespecificacion de salida del DAC. Esta especificacion es simplemente la tension maximaque el pin de salida del DAC aguanta. Las tensiones que superen los lımites provocarandistorsion de salida del DAC de moderada a drastica. Normalmente, las salidas se termi-nan a masa mediante una resistencia, aunque se pueden terminar a cualquier otra tensionque no viole las especificaciones de operacion del DAC. Por regla general la corriente desalida se puede predefinir mediante una resistencia conectada a un pin especial.

Los convertidores D/A con salida de tension se evitan en aplicaciones DDS debidoa que las perdidas internas provocarıan que la salida variara de acuerdo con la resistenciade carga. Las salidas de alta impedancia suministran su corriente especificada con pocasvariaciones de salida a o desde la carga siempre que no se sobrepasen las especificacionesde tension de salida. Los DACs con conmutadores de corriente generalmente son los queexhiben mejores prestaciones a velocidades de reloj altas.

La especificacion de resistencia de salida de un DDS/DAC es la impedancia combi-nada de los dispositivos CMOS que forman los conmutadores y la circuiterıa de la fuente

Page 47: PFC Modulador Digital Programable modulAD mediBER

1.8 Caracterısticas de salida de los sistemas DDS 35

de corriente. Normalmente es tan alta (usualmente mayor de 100K), que su presenciase puede ignorar y es la resistencia de carga elegida por el usuario la que determina laimpedancia de salida del sistema.

En DACs con salida de corriente de tipo unipolar, si la resistencia de carga esta ter-minada en masa, entonces los voltajes que se desarrollan en la resistencia variaran entre0 y un valor extremo positivo o negativo (fondo de escala). Por el contrario, una corrientebipolar desarrollara una tension negativa en un extremo (0 de escala) y positiva en el otro(fondo de escala). El punto medio entre los dos extremos suele ser 0 voltios.

¿En que afecta el que la corriente sea unipolar? Primero, los puntos centrales de laforma de onda senoidal de salida del DDS tendran un offset de continua que estara en elpunto central del margen de fondo de escala. Esto puede ser importante cuando se aplicala senal de salida a algun amplificador acoplado en continua para evitar que la componentede continua provoque recortes en la forma de onda. Por otro lado, cuando se modula enAM la salida utilizando la resistencia de control de corriente del DAC, la envolvente de lamodulacion sera asimetrica, asemejandose mas a una salida pulsada, que a una portadoramodulada simetricamente.

1.8.1. Acoplamiento con transformador simetrico

Existen DDS-DAC cuya salida se compone de 2 terminales en oposicion de fase.Estas dos senales se pueden combinar en un transformador de RF con toma intermediapara producir formas de onda simetricas tal y como se muestra en la figura 1.30. En estoscasos, cuando se programa la corriente de salida del DAC, se esta programando la suma delas dos corrientes disponibles en las salidas IoutA e IoutB. Por ejemplo, si se programa unacorriente de fondo de escala de 10mA, entonces si una salida tiene 2 mA, la otra tendra 8mA. Combinando estas dos corrientes complementarias en un transformador, la salida decorriente se convierte en simetrica y se pierde el offset de continua.

Figura 1.30: Combinacion de salidas complementarias en un DDS-DAC

El acoplamiento por transformador tambien es beneficioso cuando se quiere acoplarlas corrientes de salida del DAC a entradas reactivas como filtros LC . El camino de bajaimpedancia existente a masa a traves de la toma central del transformador es muchomejor que tomar el camino reactivo a traves del filtro LC que esta terminado solamentea la salida del filtro, figura 1.31 (c). Sin transformador, el siguiente metodo preferible esaplicar la corriente de salida del DAC a un filtro LC que este doblemente terminado, comose muestra en la figura 1.31 (b).

Las flechas en la figura 1.30 muestran el flujo de corriente en el primario del trans-formador 1:1 de banda ancha y como la corriente unipolar de 2 salidas complementariasse puede usar para simular una corriente bipolar. La resistencia de carga de 50Ω del se-cundario del transformador se refleja en el primario donde aparece como una resistencia

Page 48: PFC Modulador Digital Programable modulAD mediBER

1.8 Caracterısticas de salida de los sistemas DDS 36

Figura 1.31: Acoplo de cargas reactivas a la salida del conjunto DDS-DAC

de carga de 25Ω para cada salida. Se puede escoger otra relacion de transformacion dis-tinta, lo que permite cargas diferentes siempre que no se viole la especificacion de salidadel DDS-DAC. En el ejemplo de la figura, los voltajes presentes en los pines de salida noseran unipolares como lo serıan si cada pin estuviera conectado mediante una resistenciade carga a tierra. En cambio, seran bipolares y simetricos alrededor de la tension presenteen el punto central del transformador (masa en el ejemplo) a causa del efecto producidopor los acoplamientos magneticos del transformador. Se necesita prestar atencion a la es-pecificacion de tension negativa ademas de a la positiva cuando se configuran las salidaspara acoplamiento de transformador.

Otro beneficio del acoplamiento por transformador es el fenomeno del rechazo delmodo comun. Si las salidas del DDS-DAC IoutA e IoutB contienen senales comunes oidenticas tales como acoplamiento del reloj, componentes de la fuente de alimentacion, yotras senales espureas, estas senales se pueden ver reducidas o eliminadas en el espectro desalida por el acoplamiento del transformador. Si las senales identicas estan presentes en lasdos entradas del primario del transformador, entonces sus campos opuestos se cancelaranuno a otro en algun grado. El grado de cancelacion depende de la coincidencia del bobinadodel transformador ademas de la coincidencia de las senales “identicas”.

1.8.2. Consideraciones sobre la potencia de salida

Combinar dos salidas complementarias en un transformador no ofrece ninguna ganan-cia de potencia. La unica manera de incrementar la potencia de salida es configurando unacorriente de salida mayor mediante la resistencia de ajuste de corriente. Se deben consultarlas hojas del fabricante y elevar la corriente de operacion hasta cerca del nivel maximo;sin embargo, la distorsion armonica de la salida puede incrementarse ligeramente. La uti-lizacion de un transformador permite la transferencia mas eficiente de la potencia a lacarga, eliminando la necesidad de una resistencia de terminacion que disipe potencia quedebe transferirse a la salida.

Page 49: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 37

1.8.3. Terminacion de salida del DDS-DAC

Sin tener en cuenta el esquema de terminacion de salida que se escoja, la experienciaha demostrado que la supresion optima de armonicos y espureos se consigue cuando lassalidas complementarias estan terminadas de la misma manera. Si esto no se hace, puedeque no se note la diferencia a bajas frecuencias, pero a altas frecuencias de salida, dondecada dB de SFDR cuenta, esta practica dara un espectro de salida mas limpio, espureosmas debiles y mayor SFDR.

1.9. Modulacion digital con DDS

Dado que nuestro montaje es un DDS en funciones de modulador, dedicaremos esteapartado a comentar las caracterısticas particulares de este metodo de modulacion.

Ya sabemos que modular una senal es trasladarla en el espectro. Matematicamente,esto se consigue multiplicando la senal a modular por una sinusoide, lo que desplaza la senalmodulada en ±fc, con fc la frecuencia de la senal senoidal moduladora. Existe tambienla variante de modulacion en cuadratura en la que dos informaciones se modulan con dossenales senoidales de la misma frecuencia desfasadas π/2.

La figura 1.32 muestra los diagramas de bloque funcionales de las dos estructurasbasicas de modulacion. La figura (a) muestra modulacion senoidal, mientras que (b) repre-senta modulacion en cuadratura. Habrıa que anadir las variaciones de estos dos esquemaspara producir formas especializadas de modulacion como banda lateral unica y doble ban-da lateral.

Figura 1.32: Estructuras de modulacion basicas en el dominio temporal

La modulacion digital es la contrapartida en tiempo discreto a los conceptos demodulacion en tiempo continuo que se acaban de mencionar. En vez de tratar con formas deonda analogicas, x(t), ya sabemos que tratamos con muestras instantaneas de esas ondas,x(n). Aquı, n que es un numero entero, equivale a los instantes de muestreo en el tiempo.Esto es, si T representa el intervalo de tiempo entre muestras sucesivas, nT representa eltiempo instantaneo en que se toman las muestras. La similitud entre senales en tiempocontinuo y discreto resulta obvia cuando se escriben juntas. Por ejemplo, considere unasenal sinusoidal

x(t) = Acos(ωt) tiempo continuo

x(n) = Acos(ωnT ) tiempo discreto

Page 50: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 38

La principal diferencia en la senal en tiempo discreto es que existen ciertas restric-ciones sobre ω y T como resultado del teorema de Nyquist. Especıficamente, T debe sermenor de π/ω. Como x(n) es una serie de muestras instantaneas de x(t), entonces x(n) sepuede representar como una serie de numeros, cada uno de ellos es el valor instantaneo dex(t) en los instantes nT.

Esta idea es fundamental para comprender los moduladores digitales. La modulacionen el mundo analogico se consigue multiplicando formas de onda continuas en el tiempoutilizando circuitos analogicos especializados. Sin embargo, en el mundo digital es posibleconseguir la modulacion simplemente manipulando secuencias de numeros. Una operacionpuramente numerica.

Los esquemas de modulacion para senales en tiempo continuo se pueden adaptar enlas moduladores digitales tal y como se muestra en la figura 1.33.

Figura 1.33: Estructuras de modulacion basicas digitales

Aquı, g(n), g1(n), g2(n), sen(ωcnT ) y cos(ωcnT ) son secuencias de numeros. Los mul-tiplicadores y sumadores son elementos logicos. Su complejidad es funcion del numero debits utilizados para representar las muestras de las formas de onda de entrada. Esto parecefacil en teorıa. Sin embargo, cuando se implementan en hardware, el numero de elementosde circuiterıa puede crecer muy rapidamente. Por ejemplo, si las formas de onda digital serepresentan como numeros de 8 bits, entonces se requieren multiplicadores y sumadorescapaces de manejar palabras de 8 bits. Por otra parte, si las senales digitales estan repre-sentadas por numeros flotantes de doble precision (64 bits), entonces los multiplicadoresy sumadores se convierten en estructuras muy grandes.

Es en el entorno de los moduladores digitales donde la tecnologıa DDS se vuelvemas atractiva. Ello es debido a que un DDS genera directamente las series de numerosque representan muestras de una onda senoidal o cosenoidal. Estructuras de moduladoresdigitales basadas en DDS se muestran en la figura 1.34.

Figura 1.34: Estructuras de modulacion basicas DDS

Page 51: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 39

1.9.1. Requerimientos y arquitectura del sistema

Las estructuras de modulacion basicas DDS descritas en la seccion previa son muysimples. Falta anadir el resto de componentes constitutivos de un DDS para que un mod-ulador digital trabaje en la practica. El elemento mas crıtico es la fuente de reloj. Un DDSpuede solo generar muestras si esta alimentado de un reloj de muestreo. Tambien, hemosvisto que se necesitaba un convertidor A/D para trasformar el conjunto de numeros quese mueve por el interior de la estructura DDS en senales reales.

Un modulador DDS mas realista se presenta en la figura 1.35. Con objeto de fa-cilitar la exposicion unicamente se muestra el modulador sinusoidal. La extension a unaestructura de modulacion en cuadratura es trivial.

Figura 1.35: Modulador DDS

A primera vista, el modulador DDS parece bastante simple. Sin embargo, existeuna serie de requerimientos que hacen que la modulacion digital sea un poco mas difıcilde implementar. Este requerimiento es que g(n) debe de ser una secuencia muestreadaa la misma frecuencia que la velocidad de muestreo del DDS. De lo contrario, la etapade multiplicacion estarıa multiplicando valores que hubiesen sido tomados en instantes detiempo completamente distintos.

Pongamos un ejemplo sencillo. Supongamos que la senal moduladora vale

g(n) = cos[2π(1khz)nT1]

donde T1 vale 0.25 ms. Por tanto, g(n) se puede describir como una senal de 1 Khzmuestreada a 4 Khz. Supongamos, tambien, que la salida del DDS es

DDS = cos[2π(3khz)nT2]

donde T2 es igual a 0.1 ms. Esto significa que la salida del DDS es una senal de3khz muestreada a 10 Khz. En el modulador DDS, el valor de n (el ındice de muestra)del multiplicador es el mismo tanto para las entradas como para las salidas. Ası, para unvalor especıfico de n, digamos n = 10, el ındice del tiempo para el DDS es nT2, el cualvale 1 ms. Claramente, nT1 6= nT2 (2.5 ms 6= 1 ms). Por tanto, en un ındice de tiempon=10, el tiempo DDS es 1 ms mientras que el tiempo g(n) es 2.5 ms. La consecuencia esque el resultado de salida del multiplicador g(n)cos(ωcnT ), no es lo que se espera que sea,debido a que la referencia de tiempo de g(n) no es la misma que la de cos(ωcnT ).

El requerimiento de “coincidencia en la velocidad de muestreo” es la primera consid-eracion de diseno en un modulador digital. Si, en un sistema de modulacion DDS, la fuentede la senal g(n) opera a una velocidad de muestreo distinta a la del reloj DDS, se debende realizar los pasos necesarios para corregir esta discrepancia en velocidad. El diseno deun modulador DDS se convierte entonces en un ejercicio de procesamiento digital de senalmultimuestreo. Este tipo de procesado requiere un conocimiento de las tecnicas implicadas

Page 52: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 40

de interpolacion y decimado. Sin embargo, la interpolacion y el decimado requieren algunconocimiento de filtros digitales. De todo ello hablaremos en las siguientes secciones.

1.9.2. Filtros digitales

Los filtros digitales son la contrapartida en tiempo discreto a los filtros analogicosde tiempo continuo. Ya se repasaron algunas caracterısticas sobre filtros analogicos en elapartado 1.7 cuando se trato el filtrado antialiasing de la salida del DDS.

Existen dos tipos basicos de filtros digitales; uno es el tipo FIR (respuesta al impulsofinita) y el otro es el filtro IIR (respuesta al impulso infinita). Desde el punto de vista deldiseno de filtros, el tipo FIR es el mas sencillo de trabajar. Sin embargo, desde el punto devista de los requerimientos hardware, el IIR tiene una ventaja. Usualmente requiere muchamenos circuiterıa que un filtro FIR para la misma respuesta basica. Desafortunadamente,el tipo IIR tiene la caracterıstica de ser potencialmente inestable bajo ciertas condiciones.Esta propiedad lo excluye a menudo en sistemas donde no se conoce a priori la senal deentrada.

1.9.2.1. Filtros FIR

Fundamentalmente, un FIR es una estructura muy simple. Esta compuesto de unacadena de etapas de retardo, multiplicacion, y suma. Cada etapa consta de un camino dedatos de entrada y de salida y un coeficiente fijo (que sirve como uno de los multiplicandosen la seccion multiplicadora). La figura 1.36 muestra un filtro FIR de 2 etapas.

Figura 1.36: Filtro FIR basico

Para este filtro simple obtenemos la secuencia de salida:

y(n) = a0x(n) + a1x(n− 1)

Esto quiere decir, para un instante dado, que la salida del filtro FIR no es ni masni menos que la suma de la muestra actual y de la muestra anterior ponderadas por losvalores a0 y a1 respectivamente.

Realizando la transformada z de la ecuacion anterior, la funcion de transferenciaH(z), resulta:

H(z) = a0 + a1z−1

donde z = ejω, ω = 2πf/Fs y Fs es la frecuencia de muestreo.Ahora apliquemos algunos numeros a nuestro ejemplo para hacer las cosas un poco

mas visuales. Supongamos que empleamos una velocidad de muestreo de 10 khz y uti-

Page 53: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 41

lizamos a0 = a1 = 0,5. La representacion de H(z) en funcion de la frecuencia resulta en lafigura 1.37.

Figura 1.37: Respuesta FIR del ejemplo

Claramente, esto constituye una respuesta del tipo paso bajo. En la figura solo serepresenta el ancho de banda de Nyquist por la caracterıstica de simetrıa en la banda defs/2 a fs.

El comportamiento de un filtro FIR es facil de analizar si se calcula su respuestaimpulsiva. Su calculo se realiza de forma similar al equivalente analogico. En este caso, lasecuencia de entrada que se utiliza es la secuencia impulso unitario δ(n) = 1, 0, 0, 0, 0, 0, . . .En la figura 1.38, que representa un filtro FIR de n etapas generalizado, el 1 inicial dela secuencia δ(n) se propaga a cada pulso de reloj hasta la ultima etapa de retardo. Estosignifica que y(n) = 0 despues de la n-esima muestra y tambien permanecera a 0 enadelante.

Se observa entonces que la respuesta impulsiva solo existe durante n muestras. Deaquı su nombre, filtro de respuesta al impulso finita. Ademas, la respuesta impulsiva tam-bien demuestra que una entrada a un filtro FIR necesita exactamente n muestras parapropagarse a traves del filtro completo antes de que su efecto este presente a la salida. Elincremento del numero de etapas n incrementara el retardo total a traves del filtro final.Esto puede ser un problema en sistemas que son poco tolerantes al retardo. Sin embar-go, la ventaja inherente al incrementar n es que se aumenta la pendiente de la curva derespuesta.

La ecuacion que expresa la salida y(n) en funcion de la entrada x(n) en el dominiotemporal es:

y(n) = a0x(n) + a1x(n− 1) + a2x(n− 2) + . . .+ aN−1x(n−N − 1) (1.27)

resultando una ecuacion de transferencia H(z), para un filtro FIR multietapa de N coefi-cientes de realimentacion:

H(z) = a0 + a1z−1 + a2z

−2 + . . .+ aN−1z−(N−1) (1.28)

1.9.2.2. Filtros IIR

La diferencia entre un IIR y un FIR esta en la realimentacion. Un filtro IIR tiene unaseccion de alimentacion con retardo, multiplicacion y suma adicionales. En la figura 1.39se muestra una estructura simple IIR.

La parte de la izquierda es una copia exacta de un filtro FIR; esta porcion del IIR seconoce normalmente como la seccion “feedforward”. La porcion de la derecha es la seccionde realimentacion “feedback”. La realimentacion es una version retardada y escalada de

Page 54: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 42

Figura 1.38: Filtro FIR generalizado

Figura 1.39: Filtro IIR basico

Page 55: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 43

la senal de salida y(n), y todo ello se suma con la salida de la seccion feedforward. Laexistencia de realimentacion en un filtro IIR supone una diferencia sustancial en el com-portamiento del filtro. Como en cualquier sistema realimentado, la estabilidad se convierteen un asunto importante. La eleccion inadecuada de los coeficientes o un desconocimientode la senal de entrada pueden provocar inestabilidades en un IIR. El resultado puede seroscilaciones o distorsion severa de la senal de salida. El problema de la estabilidad puedeser suficiente para excluir el uso de un IIR en ciertas aplicaciones.

El ejercicio de calculo de la respuesta impulsiva realizado para el filtro FIR anteriorpuede servirnos de ayuda para examinar el comportamiento del IIR. El comportamiento dela parte izquierda es exactamente identico, esto es, despues de n muestras su salida sera 0.La diferencia reside en el bloque de realimentacion de la derecha. Cada nuevo instantede muestreo modifica el valor de y(n) con el valor anterior de y(n) recursivamente. Elresultado es que y(n) continua sacando valores indefinidamente, incluso aunque la senalde entrada haya desaparecido. Ası, un impulso unico a la entrada puede resultar en unasecuencia infinita de impulsos a la salida. De aquı el nombre, filtro de respuesta al impulsoinfinita.

Aun ası, el concepto infinito es un ideal en la practica. Los filtros IIR solo puedenser implementados con una cantidad finita de resolucion numerica. Por ejemplo, en apli-caciones donde el camino de datos se debe restringir, digamos a palabras de 16 bits, losvalores muy pequenos seran redondeados a un valor de 0. Esto lleva a que el funcionamien-to del IIR se desvıe del ideal. Un filtro IIR ideal continuarıa infinitamente su salida convalores que se aproximarıan a 0 gradualmente. Sin embargo, a causa de la resolucion finita,llega un momento en que los valores se redondean a 0 y por tanto provocan el fin de la“respuesta impulsiva infinita”.

La estructura de un filtro IIR simple nos lleva, al igual que en caso anterior, a ladescripcion de un filtro IIR multietapa. En este caso, sin embargo, los lados izquierdo yderechos del filtro IIR no tiene porque tener el mismo numero de etapas de retardo. Porlo tanto, la cantidad de coeficientes A y B no tiene por que ser la misma. La figura 1.40muestra un filtro IIR multietapa.

Examinando la figura obtenemos al ecuacion de la salida y(n), en terminos de laentrada x(n). El resultado es

y(n) = a0x(n) + a1x(n− 1) + a2x(n− 2) + . . .+ aN−1x(n−N − 1)+b1y(n− 1) + b2y(n− 2) + . . .+ bMy(n−M)

(1.29)

cuya funcion de transferencia general, H(z) resulta ser, para un filtro IIR multietapa de Ncoeficientes de realimentacion hacia delante y M coeficientes de feedback:

H(z) =a0 + a1z

−1 + a2z−2 + . . .+ aN−1z

−(N−1)

1− b1z−1 − b2z−2 − . . .− bMz−M(1.30)

1.9.3. Procesado DSP a varias velocidades

Este proceso consiste en convertir datos muestreados con una frecuencia Fs1 a datosmuestreados a otra velocidad Fs2. Si Fs1 > Fs2, el proceso se llama decimado. Si Fs1 < Fs2,el proceso se denomina interpolacion.

La necesidad del procesamiento a diferentes velocidades se pone de manifiesto conel siguiente ejemplo. Supongamos que tenemos 1.000 muestras de una onda senoidal de un

Page 56: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 44

Figura 1.40: Filtro IIR generalizado

1 Khz almacenadas en memoria, y que estas muestras se adquirieron con una velocidadde muestreo de 10 Khz. Esto implica que la duracion en tiempo del conjunto completo demuestras es 100 ms (1000 muestras a 10.000 muestras/seg.). Si este mismo conjunto demuestras es ahora leıdo de la memoria a una velocidad de 100 Khz, solo se necesitaran 10ms para extraer todos los datos. Por tanto, las 1.000 muestras de datos a una velocidadde 100 Khz pareceran ahora una onda de 10 Khz en lugar de la onda original a 1 Khz.Obviamente, si se cambia la velocidad de muestreo pero no los datos, el resultado esindeseable. Sin embargo, si los datos originales a 10 Khz representaban una senal de 1Khz, serıa deseable tener tambien una salida muestreada a 100 Khz de una senal de 1Khz. Para hacer esto posible se deben modificar de alguna manera los datos originales.

1.9.3.1. Interpolacion

El problema del ejemplo es un caso de interpolacion. La funcion de un interpoladores tomar datos que fueron muestreados a una velocidad y convertirlos en nuevos datosmuestreados a otra velocidad mas alta. Los datos deben de ser modificados de tal modo quecuando se muestreen a mayor velocidad se preserve la senal original. Una representaciongrafica del proceso de interpolacion se muestra en la figura 1.41.

Figura 1.41: Interpolador basico

Page 57: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 45

Se pueden distinguir dos procesos separados: una seccion de entrada que muestrea auna velocidad Fs y una seccion de salida que muestrea a otra velocidad nFs donde n es unnumero entero positivo mayor de 1. La estructura de un interpolador basico indica que paracualquier muestra de entrada habra n muestras de salida. Esto nos plantea la pregunta:¿que debemos de hacer a los datos originales de manera que, cuando se muestreen a unavelocidad mas alta, la senal original quede preservada?.

Se podrıa razonar intuitivamente que, si se insertan n − 1 ceros entre cada una delas muestras de entrada, (zero stuffing), entonces el dato de salida tendrıa la caracterısticadeseada. Despues de todo, anadir nada (0) a algo, no deberıa cambiarlo. Es un buen puntode partida, aunque todavıa nos faltarıa algo mas para completar el cuadro.

Figura 1.42: Vision en el dominio frecuencial de la interpolacion

Tal y como se aprecia en la figura 1.42, que es un ejemplo para un factor de interpo-lacion de 3, el proceso de interpolacion genera replicas del espectro de la senal original queahora caen dentro del nuevo ancho de banda de Nyquist, 3 veces mayor. Es decir, que paraque la senal interpolada mantenga las propiedades de la senal original, es preciso realizarun filtrado pasobajo a posteriori, que elimine esas componentes “replicas”. Lo normal esrealizarlo mediante un filtro FIR en el dominio digital.

1.9.3.2. Decimado

En este caso la funcion del decimado es la opuesta a la de la interpolacion: datos quefueron adquiridos a una velocidad de muestreo Fs1 se vuelven a muestrear a otra velocidadmenor submultiplo entero de la original Fs2 = Fs1/m.

La figura 1.43 muestra el esquema de un decimador simple, con m un entero iguala la relacion entre las dos frecuencias de muestreo. De nuevo se nos plantea la mismacuestion que en el apartado anterior: ¿como se deben de manipular los datos originales

Page 58: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 46

para que tomandolos a una velocidad menor no se cambien las caracterısticas originalesde la senal?

Figura 1.43: Decimador basico

Se podrıa pensar que tomando las muestras m-esimas de la trama original y despre-ciando las demas, la senal resultante de salida tendrıa las mismas propiedades. La idea esbuena pero todavıa no tendrıamos toda la solucion. Observemos la figura 1.44, donde denuevo se utiliza un ejemplo sencillo en el que la relacion entre las frecuencias de muestreoes 3.

Figura 1.44: Vision en el dominio frecuencial de la decimacion

En este caso, al ser la frecuencia de muestreo de salida 3 veces menor a la de entrada,el criterio de Nyquist cambia y se hace mas restrictivo. Para evitar el aliasing en la senalde salida, es preciso asegurarnos de que la senal de entrada al interpolador cumpla con elcriterio de Nyquist en el nuevo marco de salida, es decir, en un ancho de banda de Nyquist3 veces menor al de la senal original.

Esto nos lleva a la regla clave de la decimacion: El ancho de banda de los datosantes de la decimacion debe de confinarse al ancho de banda de Nyquist de la velocidad demuestreo menor de salida. Ası, para un factor de decimacion de m, la informacion originaldebe de residir en un ancho de banda dado por Fs1/(2m), con Fs1 igual a la velocidad

Page 59: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 47

original de muestreo. Si los datos originales contienen informacion valida en la porcion delespectro mas alla de Fs1/(2m), el decimado no es posible. Este serıa el caso del ejemplo,si la porcion del espectro de los datos originales mas alla de Fs1/6 de la figura 1.44 fueseparte integrante de la senal de informacion en lugar de ruido o senales interferentes.

El filtrado pasobajo previo de la trama digital a decimar se suele realizar, al igual queen el caso de la interpolacion, mediante filtros FIR. El paso siguiente consiste en “sacar”cada muestra m-esima utilizando la velocidad de muestreo menor de salida. El resultadose puede ver en la figura 1.44 (c).

1.9.3.3. Conversion de velocidad racional n/m

Los procesos que se acaban de describir de interpolacion y decimado solo permitencambios de velocidades de muestreo enteras. Si se precisa un cambio racional en la veloci-dad, se pueden llevar a cabo los dos procesos en cascada. Sin embargo, es importante paraque no se pierdan las caracterısticas originales de la senal, que el proceso de interpolacionpreceda al proceso de decimado. De lo contrario, sera preciso confinar el ancho de bandade los datos originales a Fs/(2m), donde Fs es la velocidad de muestreo original.

Figura 1.45: Convertidor de velocidad de muestreo n/m basico

1.9.3.4. Filtros digitales multivelocidad

Hemos visto que tanto en interpoladores como en decimadores se precisa el usode filtros pasobajo. En estos casos, se pueden utilizar los conocidos filtros FIR, aunqueexisten otros tipos de filtros que no se han mencionado hasta ahora y que encuentranuna aplicacion ideal en los casos de cambio de velocidad de muestreo. Son los filtros FIRpolifase y los filtros peine-integrador en cascada, CIC.

Filtro FIR polifase

Este filtro esta particularmente indicado para aplicaciones de interpolacion. Nor-malmente la interpolacion comienza con la insercion de n− 1 ceros entre cada muestra desenal, para posteriormente filtrarse la trama resultante una vez muestreada a la velocidadde salida.

Sin embargo, es posible hacer todas las operaciones de una vez, si el filtro FIR sedisena de una forma peculiar: En principio, el filtro se disena normalmente pensando enque la frecuencia de muestreo va a ser nFs. Como resultado se obtendra un filtro FIRde un cierto numero de etapas, T. Ahora, se anade a cada etapa un numero de retardosigual a n − 1, que equivalen a las mismas operaciones de multiplicacion por cero entrecada etapa del filtro FIR. De esta manera se consigue la respuesta deseada, a la vez que

Page 60: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 48

se realiza la insercion de los ceros de relleno. El resultado es un filtro FIR de nT etapas,pero con (n− 1)T de las etapas multiplicadas por cero.

Filtro peine-integrador en cascada, (Cascaded Integrador-Comb, CIC)

El filtro CIC es la combinacion de un filtro peine y de un integrador. Un filtro peinees un filtro FIR simple que contiene un retardo y una etapa sumadora. El integrador esun tipo de filtro IIR pero sin bloque de realimentacion hacia adelante. Un diagrama debloques de ambas estructuras se incluye en la figura 1.46.

Figura 1.46: Etapas basicas de los bloques filtro peine e integrador

Una caracterıstica importante que hace a esta topologıa tan atractiva es el hechode no incluir etapas multiplicadoras: en el integrador se da la multiplicacion implıcitapor uno, mientras que el filtro peine lleva implıcita la multiplicacion por −1, pero estapuede realizarse facilmente mediante una negacion. Con esta ausencia de multiplicadoresse consigue un ahorro tremendo en hardware comparado con las arquitecturas tıpicas FIRe IIR.

Por lo que respecta a la curva de respuesta en frecuencia, el filtro peine actua comofiltro eliminabanda. Para la etapa simple de la figura 1.46, aparecen dos puntos de aten-uacion, uno en DC y otro a la frecuencia de muestreo Fs. Anadiendo etapas de retardo,se puede modificar ligeramente la curva de respuesta. De hecho, K bloques de retardoproducen K + 1 puntos de atenuacion equiespaciados. De los K + 1 puntos, uno ocurre enDC y otro en Fs. El resto se distribuye de manera equiespaciada entre DC y Fs.

Por otra parte, el integrador actua como filtro pasobajo. La respuesta de cada bloquese representa en la figura 1.47, normalizadas a Fs.

Figura 1.47: Respuesta en frecuencia de los bloques basicos del filtro peine y delintegrador

El filtro CIC se construye conectando en cascada los bloques de integrador y filtropeine. Con vista a realizar la conversion de velocidad de muestreo, el integrador se opera

Page 61: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 49

a una velocidad mientras que el filtro peine funciona con otra distinta siempre divisorentero de la frecuencia de muestreo del integrador. Lo interesante del montaje es quepuede funcionar tanto de interpolador como de decimador dependiendo del orden en quese conecte cada etapa. Esta importante caracterıstica se representa en la figura 1.48.

Figura 1.48: CIC funcionando de interpolador y de decimador

En el caso de filtro CIC funcionando en modo de interpolacion, hay que anadiruna ligera puntualizacion para que el montaje funcione adecuadamente. La modificacionconsiste en que la etapa de integracion debe de ser capaz de realizar el rellenado de cerosa su entrada, para asimilar el incremento de velocidad de muestreo. Para cada muestrasuministrada por el filtro peine, el integrador debe de insertar n− 1 ceros.

En la figura 1.49 se aprecia la respuesta en frecuencia de un filtro basico CIC paraun factor de interpolacion o decimado de 2. (m o n = 2 en la figura anterior).

Figura 1.49: Respuesta en frecuencia del filtro CIC basico

En esta figura se pone de manifiesto uno de sus problemas potenciales, la distorsionde atenuacion. Se puede ver como el nulo se produce para la frecuencia normalizada def = 0,5. Como se representa un ejemplo con factor de interpolacion igual a 2, resulta unancho de banda de Nyquist de f = 0,25. En ese punto, la curva de respuesta manifiestauna caıda de aproximadamente 5 dB, en lo que corresponderıa a la banda de paso de lasenal. Esta caıda puede resultar un problema serio en algunas aplicaciones a menos que secompense de alguna manera.

Un metodo de compensacion consiste en preceder la etapa CIC con un filtro inversoque corrija la caıda que se produce en el a lo largo del ancho de banda de Nyquist. Otrometodo consiste en asegurar la limitacion en banda de los datos de entrada, de forma quese asegure que su banda esta concentrada lejos de la caıda de la curva de respuesta en laparte mas hacia la izquierda de la grafica, donde esta es practicamente plana.

Existen dos metodos de cambiar la curva de respuesta basica de la figura 1.49. Elprimer metodo consiste en aumentar el numero de etapas en cascada, siempre insertandoel mismo numero de etapas de filtro peine que de etapas integradoras. Un ejemplo en el

Page 62: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 50

que se utilizan el triple de etapas se representa en la figura 1.50 (a).

(a)

(b)

Figura 1.50: Variaciones al bloque CIC basico(a) Interpolador CIC triple(b) Decimador CIC con doble retardo

El segundo metodo es anadir multiples retardos dentro de la seccion de filtro peine,siempre anadiendo el mismo numero de retardos a todas las etapas peine en el caso deexistir varias de ellas en cascada. Un ejemplo de un filtro basico CIC con un bloque deretardo adicional en la etapa de filtro peine se representa en la figura 1.50 (b).

El efecto de cada una de estas opciones se representa en la figura 1.51, junto con larespuesta basica para comparacion. En cada caso se ha empleado un factor de cambio develocidad de muestreo igual a 2.

(a) (b) (c)

Figura 1.51: Comparacion de las respuestas CIC modificadas

La grafica (b) corresponde a un aumento del numero de etapas en cascada, apre-ciandose como se incrementa la pendiente de caıda y la amplitud de la banda eliminada.

Page 63: PFC Modulador Digital Programable modulAD mediBER

1.9 Modulacion digital con DDS 51

Por otro lado, la grafica (c) representa el caso de adiccion de etapas de retardo en laetapa de filtro peine, que resulta en un incremento del numero de ceros de la funcion detransferencia. Tambien se incrementa la atenuacion en la banda de paso, disminuyendosea su vez en la banda eliminada. Se suele emplear una combinacion de los dos metodos paraconseguir respuestas de tipo variado.

1.9.3.5. Consideraciones acerca del sincronismo entre el reloj y los datos deentrada

En los moduladores digitales es importante mantener la correcta temporizacion entrela fuente de datos y el modulador. En la figura 1.52 se representa un ejemplo de diagramade bloques de un modulador digital que se parece bastante al utilizado en el trabajopractico. La primera fuente de tiempo en un modulador DDS es el reloj que alimenta alDDS. De este modo se establece la velocidad de muestreo en las senales seno y cosenodel modulador. Ahora, cualquier senal que se propague desde la entrada de datos hastael modulador debe de muestrearse a la misma velocidad que la portadora de salida. Estoes importante para que exista una correspondencia uno a uno con las muestras de laportadora. De otro modo, se puede deducir que las operaciones de procesado llevadas acabo en el interior del modulador no se realizaran adecuadamente.

Figura 1.52: Diagrama de bloques de un modulador DDS generico

Aquı es donde entra en juego el bloque llamado “convertidor multivelocidad” de lafigura 1.52. Es la manera de trasladar la velocidad de datos de entrada hasta la frecuenciade muestreo del DDS. Como este convertidor solo puede trabajar con un factor racional, esadebe de ser obligatoriamente la relacion entre la velocidad de datos y el reloj del sistema.Es decir, el reloj del sistema debe operar a un factor n/m veces el reloj de datos (o unmultiplo entero de ese factor). En los sistemas moduladores corrientes, este convertidor develocidad esta formado simplemente por una o varias etapas de interpolacion o decimado.En estos casos, el multiplicador de reloj es simplemente un multiplicador o un divisor porun entero. Por tanto, la fuente de datos y el reloj del sistema estan relacionados por unmultiplo entero en lugar de por un multiplo fraccional.

En el capıtulo 4 dedicado al modulador DDS realizado en la practica, veremos quela relacion entre las dos velocidades de reloj se adecua mediante dos etapas interpoladorasCIC en cascada con factor de interpolacion ajustable para acomodar diferentes velocidadesde datos de entrada.

Page 64: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 52

1.10. Evolucion y tecnicas auxiliares en los DDS

Las retos mas obvios de un DDS son la velocidad (ancho de banda) y la pureza es-pectral. Ambos estan relacionadas inversamente, mientras que ancho de banda y consumolo estan de forma directa. Cuanto mas densa es la circuiterıa, mas precisa es la formade onda de salida y se suprimen mas los espureos, pero la circuiterıa adicional limita lavelocidad y de aquı el ancho de banda, etc. Otros factores son a menudo importantes,incluyendo funciones de modulacion, velocidad de conmutacion o actualizacion. Actual-mente se encuentran facilmente dispositivos DDS con convertidores D/A integrados de 10bit soportando velocidades de reloj internas de 180 MHz. El actual “estado del arte” entecnologıa DDS se encuentra a 300 MHz de velocidades de reloj con un convertidor D/Aintegrado de 12 bits.

Las tendencias actuales de desarrollo de la tecnologıa DDS focalizan su atencion enla mejora de los convertidores D/A. La pureza espectral esta relacionada con la resoluciondel DAC. Si bien es teoricamente posible multiplexar tanto el acumulador como la memoriaa casi cualquier nivel, y por tanto, conseguir virtualmente cualquier velocidad, el DAC esun cuello de botella a traves del que debe pasar la senal, y es la tecnologıa del DAC la queimpone el lımite en los DDSs avanzados.

El acumulador de fase es el menos crıtico de los bloques constitutivos de los sistemasDDS. Aunque debe ser construido cuidadosamente, su expansion no es un problema serio.De hecho los nuevos conceptos de diseno de acumuladores reducen complejidad, numerode puertas logicas, tamano y consumo, por tanto haciendo mas practicos estos sistemas.

Otro asunto complicado es la reduccion de la memoria utilizada para convertir losdatos de fase en datos de amplitud. Las metodologıas convencionales requieren aproxi-madamente 119 K para mapear 14 bits de informacion de fase (del acumulador) a 12 bitsde amplitud (para el DAC). Actualmente ninguna tecnologıa soporta una memoria de 200K a alta velocidad (500 Mhz o mas), aunque se estan realizando desarrollos que intentancomprimir la memoria considerablemente. Basada en la expansion en serie de Taylor dela funcion seno, se consigue comprimir el tamano de la memoria desde 192K hasta ∼ 3K,que ya pueden funcionar a 2 nanosegundos (figura 1.53).

Figura 1.53: Compresion de la memoria ROM basada en la monotonicidad de lafuncion seno

Ademas de esta mejora en la memoria de conversion fase-amplitud, a continuacioncomentaremos brevemente otras funcionalidades faciles de anadir a la estructura basicaDDS y que, o bien mejoran sus caracterısticas basica, o bien permiten ampliar el margende aplicaciones de estos sistemas. Actualmente, ya existen gran cantidad de dispositivoscomerciales que las incorporan.

Page 65: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 53

1.10.1. Mejora del Margen Libre de Espureos mediante dithering de fase

En la seccion 1.5 se hablo del efecto del truncamiento de fase en la arquitectura DDS.El resultado principal es su traduccion en espureos en el espectro de salida dependiendode la eleccion de la palabra de sintonıa. En algunas aplicaciones, es deseable reducir laenergıa de los espureos a cualquier precio. La agitacion (dithering) de fase es una tecnicapara conseguirlo. Esto se consigue a costa de elevar el suelo de ruido e incrementar el ruidode fase del sistema.

La figura 1.54, es un diagrama de bloques de un DDS simple. En la figura 1.54(a), la palabra de sintonıa de T bits se aplica a la entrada del acumulador. Los A bitsmas significativos de la salida del acumulador alimentan al bloque de conversion angulo-amplitud, el cual suministra valores deD bits al conversor A/D. Se supone que T > A > D.

(a)

(b)

Figura 1.54: Diagrama de bloques de un DDS generico

En figura 1.54(b) se ve la relacion entre esta variedad de longitudes en las palabrasdel DDS. Podemos apreciar que los bits de salida del acumulador de tamano A, constituyenun subconjunto del grupo de palabras de sintonıa de tamano T . De la misma manera, lasalida del convertidor fase-amplitud tiene un tamano de palabra D que es subconjunto deltamano de la palabra de salida del acumulador.

El dithering de fase requiere que los valores de fase generados por el acumuladorcontengan una cierta cantidad de ruido. Esto se puede conseguir anadiendo un pequenonumero aleatorio generado a la salida del acumulador. El metodo se describe en la figu-ra 1.55.

En el modelo de dithering de fase, un generador de secuencia binaria seudoaleatoriase utiliza para producir un nuevo numero aleatorio de R bits con cada actualizacion delacumulador. Los numeros seudoaleatorios se escalan en potencias de 2 para encajar dentrodel margen deseado de la palabra de P bits de salida del acumulador. El numero aleatorio seposiciona de forma que su bit mas significativo sea menor que el bit menos significativo dela palabra de A bits de entrada al convertidor angulo-amplitud (AAC). No se recomiendadesplazar el numero aleatorio de forma que se superponga a la palabra de A bits. Haceresto desecha el proposito de tener A bits de resolucion de fase en primer lugar, ya que elloanade un ruido que es mayor al ruido de cuantificacion asociado a la palabra de A bits.

La posicion de la palabra de R bits tiene impacto significativo en la magnitud deldithering de fase. En efecto, el desplazar a la izquierda el numero aleatorio incrementasu impacto cuando se suma con la palabra de P bits tomada a la salida del acumulador.

Page 66: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 54

Figura 1.55: Dithering de fase en un DDS

Tıpicamente, el bit mas significativo del numero aleatorio se posiciona un bit menos delbit menos significativo de la palabra de A bits que se envıa al AAC.

El numero de bits del numero aleatorio determina el modo en el que la fase aleatoriase disgrega en el espectro de salida del DDS. Tıpicamente, un numero aleatorio de 3 a 4bits es suficiente.

1.10.2. Generacion de barridos “chirp” mediante DDS

El “chirp” (chirrido) en frecuencia es un metodo de realizar transiciones entre dosfrecuencias de salida, f1 y f2 durante un intervalo de tiempo especıfico. La forma massimple de realizacion es un barrido lineal desde f1 a f2. Sin embargo, en sistemas masavanzados, la transicion de frecuencias desde f1 a f2 puede ser una funcion no lineal en eltiempo. Un sistema chirp basado en DDS se muestra en la figura 1.56.

Figura 1.56: Sistema Chirp basado en DDS

Empezando desde el acumulador de fase y trabajando hacia la derecha, el sistema esun DDS basico. Sin embargo, el acumulador de fase no esta alimentado por una palabra desintonıa estatica como es el caso del DDS basico. En cambio, la entrada al acumulador defase es la suma de la palabra de sintonıa de inicio y la salida del acumulador de frecuencia.La palabra de sintonıa de inicio es la palabra de sintonıa de frecuencia que marca f1 (la

Page 67: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 55

frecuencia inicial del barrido).El acumulador de frecuencia suma recursivamente la palabra delta de frecuencia a

la velocidad prescrita por el “reloj de rampa”. Por tanto, a cada pulso del reloj de rampase incrementa el valor de entrada al acumulador de fase una cantidad igual a la palabradelta de frecuencia. Como la entrada al acumulador de fase determina la frecuencia desalida del DDS y este valor esta cambiando con el tiempo, entonces tambien la frecuenciade salida del DDS lo hara. Este es el mecanismo basico de generacion de barridos “chirp”.

Asumiendo que el reloj de rampa genera un pulso de reloj a intervalos regularesy que la palabra delta de frecuencia es constante, entonces la salida del acumulador defrecuencia crece a velocidad lineal. Esto es, la pendiente de la frecuencia en funcion deltiempo es constante. Estarıamos ante un “chirp” lineal.

Tambien es posible general barridos no lineales. Si la palabra delta de frecuencia semodifica, la velocidad a la cual la frecuencia de salida del DDS cambia tambien se modi-fica. Esto es, la pendiente de la frecuencia en funcion del tiempo cambia, de manera quemodificar la palabra delta de frecuencia durante el intervalo del barrido varıa la pendientede la frecuencia en funcion del tiempo. Esto proporciona un medio de generar cualquierfuncion “chirp” mediante aproximaciones lineales de la respuesta deseada.

La funcionalidad de implementar barridos en un DDS requiere temporizacion y con-troles adicionales. Esta es funcion de la logica de temporizacion de rampa. Realmente sirvea dos propositos. En primer lugar, debe de dividir el reloj del sistema para producir laadecuada frecuencia de reloj de rampa definida en el registro ramp rate. En segundo lugar,debe terminar el reloj de rampa cuando la frecuencia de salida alcanza el valor f2 (lafrecuencia de final del barrido). La determinacion del momento en que el reloj de rampadebe terminar se consigue monitorizando la salida del acumulador de frecuencia y el valorde la palabra de final de sintonıa. Cuando la salida del acumulador de frecuencia es mayoro igual a la palabra de stop, el reloj de rampa se deshabilita. La logica de temporizacionde rampa debe de asegurar que el acumulador de frecuencia no sobrepase el valor de lapalabra de final de sintonıa.

1.10.3. Generacion de modulacion de amplitud mediante DDS

Para algunas aplicaciones es interesante controlar la amplitud de salida de la senalDDS. Tal es el caso de un transmisor AM basado en DDS o en aplicaciones en las que laportadora esta presente unicamente durante los intervalos de trasmision. En aplicacionesde senales pulsadas se pueden producir problemas en las transiciones bruscas de amplitud,que pueden producir interferencias en los canales adyacentes. En estos casos, un controlpreciso de amplitud permite que la senal se desvanezca poco a poco, haciendo menor elruido durante los transitorios de conmutacion.

La arquitectura basica DDS no permite el control de amplitud. Sin embargo, estose consigue con una modificacion muy simple: la adicion de una etapa multiplicadoraprecediendo al convertidor D/A. Muchos dispositivos comerciales suelen incorporar estacaracterıstica.

En la figura 1.57, si suponemos que la palabra de control de amplitud de entradapuede tomar valores entre 0 y 1, la salida del DDS presentara una version a escala delvalor suministrado desde el convertidor angulo-amplitud. Un valor 0 anula la salida delDDS, mientras que para el valor de 1 la salida es la indicada desde el conversor AAC. Se veque es una manera inmediata de generar senales AM, tambien de controlar el transitorioON-OFF en senales pulsadas.

Page 68: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 56

Figura 1.57: DDS con control de amplitud

1.10.4. Funcionalidades adicionales en DDS

En resumen, los nuevos disenos anaden gran cantidad de registros y circuiterıa que,sin formar parte de la estructura basica DDS hacen que estos sistemas se acerquen real-mente al mundo practico. En este apartado se realiza un resumen de todas estas variacionesque habiendo sido nombradas a lo largo del capıtulo, a buen seguro formaran parte delnucleo de evolucion de esta tecnologıa.

El diagrama de bloques de un dispositivo DDS con prestaciones anadidas ya serepresento el la figura 1.9. Por comodidad se presenta de nuevo a continuacion.

(a)

(b)

Figura 1.58: Prestaciones anadidas en un sistema DDS(a) Puntos sobre los que se accede para conseguir estas prestaciones(b) Esquema de bloques de un dispositivo DDS con prestacionesanadidas

Enumeramos los bloques adicionales que se representan en la figura 1.58 (b).

Multiplicador interno del reloj de referencia. De este modo se reduce la frecuencia

Page 69: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 57

del reloj de referencia de entrada facilitando la utilizacion de los dispositivos DDScon fuentes de reloj mas faciles de manejar.

Acumulador de fase despues del sumador, que permite retardos de fase dependiendode una palabra de sintonıa de fase. De este modo se consiguen modulaciones defase, con una resolucion que depende de los bits de la palabra de sintonıa de fase.Tıpicamente se utilizan registros de 14 bits, aunque pueden llegarse a utilizar 32bits, con lo que la resolucion de fase es enorme, figura 1.59 (a).

(a)

(b)

Figura 1.59: Modulaciones de fase en un dispositivo DDS(a) Modulacion de fase.(b) Modulacion de frecuencia

Bloque sinc inverso. Compensa la caıda sinx/x producida por la curva de respuestade la salida cuantificada del DAC minimizando este efecto.

Multiplicador digital insertado entre la salida de la tabla de referencia y el conversorD/A, permitiendo la modulacion de amplitud de la salida senoidal.

A veces se integra otro conversor adicional D/A para generar simultaneamente lafuncion coseno, lo que permite generar las salidas I y Q totalmente coincidentes enfrecuencia, cuadratura de fase y amplitud.

Comparador adicional, que facilita el uso del dispositivo DDS como generador dereloj, convirtiendo la senoide del DDS en una forma de onda cuadrada.

Registros adicionales de frecuencia y fase que pueden ser preprogramados a priori,activandose mediante un unico pin de control. Es una configuracion ideal para gener-ar FSK si se dispone de dos registros de frecuencia, uno programado a la frecuenciade “marca 2el otro a la de “espacio”.

Page 70: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 58

Aunque la tecnologıa DDS esta en continuo avance, y circuitos con prestacionesque hoy nos parecen superiores en seis meses quedan superadas por los nuevos disenos,podemos resumir el actual estado de desarrollo de esta tecnica en la tabla 1.1.

Caracterıstica Prestacion Observaciones

Sintonıa en frecuencia 48 bits Resolucion de 1 µHzSintonıa de fase 32 bits Resol. control de retardo

de fase 0.00000008o

fclk interno 300 MHz Hab. multiplic. interno ×10Rango de multiplic. CLKref ×4 hasta ×10Ancho de Banda salida 100 MHz Asumiendo 1/3 de fclkVelocidad de cambio de frec. 100 MHz 8 bit carga paralelaControl de amplitud 12bits Desde 0 a fondo escalaEspureos -50 dBc Peor caso en WB para fout

de 80 MHzAdaptacion I-Q 0.01o

Rizado desde DC a Niquist 0.01 dBDAC 12 bits Doble

Cuadro 1.1: “Estado del Arte” de la tecnologıa DDS comercial (1999)

1.10.5. Chips DDS comerciales

Terminamos el capıtulo con una tabla donde se incluye una recopilacion realizadaen internet sobre los ultimos dispositivos DDS del mercado. Son circuitos de las marcasAnalog Devices, Harris Semiconductor, Qualcom y Standford Telecom.

En cada entrada de la tabla se incluyen las caracterısticas fundamentales de cadacircuito, que pueden servir de comparacion con el resto de los integrados.

Page 71: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 59

Nombre Clk max.Mhz

DisipacionmW

Res Frecbits

DACbits

Control Descripcion

Q2240 1 100 2000 32 12 (NI)2 Paralelo,100Mhz

NCO simple sin DAC integrado

Q2368 130 o65×2

1250 32 × 2 12(NI) Paralelo,Serie

Doble DDS, BP-SK/BFSK/QPSK/8PSK/Chirp,Circuito de reduccion de espureosNCR patentado

Q2334 50 667 32 × 2 12(NI) Paralelo Doble DDS, PSK/FSK/MSK/FH,32 bits de resolucion de fase

AD9832 3 25 120 32 10 Serie DDS Completo, CapacidadFM/PM, Truncamiento a 12 bits

AD9831 25 120 32 10 Paralelo DDS Completo, CapacidadFM/PM, Truncamiento a 12 bits

AD9835 50 200 32 10 Serie DDS Completo, CapacidadFM/PM, Truncamiento a 12 bits,16 pines

AD9830 50 300 32 10 Paralelo DDS Completo, CapacidadFM/PM, Truncamiento a 12 bits

AD9850 125 480 32 10 Paralelo,Serie

DDS Completo, Comparador in-dep

AD9853 165 1150 32 10 Serie Modulador DDS,FSK/QPSK/16QAM, Multi-plicador fclk interno ×6, Filtroprogramable, compensacionsen(x)/x

AD9851 180 650 32 10 Paralelo,Serie

DDS Completo, Comparador in-dep, Multiplicador fclk interno ×6

AD9856 180 450 32 12 Serie Convertidor ascendente encuadratura

AD9854 300 1200 - 2 × 12 - DDS Completo, Modo Chirp, Mul-tiplicador fclk programable

AD9852 300 1200 - 12 - DDS Completo, Modo Chirp, Mul-tiplicador fclk programable

AD7008 50 625 32 10 Paralelo,Serie

DDS Generador vectorial, Tablasde seno y coseno, Truncamientofase a 12 bits, AM/FM/PM, Mod-ulador I/Q 10 de bit

HSP45102 4 40 785 32 12 (NI) Serie DDS simple sin DAC integrado,FSK/QPSK

HSP45106 33 1240 32 16 (NI) Paralelo NCO,FM/FSK/BPSK/QPSK/8PSK,Reg. offset fase de 32 bits, Trun-camiento a 20 bits

HSP45116A 52 2850 32 16 (NI) Paralelo NCO, AM/FM/PM/QAM etc,Reg. offset fase de 32 bits,Truncamiento a 20 bits, Acumu-lador/multiplicador complejo de16 bit (modulaciones I/Q)

STEL-1172B 50 750 32 2 × 8(NI)

Paralelo NCO con tablas de seno y coseno,Truncamiento a 12 bits

STEL-1173 5 50 750 48 12 (NI) Paralelo NCO alta resolucion, Truncamien-to a 13 bits, tabla de seno o coseno

1 Qualcomm, http://www.qualcomm.com2 DAC no incluido en el chip3 Analog Devices, http://www.analog.com/4 Harris, http://www.harris.com/5 Standford Telecom, http://www.stelhq.com/

Page 72: PFC Modulador Digital Programable modulAD mediBER

1.10 Evolucion y tecnicas auxiliares en los DDS 60

Nombre Clk max.Mhz

DisipacionmW

Res Frecbits

DACbits

Control Descripcion

STEL-1174 50 750 16 12 (NI) Paralelo NCO de bajo costo, Truncamientoa 13 bits, tabla de seno o coseno

STEL-1175 125 1875 32 12 (NI) Paralelo NCO Modulador, Truncamiento a13 bits, tabla de seno o coseno, Sal-ida lineal 12 bits disponible paraPM/PSK/QAM/FSK

STEL-1176 80 1200 35 12 (NI) Paralelo NCO Modulador, Truncamiento a15 bits, modulacion directa 8PSKcon 3 bits

STEL-1177 60 2100 32 2 × 12(NI)

Paralelo NCO Modulador, Truncamiento a13 bits, Tablas de seno y coseno,FM/PM/FSK, Reg. offset fase de12 bits

STEL-1178A 80 800 2 × 32 2×12(NI)

Paralelo NCO Modulador DOBLE, Trun-camiento de fase a 13 bits, PM (3bits)/FM

STEL-1179 25 250 24 12 (NI) Serie NCO Modulador, PM (3 bits)

STEL-1180 60 - 32 12 (NI) - NCO-Chirp, Truncamiento a 13bits, PM (16 bits)/FM, Generacionlineal chirp 16 bits con produc-to pendiente/duracion de 16 bits,chirp no lineal programable

STEL-2173 800 - 32 8 (NI) - NCO Modulado, Truncamiento a10 bits, BPSK/QPSK 2 bits

STEL-2176 160 1010 32 10 Paralelo Modulador-Demodulador DDSCompleto, BPSK/QPSK/16QAM,Multiplicador interno de fclk,filtro FIR de 32 etapas, maximavelocidad 10Mbps en BPSK

Page 73: PFC Modulador Digital Programable modulAD mediBER

Capıtulo 2

Secuencias pseudoaleatorias yregistros de desplazamiento

Desde hace cuatro decadas se ha desarrollado, explotado y refinado la idea de utilizarregistros de desplazamiento para generar secuencias binarias. Actualmente, existe unagran variedad de aplicaciones diferentes de los registros de desplazamiento, incluida lageneracion de secuencias pseudoaleatorias. El creciente interes por este tipo de secuenciasjustifica la inclusion de este capıtulo.

Las principales areas de aplicacion de las secuencias generadas en registros de de-splazamiento son las siguientes:

Generadores de codigos seguros y de acceso limitado.

1. Cifrado: Se realiza la suma en modulo 2 del mensaje binario con una secuen-cia generada en un registro de desplazamiento que actua como “llave”. Paradescifrar se vuelve a sumar la llave al mensaje codificado.

2. Codigos de direcciones multiples: Diferentes porciones de una secuencia gener-ada en un registro de desplazamiento se pueden asignar como direccion carac-terıstica de un gran numero de elementos, estaciones, aeronaves, nodos de red,etc. Se consigue que un gran numero de generadores puedan enviar informacionsistematicamente a su controlador.

Generadores de codigos eficientes.

1. Codigos correctores de error: Los codigos cıclicos se basan en secuencias de reg-istros de desplazamiento. Ejemplos de este tipo de codigos son los codigos deHamming, de Golay extendidos, los codigos BCH (Bose-Chadhuri-Hocquenghem),y los codigos de Reed-Solomon.

2. Senales recuperables en entorno ruidoso: La propiedad de autocorrelacion deestas secuencias hace que en aplicaciones de radar de largo alcance con muchoruido de fondo, trenes de pulsos modulados por un registro de desplazamientosean recuperables incluso bajo relaciones senal/ruido negativas de muchos dB.

3. Modulaciones de espectro ensanchado: Esa misma propiedad de autocorrelacionhace que un gran numero de usuarios pueda compartir una misma frecuenciade transmision y un mismo ancho de banda, si cada uno de ellos utiliza unasecuencia pseudoaleatoria diferente para modular su informacion.

61

Page 74: PFC Modulador Digital Programable modulAD mediBER

2.1 Secuencias con propiedades de aleatoriedad 62

Generadores de codigos con propiedades predefinidas.

1. Generadores de perıodo predefinido: Se ha probado que con un registro de de-splazamiento de grado n, todas las longitudes de secuencias p entre 1 y 2n

(inclusive) se pueden conseguir si se escoge adecuadamente la logica de reali-mentacion.

Modelos matematicos.

1. Generadores de secuencias aleatorias: Un registro de desplazamiento que generesecuencias de longitud maxima sirve como modelo aproximado de experimentoaleatorio, al margen de la componente determinista del sistema.

2. Maquinas de estados finitos: Un registro de desplazamiento con realimentacionsirve como el ejemplo no trivial mas simple de maquina de estados finitos sinentradas externas. El registro de desplazamiento sirve como “animal experi-mental” para investigaciones en maquinas de logica recursiva y de automatas.

3. Procesos de Markov: Se puede establecer una analogıa entre el diagrama deestados y transiciones de un registro de desplazamiento de n-etapas y el dia-grama de estados de Markov para un canal binario con dependencia estadısticalimitada a n bits anteriores.

2.1. Secuencias con propiedades de aleatoriedad

El uso de secuencias de datos binarios que se asemejen el maximo posible a secuenciasaleatorias esta muy extendido en la actualidad: modulaciones de espectro ensanchadospread spectrum, donde se trata de distribuir la energıa lo mas amplia y uniformementeposible a lo largo de un gran ancho de banda simulando ruido; tambien se utilizan circuitosaleatorizadores, scramblers, circuitos que generan este tipo de secuencias, . . .

Cualquiera que sea la aplicacion para la que se utilicen, se trata siempre de secuenciaslo mas parecidas al ruido blanco, pero generadas de modo controlado.

¿En que se diferencia una senal pseudoaleatoria de una verdaderamente aleatoria?Una senal aleatoria no se puede predecir ; sus variaciones futuras solo pueden ser descritasen sentido estadıstico. Sin embargo, una senal pseudoaleatoria no es en absoluto aleatoria,es determinista, periodica y conocida tanto por el transmisor como por el receptor. ¿Porque entonces las llamamos “pseudoruido” o “pseudoaleatorias¿: Incluso aunque la senalsea determinista, parece tener las propiedades estadısticas del ruido blanco muestreado.Para un escucha no autorizado parece como si se tratase de una verdadera senal aleatoria.

2.1.1. Propiedades de las secuencias aleatorias

¿Cuales son las propiedades que hacen que una senal pseudoaleatoria aparezca co-mo verdaderamente aleatoria? Hay tres propiedades basicas que pueden ser aplicadasa cualquier secuencia binaria periodica como prueba de su grado de aleatoriedad. Laspropiedades, llamadas de balance, realizacion y correlacion, se describen a continuacionpara senales binarias:

Propiedad de Balance . Un buen balance requiere que en cada periodo de la secuencia,el numero de unos binarios difiera del numero de ceros binarios como maximo enuna unidad.

Page 75: PFC Modulador Digital Programable modulAD mediBER

2.2 Secuencias generadas mediante registros de desplazamiento 63

Propiedad de realizacion . Una realizacion se define como una secuencia de un unicotipo de dıgitos binarios. La aparicion de un dıgito alterno en una secuencia arrancauna nueva realizacion. La longitud de una realizacion es el numero de dıgitos enla misma. Entre las realizaciones de unos y ceros en cada periodo, es deseable quealrededor de la mitad de las mismas de cada tipo sean de longitud 1, alrededor deun cuarto sean de longitud 2, la octava parte de longitud 3 y ası sucesivamente.

Propiedad de correlacion . Si un periodo de la secuencia es comparado termino atermino con cualquier desplazamiento cıclico de la misma, es mejor que el numerode coincidencias difiera del numero de diferencias en no mas de una unidad. Esto esequivalente a decir que su funcion de autocorrelacion R(τ) tienda a cero para τ 6= 0.

La funcion de autocorrelacion Rx(τ) de una funcion periodica x(t) de periodo To, sedefine de forma normalizada como:

Rx(τ) =1K

(1T0

)∫ T0/2

−T0/2x(t)x(t+ τ)dt para−∞ < τ <∞ (2.1)

donde

K =1T0

∫ T0/2

−T0/2x2(t)dt (2.2)

Cuando x(t) es una secuencia periodica representando un codigo pseudoaleatorio,nos referimos a cada dıgito fundamental como un sımbolo del codigo pseudoaleatorio o unchip. Para una secuencia pseudoaleatoria de periodo p chips, la funcion de autocorrelacionnormalizada se puede expresar como:

Rx(τ) =1p·

numero de coincidencias menos numero de desacuerdoscomparando un periodo completo de la secuencia conuna version desplazada de la misma un numero τ dedesplazamientos cıclicos

(2.3)

La funcion de autocorrelacion normalizada para una secuencia de longitud maxima,Rx(τ), se puede apreciar en la figura 2.2. Esta claro que para τ = 0, cuando x(t) y su replicacoinciden perfectamente, Rx(τ) = 1. Sin embargo, para cualquier otro desplazamientocıclico ente x(t) y x(t + τ) con 1 ≤ τ < p, la funcion de autocorrelacion es igual a−1/p (para valores de p grandes, las secuencias estan virtualmente incorreladas para undesplazamiento de un unico chip.

En la siguiente seccion se genera una secuencia pseudoaleatoria para comprobarestas tres propiedades.

2.2. Secuencias generadas mediante registros de desplaza-miento

Consideremos el registro de desplazamiento de la figura 2.1. Consta de cuatro reg-istros de desplazamiento, un sumador modulo 2 y una conexion de realimentacion desdeel sumador a la entrada del registro. El sumador modulo dos puede ser implementado

Page 76: PFC Modulador Digital Programable modulAD mediBER

2.2 Secuencias generadas mediante registros de desplazamiento 64

mediante una puerta or-exclusiva. La operacion del registro de desplazamiento se controlamediante los pulsos de reloj que no aparecen en la figura. En cada pulso de reloj los con-tenidos de cada etapa del registro se desplazan una etapa a la derecha. Tambien, a cadapulso de reloj los contenidos de las etapas x3 y x4 se suman modulo 2 (una operacionlineal), y el resultado es llevado de nuevo hacia atras a la etapa x1.

Prestemos atencion a la sucesion de estados de una etapa, por ejemplo la primera.Supongamos que la historia del registro esta formada por los sucesivos terminos a0, a1,a2, . . . , an. Desde el punto de vista de la realimentacion, an es una suma modulo 2 de loscontenidos de varias etapas del registro en el estado n − 1. De hecho cada registro en lasuma modulo 2 que calcula an se puede tracear hacia atras hasta llegar a un estado previode la primera etapa del registro en sı. Por tanto, an satisface una ecuacion del tipo:

an = c1an−1 + c2an−2 + · · ·+ cran−r

donde los coeficientes c1, c2, . . . , cr son unos y ceros que no dependen de n. Porsupuesto la suma es modulo 2. A esta relacion se la denomina recurrencia lineal.

Figura 2.1: Ejemplo de registro de desplazamiento con realimentacion lineal

Siguiendo con el ejemplo de la figura 2.1 asumamos que la etapa x1 esta inicialmentea uno y las restantes a cero, esto es, el estado inicial del registro es 1000. De la figura 2.1podemos ver que la sucesion de estados en las etapas del registro seran las siguientes:

1000 0100 0010 1001 1100 0110 1011 01011010 1101 1110 1111 0111 0011 0001 1000

Como el ultimo estado, 1000, se corresponde con el inicial, vemos que el registrorepite la secuencia anterior despues de 15 ciclos de reloj. Se han generado todos los estadosposibles exceptuando el 0000. La secuencia de estados de la primera etapa es la siguiente:

1 0 0 1 1 0 1 0 1 1 1 1 0 0 0

Esta secuencia cumple la recurrencia lineal

an = an−3 + an−4

Page 77: PFC Modulador Digital Programable modulAD mediBER

2.2 Secuencias generadas mediante registros de desplazamiento 65

Ademas se cumple que la historia de estados de la segunda etapa es la misma quela de la primera con un retardo de un periodo de reloj, y ası sucesivamente con las demasetapas. Esto quiere decir que todas las etapas cumplen la misma relacion de recurrencialineal al igual que la primera etapa. Se puede decir que todo el registro de desplazamientocumple la relacion de recurrencia.

No es difıcil demostrar el enunciado que sigue a continuacion, referido a que lasucesion de estados en un registro de desplazamiento es periodica, con un periodo p 52r − 1, donde r es el numero de etapas del registro.

Cada estado del registro de desplazamiento viene determinado por su predecesor.De aquı que si siempre ocurre que un estado es igual a algun estado anterior, entonces lossiguientes estados son los mismos, de manera que ya tenemos establecida una perioricidad.

Con r etapas en un registro de desplazamiento existen solo 2r estados posibles. Porlo tanto la repeticion se produce entre alguno de los primeros 2r + 1 estados, y de aquı yatenemos la perioricidad con p 5 2r.

Finalmente, si se produce el estado “todo ceros”, los siguientes estados seran siempretambien “todo ceros”, y la perioricidad es p = 1. Por lo tanto el periodo largo no puedeincluir este estado, y p 5 2r − 1.

Este teorema se cumple independientemente del estado inicial del registro de de-splazamiento.

Comprobemos en la secuencia anterior las propiedades de aleatoriedad de la sec-cion 2.1.1 . En primer lugar. la propiedad de balance; hay siete ceros y ocho unos en lasecuencia; de aquı, se ve que la secuencia cumple la condicion de balance. A continuacionla propiedad de realizacion; consideremos las realizaciones del cero, hay cuatro. La mitadson de longitud 1, y un cuarto son de longitud 2. Lo mismo ocurre con las realizacionesdel uno. La secuencia es demasiado pequena para ir mas alla, pero podemos ver que lacondicion de realizacion se cumple. Para comprobar si la secuencia de salida del registro dedesplazamiento de la figura 2.1 cumple la tercera propiedad de aleatoriedad, correlacion,se muestra la secuencia de salida y tambien la misma secuencia desplazada de forma cıclicaen un chip:

0 0 0 1 0 0 1 1 0 1 0 1 1 1 11 0 0 0 1 0 0 1 1 0 1 0 1 1 1d c c d d c d c d d d d c c c

Los dıgitos coincidentes estan etiquetados con una c”, mientras que con una ”d”seindican los desacuerdos. Segun la ecuacion 2.3 el valor de la funcion de autocorrelacionpara este desplazamiento simple de un chip es:

R(τ = 1) =115

(7− 8) = − 115

Cualquier desplazamiento cıclico que difiera de la coincidencia completa resulta tenerel mismo valor de autocorrelacion, −1/p. De aquı que la secuencia cumple la tercerapropiedad de aleatoriedad.

2.2.1. Funciones generadoras

Dada la secuencia an = a0, a1, a2, . . . , sucesion de estados de la primera etapade un registro de desplazamiento, podemos asociar a ella la funcion generadora:

Page 78: PFC Modulador Digital Programable modulAD mediBER

2.2 Secuencias generadas mediante registros de desplazamiento 66

Figura 2.2: Funcion de autocorrelacion de la secuencia pseudoaleatoria de ejemplo

G(x) =∞∑n=0

anxn (2.4)

El estado inicial del registro de desplazamiento se puede considerar como

a−1, a−2, . . . , a−r (2.5)

Si an satisface la relacion de recurrencia

an =r∑i=1

cian−i,

operando resulta:

G(x) =∑r

i=1 cixi(a−ix−i + · · ·+ a−1x

−1)1−

∑ri=1 cix

i(2.6)

Esta relacion expresa G(x) enteramente en funcion de las condiciones iniciales a−1,a−2,. . . , a−r, y de los coeficientes de realimentacion c1, c2,. . . cr. De hecho, el denominadorde 2.6 es independiente incluso de las condiciones iniciales.

Si las condiciones iniciales son a−1 = a−2 = · · · = a1−r = 0, a−r = 1, la expresion2.6 se reduce a

G(x) =cr

1−∑r

i=1 cixi

(2.7)

Al denominador de esta ultima relacion se le llama polinomio caracterıstico de lasecuencia an y del registro de desplazamiento que la produce

f(x) = 1−r∑i=1

cixi (2.8)

Observese lo facil que se genera el polinomio caracterıstico f(x) = 1 −∑xn, donde el

sumatorio se aplica a los valores de n donde la n-esima etapa del registro de desplazamientose realimenta al sumador modulo 2 (figura 2.1). Tambien conviene recordar que la restaen aritmetica modulo 2 equivale a la suma.

Page 79: PFC Modulador Digital Programable modulAD mediBER

2.2 Secuencias generadas mediante registros de desplazamiento 67

2.2.2. Determinacion del perıodo

Ya sabemos que las secuencias generadas en los registros de desplazamiento sonperiodicas, y conocemos la acotacion superior para tal perıodo. La ecuacion 2.7 nos permitedar una aproximacion mas exacta.

Si se cumplen las condiciones iniciales descritas en el apartado anterior a−1 = a−2 =· · · = a1−r = 0, a−r = 1, se demuestra que el periodo de la secuencia es el entero positivomenor p para el cual el polinomio caracterıstico f(x) divide a 1− xp modulo 2:

Bajo las condiciones indicadas, al ser la secuencia an de perıodo p se cumple:

G(x) =1

f(x)=∞∑n=0

ancn (2.9)

1f(x)

= (a0 + a1x+ · · ·+ ap−1xp−1) + xp(a0 + a1x+ · · ·+ ap−1x

p−1)

+x2p(a0 + a1x+ · · ·+ ap−1xp−1) + . . .

= (a0 + a1x+ · · ·+ ap−1xp−1)(1 + xp + x2p + x3p + . . . )

= (a0 + a1x+ · · ·+ ap−1xp−1)/(1− xp)

Por tanto:

f(x)(a0 + a1x+ · · ·+ ap−1xp−1) = 1− xp, (2.10)

y f(x) divide a 1− xp.

Segun 2.6, G(x) = g(x)/f(x), donde el numerador g(x) tiene un grado menos quef(x). Si el registro de desplazamiento esta aprovechando el hecho de que tiene r etapas,entonces f(x) tiene grado r, y no se pierde la generalidad si se supone que siempre es este elcaso. Si g(x) no tiene factores en comun con f(x), entonces se sigue cumpliendo el teoremademostrado anteriormente y el numero entero menor p tal que f(x) divide a 1− xp, es elperıodo de la correspondiente secuencia. Al numero p se le conoce como exponente de Fax.El caso particular de la demostracion corresponde a g(x) = 1. Otro caso muy importantese da cuando f(x) es irreducible, en cuyo caso no puede tener factores en comun cong(x), un polinomio de grado mas bajo, a no ser que g(x) = 0, que corresponde a unascondiciones iniciales “todo ceros”. Por lo tanto, cuando f(x) es irreducible, el periodode la secuencia del registro de desplazamiento no depende de las condiciones iniciales,exceptuando unicamente el caso de la condicion inicial “todo ceros”.

2.2.2.1. Una condicion necesaria para longitud maxima

En el caso en que la secuencia A = an sea de longitud maxima, su perıodo esp = 2r − 1, y se cumple que su polinomio caracterıstico f(x) es irreducible. El recıprocono es cierto.

La demostracion de este teorema parte de que al ser la secuencia A de longitudmaxima, existiran a lo largo de la misma todas las combinaciones de secuencias de unosy ceros de longitud r (excepto r ceros consecutivos). En particular, se podra encontrar ununo seguido de r− 1 ceros, que constituyen las condiciones iniciales con las que se obtuvoel polinomio caracterıstico del registro de desplazamiento. Consecuentemente se cumpleque el perıodo de la secuencia A es el exponente de f(x). Por reduccion al absurdo se

Page 80: PFC Modulador Digital Programable modulAD mediBER

2.2 Secuencias generadas mediante registros de desplazamiento 68

demuestra que no puede cumplirse el que la secuencia sea de longitud maxima si se dierael caso de que f(x) fuese reducible y tuviera dos factores de la forma f(x) = s(x)t(x),alcanzandose en este caso una longitud de secuencia menor a 2r − 1.

Tampoco se cumple el recıproco, es decir, el hecho de que el polinomio caracterısticof(x) sea irreducible no es condicion suficiente para establecer que la secuencia sea delongitud maxima: Por ejemplo, f(x) = x4 + x3 + x2 + x + 1 es irreducible, pero comodivide a 1 − x5, la secuencia que genera es de periodo 5, en lugar del periodo maximo24 − 1 = 15. De la misma manera, f(x) = x6 + x3 + 1 es irreducible, pero tiene exponente9 en vez de 63.

2.2.3. El metodo matricial

Tambien se llega a las mismas deducciones si se considera a cada estado de un registrode desplazamiento de r etapas como un vector r-dimensional. El registro de desplazamientoes entonces un operador lineal que cambia cada estado en el siguiente. De esta forma, lomas conveniente es representar al operador lineal sobre vectores r-dimensionales medianteuna matriz de r × r.

En general, una matriz representativa de un registro de desplazamiento toma laforma:

M =

c1 1 0 . . . 0c2 0 1 0...

.... . .

...cr−1 0 0 1cr 0 0 . . . 0

, (2.11)

con unos a lo largo de la diagonal justo encima de la diagonal principal, y los “coeficientesde realimentacion.en la primera columna. Realicemos una verificacion explıcita:

(an−1, an−2, . . . , an−r)

c1 1 0 . . . 0c2 0 1 0...

.... . . . . . 1

cr 0 0 . . . 0

= (c1an−1 + c2an−2 + · · ·+ cran−r, an−1, an−2, . . . , an−r+1)= (an, an−1, . . . , an−r+1)

La ecuacion caracterıstica de la matriz M es:

Page 81: PFC Modulador Digital Programable modulAD mediBER

2.3 Polinomios modulo 2 69

f(λ) = det|M − λI| =

∣∣∣∣∣∣∣∣∣∣∣∣∣

c1 − λ 1 0 · · · 0c2 −λ 1 · · · 0c3 0 −λ · · · 0...

......

. . .

cr 0 0 −λ

∣∣∣∣∣∣∣∣∣∣∣∣∣= −(−λ)r

[1− c1

λ− c2

λ2− c3

λ3− · · · − cr

λr

]=

(−1)r+1

xr[1− (c1x+ c2x

2 + · · ·+ crxr)]

donde se ha realizado la sustitucion x = 1/λ. Se puede apreciar que exceptuando eltermino(−1)r+1/xr, la ecuacion caracterıstica de la matriz M es el polinomio caracterısticodel registro de desplazamiento.

En este caso, determinar el periodo del registro de desplazamiento equivale, exceptoen casos degenerados, a encontrar la potencia mas baja p de la matriz equivalente M talque Mp = I, la matriz identidad.

La teorıa de matrices establece que toda matriz cumple su ecuacion caracterıstica:por tanto f(M) = 0. Si f(x) divide a 1− xp, entonces M es una raız de I −Xp, ya que esraız del factor f(X) = 0. Esto es, si f(x) divide a 1− xp, entonces Mp = I. A la inversa,si f(x) es irreducible, entonces divide todo polinomio que tenga la raız M en comun conel, y dividira a 1− xp si Mp = I.

2.3. Polinomios modulo 2

En esta seccion se incluye el metodo para determinar el numero de polinomios irre-ducibles y primitivos de un grado determinado.

2.3.1. Periodos primos de Mersenne

Cualquier polinomio irreducible modulo 2, de grado r > 1, divide al polinomio1 − x2r−1. Para r = 3, por ejemplo, se cumple que tanto 1 + x + x3 como 1 + x2 + x3

dividen a 1− x7. Realmente 1− x7 = (1− x)(1 + x+ x3)(1 + x2 + x3) modulo 2.De este hecho y del teorema demostrado en 2.2.2 sobre la duracion del periodo de

una secuencia (es el menor entero p para el que el polinomio caracterıstico f(x) dividea 1 − xp) se concluye facilmente que si una secuencia tiene un polinomio caracterısticoirreducible de grado r, el perıodo de la secuencia es un factor de 2r − 1.

Como corolario a este ultimo enunciado, si 2r − 1 es primo, entonces a cualquierpolinomio irreducible de grado r le corresponde una secuencia de longitud maxima.

Los numeros primos correspondientes a 2r−1 son conocidos como primos de Mersenne.Los primeros veintitres primos de Mersenne se han calculado mediante ordenador y semuestran en la tabla 2.1.

2.3.2. Las funciones de Euler y de Mobious

Existe una formula explıcita para calcular el numero de polinomios irreducibles mod2 de grado r, e incluso para calcular el numero de polinomios de “exponente maximo”(en

Page 82: PFC Modulador Digital Programable modulAD mediBER

2.3 Polinomios modulo 2 70

Cuadro 2.1: Primos de Mersenne: 2p − 1. Primeros 23 valores de p.

2 17 107 2203 96893 19 127 2281 99415 31 521 3217 112137 61 607 425313 89 1279 4423

algunos textos tambien llamados polinomios primitivos) de grado r. Estas formulas estanconstituidas a partir de dos funciones utilizadas usualmente en teorıa de numeros y sedefinen en esta seccion.

Por el teorema de factorizacion unica de aritmetica, todo entero n > 1 se puededescomponer en factores primos,

n =k∏i=1

pαii (2.12)

Segun los terminos de esta factorizacion, la funcion de Euler φ se define como

φ(n) =

1 si n = 1∏ki=1 p

αi−1i (pi − 1) si n > 1

(2.13)

En particular, si P es un numero primo φ(P ) = P − 1. Si Q es tambien primo,φ(PQ) = (P − 1)(Q− 1). Tambien, φ(P 2) = P (P − 1). La funcion φ esta tabulada en latabla 2.2

Una definicion equivalente de la funcion de Euler es: φ(n) es el numero de fraccionespositivas irreducibles no mayores de 1 con denominador n. Por ejemplo, si n = 6, los unicossextos irreducibles son 1/6 y 5/6. Entonces φ(6) = 2. Esto coincide con la definicion originalpuesto que, segun esta, φ(6) = φ(2 · 3) = (2− 1)(3− 1) = 2.

La funcion de Mobius µ se define segun 2.12 como:

µ(n) =

1 si n = 10 si

∏ki=1 αi > 1

(−1)k en cualquier otro caso (ej. si n es elproducto de k distintos primos)

(2.14)

Si P es primo, µ(P ) = −1. Si Q tambien es primo, µ(PQ) = 1, mientras queµ(P 2) = 0. Tambien la funcion de Mobius esta tabulada en 2.2.

2.3.3. Numero de polinomios irreducibles

El numero de polinomios irreducibles modulo 2 de grado n viene dado por:

ψ2(r) =1r

∑d|r

2dµ(r

d), (2.15)

donde la suma se extiende sobre todos los divisores positivos d de r.

Page 83: PFC Modulador Digital Programable modulAD mediBER

2.3 Polinomios modulo 2 71

n µ(n) φ(n) n µ(n) φ(n) n µ(n) φ(n)

1 1 1 18 0 6 35 1 242 -1 1 19 -1 18 36 0 123 -1 2 20 0 8 37 -1 364 0 2 21 1 12 38 1 185 -1 4 22 1 10 39 1 246 1 2 23 -1 22 40 0 167 -1 6 24 0 8 41 -1 408 0 4 25 0 20 42 -1 129 0 6 26 1 12 43 -1 42

10 1 4 27 0 18 44 0 2011 -1 10 28 0 12 45 0 2412 0 4 29 -1 28 46 1 2213 -1 12 30 -1 8 47 -1 4614 1 6 31 -1 30 48 0 1615 1 8 32 0 16 49 0 4216 0 8 33 1 20 50 0 2017 -1 16 34 1 16

Cuadro 2.2: Funciones φ y µ tabuladas hasta para n = 50

Por ejemplo, para calcular el numero de polinomios irreducibles modulo 2 de grado8, los divisores de 8 son d = 1, 2, 4, 8. Entonces r/d = 8, 4, 2, 1 y µ(8/d) = 0, 0,−1,+1. Portanto,

∑d|r 2dµ(8/d) = 0 + 0− 16 + 256 = 240, y

ψ2(8) =18

∑d|8

2dµ(8d

) = 30

Los valores de ψ2(r) se incluyen en la tabla 2.3 para r 5 24.

Ya se ha dicho que no todos los polinomios irreducibles de grado r tienen maximoexponente (no todos son primitivos). Es decir, no todos corresponden a secuencias deregistros de desplazamiento de longitud 2r − 1. El numero de polinomios modulo 2 degrado r que tienen maximo exponente viene dado por:

λ2(r) =φ(2r − 1)

r(2.16)

Por ejemplo, el numero de polinomios primitivos de grado 8 es

λ2(8) =φ(255)

8=φ(3,5,17)

8=

2 · 4 · 168

= 16

Por tanto, en este caso, la mitad de los polinomios irreducibles tienen maximo ex-ponente. Sin embargo, cuando 2r − 1 es primo, ψ2(r) = λ2(r) = (2r − 2)/r.

Tambien se ha tabulado λ2(r) en 2.3.

Page 84: PFC Modulador Digital Programable modulAD mediBER

2.4 Aleatoriedad de las secuencias de registros de desplazamiento 72

r 2r − 1 λ2(r) ψ2(r) r 2r − 1 λ2(r) ψ2(r)

1 1 1 2 13 8191 630 6302 3 1 1 14 16383 756 11613 7 2 2 15 32767 1800 21824 15 2 3 16 65535 2048 40805 31 6 6 17 131071 7710 77106 63 6 9 18 262143 8064 145327 127 18 18 19 524287 27594 275948 255 16 30 20 1048575 24000 523779 511 48 56 21 2097151 84672 99858

10 1023 60 99 22 4194303 120032 19055711 2047 176 186 23 8388607 356960 36472212 4095 144 335 24 16777215 276480 698870

Cuadro 2.3: Funciones ψ y λ tabuladas hasta r = 24

2.3.4. Periodos mas pequenos

No es difıcil catalogar los posibles periodos cortos (es decir, los exponentes menores)que un polinomio irreducible mod 2 de grado r puede tener. Tambien es facil establecercuantos polinomios irreducibles existen con cada uno de estos exponentes.

Cada factor f de 2r − 1 que no es factor de cualquier numero 2s− 1 con s < r se dacomo exponente de los polinomios irreducibles de grado r. Concretamente, existen φ(f)/rpolinomios irreducibles de grado r con exponente f .

Por ejemplo,si r = 8, 2r − 1 = 255, que tiene los factores 1, 3, 5, 15, 17, 51, 85, 255.De ellos, 1, 3, 5, y 15 ya dividen 24 − 1. Por tanto, los otros factores 17, 51, 85 y 255 sedan como periodos de polinomios irreducibles.

En particular, hay φ(17)/8 = 2 con exponente 17, φ(51)/8 = 4 con exponente 51,φ(85)/8 = 8 con exponente 85, y φ(255)/8 = 16 con exponente 255. Ya tenemos los 30polinomios irreducibles de grado 8, 2 + 4 + 8 + 16 = 30.

2.4. Aleatoriedad de las secuencias de registros de desplaza-miento

2.4.1. Propiedad de balance

Supongamos que un registro de desplazamiento de r etapas recorre todos los 2r −1 estados posibles antes de volver a repetir la secuencia. Si numeramos estos estadosen notacion binaria desde 1 hasta 2r − 1, y consideramos el dıgito unitario (el menossignificativo), veremos que este es un 1 para los numeros impares y 0 para los pares. Desde1 hasta 2r−1, hay 2r−1 numeros impares, y 2r−1−1 numeros pares. Por tanto, en cualquiersecuencia de registro de desplazamiento de longitud maxima hay 2r−1 unos, y 2r−1 ceros.

Por lo tanto, podemos concluir que la propiedad de balance se cumple en todas lassecuencias generadas en registros de desplazamiento.

Page 85: PFC Modulador Digital Programable modulAD mediBER

2.4 Aleatoriedad de las secuencias de registros de desplazamiento 73

2.4.2. Propiedad de realizacion

En la secuencia de maxima longitud an generada en un registro de desplazamiento,hay 2r − 1 formas de elegir r terminos consecutivos. Es decir, cualquier posible array de rterminos consecutivos, exceptuando la combinacion “todo ceros”, ocurre exactamente unavez.

En particular, r unos consecutivos ocurre solo una vez. Esta realizacion debe estarprecedida por un cero y seguida de un cero, ya que de lo contrario existirıa alguna otrarealizacion de r unos consecutivos.

Un cero seguido por r−1 unos ocurre exactamente una vez. Pero eso ya se ha tenidoen cuenta en la secuencia de r unos, que viene precedida de un cero. De forma similar,r − 1 unos seguidos por un cero ocurre exactamente una vez, y aquı se tiene en cuentael que la realizacion de r unos debe de ir seguida de un cero. Entonces, esta no es unaverdadera realizacion de r − 1 unos.

Supongamos 0 < k < r − 1. Para encontrar el numero de realizaciones de unos delongitud k, consideremos r terminos consecutivos que empiecen en cero seguido de k unos,despues un cero, y los restantes r − k − 2 terminos arbitrarios. Esto ocurre 2r−k−2 veces,ya que cada modo de completar los r terminos (los r− k− 2 terminos arbitrarios), ocurresolo una vez.

Razonamientos analogos se cumplen para el numero de realizaciones de ceros delongitud k, para 0 < k < r − 1. La combinacion de r ceros consecutivos no se da nunca(esto pararıa al registro de desplazamiento). El resto de combinaciones, como por ejemploun “uno seguido de r − 1 ceros”debe de producirse, de manera que exista una realizacionde r − 1 ceros.

De esta manera se ha determinado completamente la forma de estudiar la estructuracompleta de una secuencia de longitud maxima generada en un registro de desplazamiento,en lo que se refiere a numero de realizaciones de unos (a partir de aquı se llamaran bloques)y de ceros (llamadas huecos):

Si 0 < k < r − 1, hay 2r−k−2 bloques y huecos de longitud k. Tambien, hay un solohueco de longitud r − 1 y un bloque de longitud r.

En terminos del periodo p de la secuencia (p = 2r − 1), hay (p+ 1)/2 realizaciones,la mitad de ellas bloques y la otra mitad huecos. De los bloques, la mitad tienen longitud1, un cuarto tienen longitud 2, la octava parte tienen longitud 3, . . . y lo mismo ocurrecon los huecos. Ası se continua hasta llegar a solo un bloque y un hueco de longitud r− 2.Solo queda un hueco de longitud r − 1 y un bloque de longitud r.

Este resultado se puede resumir diciendo que la propiedad de realizacion se cumpleen las secuencias de longitud maxima generadas en registros de desplazamiento.

2.4.3. Propiedad de correlacion

Sea bnla secuencia resultante de transformar la secuencia binaria an mediantela operacion bn = 1 − 2an, esto es, los ceros se transforman en unos y los unos en -1.Tambien es equivalente la transformacion bn = eiπan .

Si tomamos las secuencias A0, A1, . . . , Ap del apartado ?? y les aplicamos la trans-formacion anterior, obtenemos las secuencias B0, B1, . . . , Bp. Ahora la adicion modulo 2para las secuencias Ai equivale a la multiplicacion de las Bi, como se pone de manifiestoen las tablas de adicion y multiplicacion:

Page 86: PFC Modulador Digital Programable modulAD mediBER

2.5 Resumen 74

⊕ 1 0 × -1 1

1 0 1 -1 1 -10 1 0 1 -1 1

(2.17)

Como Ai + Aj = Ak, ahora BiBj = Bk, donde el producto BiBj tambien se tomatermino a termino. Tambien se cumple (con la excepcion de Bk = B0 = 1, 1, 1, . . ., quesolo ocurre cuando i = j), que Bk contiene (p− 1)/2 unos y (p+ 1)/2 menos unos, por lapropiedad de balance y pertenecer al grupo Abeliano.

La funcion de autocorrelacion ya se enuncio en el apartado 2.1.1 pero se repiteparticularizada para las secuencias bn a continuacion:

Rb(τ) =1p

p∑n=1

bnbn+τ =

1 si τ = 0

−1/p si 0 < τ < p,(2.18)

ya que bnbn+τ es una secuencia del tipo Bi · Bj , y por tanto tambien es del tipoBk. Entonces, el exceso de +1 con respecto a −1 es p para B0, y -1 en cualquier otro caso.

De aquı se puede establecer que todas las secuencias generadas en registros de de-splazamiento de longitud maxima cumplen la tercera propiedad de aleatoriedad.

2.5. Resumen

En este capıtulo se han enunciado las propiedades que cumplen las secuencias bina-rias consideradas pseudoaleatorias. Se ha visto que un metodo muy sencillo de generarlasconsiste en utilizar un registro de desplazamiento con realimentacion modulo 2.

Las secuencias generadas en registros de desplazamiento satisfacen una relacion derecurrencia lineal an =

∑ri=1 cian−i, donde los coeficientes ci valen 0 o 1 en funcion de si la

etapa i esta o no implicada en la realimentacion. A partir de esta relacion de recurrencia sededuce el polinomio caracterıstico f(x) = 1 −

∑ri=1 cix

i, cuyas propiedades matematicasdeterminan el comportamiento de la secuencia. En concreto, se demuestra que el periodode la secuencia es el menor entero positivo p para el que se cumple que 1− xp es divisiblepor f(x).

Segun terminos de teorıa elemental de numeros, se enuncian las formulas explıcitasque determinan el numero de polinomios irreducibles de grado r, y el numero de polinomiosprimitivos, tambien llamados de maximo exponente, de grado r. Este numero coincideunicamente si 2r−1 resulta ser un numero primo. El numero de polinomios irreducibles esligeramente menor a 2r/r (asintoticamente igual), y el numero de polinomios primitivoses del mismo orden de magnitud.

Por ultimo, se ha demostrado que las secuencias generadas a partir de polinomiosprimitivos satisfacen las tres caracterısticas basicas de aleatoriedad.

La referencia [?] constituye una recopilacion excelente sobre el tema. En ella sepueden encontrar diversos procedimientos para encontrar polinomios primitivos, aunquedada su extension no se pueden incluir en este trabajo.

Page 87: PFC Modulador Digital Programable modulAD mediBER

Capıtulo 3

Medidas de calidad

Despues de haber efectuado un repaso de la teorıa de las secuencias pseudoaleato-rias, su generacion y propiedades fundamentales, necesitamos saber como se utilizan estassecuencias a la hora de hacer las pruebas de simulacion de trafico real. Las consideracionesy procedimientos definidos a este respecto por la ITU han sido tenidas en cuenta en lamedida de lo posible a la hora de realizar este trabajo.

Estas consideraciones se han ido revisando ya que en la actualidad el aumento de lastransmisiones de datos ha cambiado las exigencias de calidad en los enlaces. Definir y medirel factor de calidad no es una tarea facil. Primeramente, es necesario contestar a preguntascomo, si la calidad es el numero total de errores de bit o si es la probabilidad de errores debit dentro de un cierto perıodo, si se requiere una configuracion de prueba especial y comocomparar diferentes resultados provenientes de lıneas diferentes con distintas velocidades.

La transmision de voz en las redes digitales no es muy sensible a los errores de bit,dado que estos ocasionan solo una leve distorsion del sonido, mientras que la exactitud en larecepcion de informacion es algo crıtico en la transmision de datos. Con el fin de asegurarque el termino “calidad” tenga el mismo significado para todos, la ITU especifico enlas recomendaciones G.821 y M.550 las condiciones y lımites de clasificacion para hacermediciones en servicios defectuosos.

3.1. La Recomendacion G.821 ITU

Los parametros de servicio defectuoso son especificados en la Recomendacion G.821de la ITU. La recomendacion especifica la calidad de servicio de una conexion digitalhipotetica de referencia con longitud de 27.500 km, y se recomienda un perıodo de medi-cion de un mes. La asignacion de los datos de calidad del servicio a una parte de laconexion y mediciones durante un perıodo menor que un mes estan especificadas en lasRecomendaciones G.821 y M.550.

Como se requiere un cierto nivel de calidad de una lınea antes que pueda ser usadapara transmision de datos, la recomendacion divide la medicion en tiempo disponible ytiempo no disponible. La medicion de errores solo se debe evaluar mientras la conexioneste en estado de disponibilidad.

Un cambio de tiempo disponible a tiempo no disponible es ocasionado por 10 se-gundos sucesivos con alarmas o con una proporcion o relacion de bits erroneos de mas de10−3. Los 10 segundos seran parte del tiempo no disponible.

Un cambio de tiempo no disponible a tiempo disponible es ocasionado por 10 se-

75

Page 88: PFC Modulador Digital Programable modulAD mediBER

3.1 La Recomendacion G.821 ITU 76

gundos sucesivos en los cuales la relacion de errores de bit ha sido mejor de 10−3. De lamisma manera que en el caso anterior, los 10 segundos seran parte del tiempo disponible.Una indicacion grafica de los dos cambios de estado se muestra en la figura 3.1.

Figura 3.1: Consideracion de los errores en la determinacion del tiempo de disponi-bilidad

La figura 3.2 pone de manifiesto como se deben considerar los dos sentidos de unenlace a la hora de realizar la medida de calidad del mismo en lo que se refiere a tiemposde disponibilidad. Como se podrıa deducir facilmente, el enlace esta fuera de servicio o enperiodo de tiempo no disponible cuando alguno de los dos sentidos lo este.

Figura 3.2: Tiempo de disponibilidad en un enlace segun la disponibilidad de losdos sentidos

Los parametros de servicio son calculados y clasificados solo para el tiempo disponible.Esto significa que cuando se realicen las mediciones de servicio es importante comprobarcuanto tiempo ha sido clasificado como tiempo no disponible.

En el tiempo disponible se usan diferentes terminos para definir el nivel de degradacionen el enlace. Los terminos son los siguientes:

Segundo Erroneo (SE, en ingles ES): Un segundo en tiempo disponible en el cual seproduce al menos un error en un bit.

Segundo Severamente Erroneo (SSE, en ingles SES): Un segundo en tiempo disponiblecon una relacion de bits erroneos superior a 10−3, o un segundo en el cual se ha de-tectado un alarma.

Page 89: PFC Modulador Digital Programable modulAD mediBER

3.1 La Recomendacion G.821 ITU 77

Minuto Degradado (MD, ingles DM): Un minuto en tiempo disponible con una propor-cion de bits erroneos superior a 10−6, en la cual los segundos severamente erroneosson excluidos del tiempo disponible y el resto del tiempo es dividido en bloques de60 segundos.

Un bloque es un minuto degradado si la proporcion de bits erroneos es superior a10−6.

Figura 3.3: Terminos de la recomendacion G.821

Una clasificacion de la calidad de transmision es inevitablemente un compromisoentre el deseo de satisfacer las necesidades de diferentes servicios y la necesidad de realizarsistemas de transmision tomando en consideracion condiciones tecnicas y economicas. Enla Recomendacion G.821, se han convenido los objetivos de servicio defectuoso para laconexion hipotetica de referencia1, durante un perıodo de medicion de un mes, que semuestran en la tabla 3.1.

Clasificacion de servicio Objetivo ( % max. de tiempo)

Minutos degradados 10Segundos severamente erroneos 0.2

Segundos erroneos 8

Cuadro 3.1: Objetivos maximos de servicio defectuoso segun G.821

Otro parametro que a menudo es usado en las mediciones de servicio defectuosopara sistemas de radioenlaces es la proporcion de errores de bit residual. En los sistemasde radioenlaces, los errores son causados principalmente por desvanecimientos, los cualesprovocan que los sistemas de proteccion mediante redundancia conmuten automaticamenteel enlace a una conexion alternativa. Por ello, el tiempo que contiene la proporcion deerrores mas grande no debera ser tomado en cuenta. La proporcion de errores de bitresidual no esta descrita en la recomendacion G. 821, pero sı en la Rec. 634 de la ITU, dondeel procedimiento de medicion esta descrito preliminarmente. Este principio consiste enhacer mediciones de proporcion de bits erroneos durante un perıodo de un mes usando untiempo de integracion de 15 minutos. El 50 % de los intervalos que contienen la proporcionmas alta de bits con error son descartados y la proporcion mas alta del resto de intervaloses entonces la proporcion de errores de bits residual.

Otra manera, mas practica, de calcular la proporcion residual de bits erroneos, y queesta mas relacionada con los parametros de la recomendacion G.821, es similar al calculo

1Ver la Figura 3.4

Page 90: PFC Modulador Digital Programable modulAD mediBER

3.2 Asignacion de los objetivos G.821 78

de los minutos degradados. Los segundos severamente erroneos son excluidos del tiempodisponible y la proporcion de bits erroneos del tiempo restante es entonces la proporcionresidual de bits erroneos.

De todas maneras, a la vista de comparaciones realizadas con otros equipos profe-sionales de medida de BER, y por coherencia con la filosofıa adoptada en ellos, no hansido tomadas en cuenta estas ultimas precisiones de la norma acerca de la tasa de BERresidual. Es una medida mas realista el tener en cuenta todos y cada uno de los errores,incluidos los que provocan las conmutaciones de redundancia porque al fin y al cabo, sidichas conmutaciones se producen, y de hecho ocurre en la practica, los enlaces y comu-nicaciones afectados se veran perjudicados por ellas. En tal caso, ¿por que no van a sertenidos en cuenta estos errores en el momento de las mediciones?.

3.2. Asignacion de los objetivos G.821

A fin de asignar los objetivos a mediciones reales, la conexion hipotetica de referenciaes dividida en grado local, grado medio y grado alto.

Los circuitos en grado local son definidos como aquellos que operan entre el recintodel usuario y una central local a velocidades bajo los 2 Mbits/s.

Los sistemas en grado medio son aquellos que operan entre centrales locales y la rednacional. La longitud combinada de los enlaces en grados medio y local no debe exceder1250 km.

Los circuitos en grado alto son conexiones de larga distancia e internacionales queoperan preferentemente a altas velocidades.

Figura 3.4: La conexion hipotetica de referencia y su division segun los diferentesgrados de la recomendacion G.821

Los segundos erroneos y minutos degradados son asignados a los diferentes grados,de manera que al grado local le es permitido el 15 % de los objetivos en cada extremo, algrado medio, el 15 % de los objetivos en cada extremo, y al grado alto, el 40 % restante delos objetivos.

La asignacion de segundos severamente erroneos esta basada en un principio difer-ente. El objetivo total es 0.2 %, y el 0.1 % es asignado a las tres clasificaciones de circuitosen las mismas relaciones que para los segundos erroneos y los minutos degradados. Estoda la siguiente distribucion:

Page 91: PFC Modulador Digital Programable modulAD mediBER

3.2 Asignacion de los objetivos G.821 79

Clasificacion de circuito Asignacion de objetivos MD y SE

Grado Local (dos extremos) 15 % asignacion en bloque a cada extremoGrado Medio (dos extremos) 15 % asignacion en bloque a cada extremo

Grado Alto 40 %

Cuadro 3.2: Asignacion de objetivos de minutos degradados y segundos erroneos

Clasificacion de circuito Asignacion de objetivos SSE

Grado Local (dos extremos) 0.015 % asignacion en bloque a cada extremoGrado Medio (dos extremos) 0.015 % asignacion en bloque a cada extremo

Grado Alto 0.04 %

Cuadro 3.3: Distribucion del 0.1 % de segundos severamente erroneos

El resto del 0.1 % de segundos severamente erroneos es asignado a la clasificaciongrado alto y medio para dar cabida a los meses peores del ano para sistemas de transmisionde larga distancia. Pero debido a la naturaleza estadıstica de los meses peores en unaconexion mundial, es recomendable la distribucion siguiente:

El 0.05 % de los segundos severamente erroneos a un sistema de radioenlaces de2500 km que puede ser usado en el grado alto o medio de la conexion.

El 0.01 % de los segundos severamente erroneos para una conexion por satelite.Para circuitos en grado medio y grado local, la distribucion es una en bloque. Esto

significa que es el total permitido de extremo a extremo sin que importe la longitud de laconexion. Para conexiones de grado alto, la longitud de la conexion tiene que ser tomadaen cuenta al asignar los objetivos de calidad del servicio. Para demostrar la manera decalcular la distribucion, se usara una conexion con una longitud de 10000 km para elcalculo de la distribucion de los segundos erroneos. El 40 % del 8 % es asignado a unaconexion en grado alto con una longitud de 25000 km. Esto significa que el 3,2 % esasignado a toda la longitud, pero como la longitud es solo 10000 km, se debera multiplicarpor 10000/25000. Por consiguiente, la asignacion es 1,28 % de segundos erroneos. Paralos segundos severamente erroneos, el 0,04 % es asignado al grado alto, lo cual debe sermultiplicado por 10000/25000. Por tanto, la asignacion sera 0.016 % mas el valor extraarriba mencionado si se trata de una conexion por satelite o un sistema de radioenlaces.

Como en realidad los enlaces rara vez tienen 27500 km de longitud, una distribucionmas practica de los objetivos de calidad del servicio es indicada en la recomendacion G.821donde se describen las secciones digitales con longitudes de 280 km y 50 km. En teorıa,solo se pueden usar las secciones de 280 km, pues la asignacion basada en la longitudsolamente es usada para los circuitos en grado alto. Sin embargo, como las conexiones degrado medio pueden ser divididas en diferentes secciones, la asignacion para circuitos engrado medio es usada tambien.

Al calcular la asignacion para las diferentes secciones, la longitud es redondeadaal valor entero mas alto de 280 km y multiplicada por el valor apropiado de la tabla.Por ejemplo, la asignacion de minutos degradados para un enlace con una longitud de500 km puede ser calculada con la formula siguiente: 2 × 0,45 % del 10 % = 0,09 %. Dela misma manera, la asignacion de segundos severamente erroneos puede ser calculada

Page 92: PFC Modulador Digital Programable modulAD mediBER

3.3 Especificaciones G.821 para otras velocidades 80

Clase de calidad de Longitud SDHR Asignacion Para clasificacion deseccion (Km) ( %) circuitos

1 280 0.45 Alto o medio2 280 2 Medio3 50 2 Medio4 50 5 Medio

Cuadro 3.4: Clasificacion de calidad de seccion digital

como: 2× 0,45 % del 0,1 % = 0,0009 % mas el valor de margen extra para los sistemas deradioenlaces o conexiones por satelite.

3.3. Especificaciones G.821 para otras velocidades

Como los objetivos de G.821 son especificados para una conexion de 64 kbit/s, lasmediciones en otras velocidades tienen que ser normalizadas a 64 kbits/s. La manera deproceder esta especificada en el Apendice D de esa recomendacion. Los segundos sever-amente erroneos y minutos degradados estan basados en la proporcion de errores de bity por lo tanto pueden ser calculados directamente. Sin embargo, esto puede causar prob-lemas en rafagas de errores menores de un segundo pues estas pueden no resultar en unsegundo severamente erroneo en el orden superior, mientras que pueden resultar en segun-dos severamente erroneos en los canales de 64 kbit/s debido a la perdida de alineacion detrama en multiplexores de orden superior. Para solucionar este problema, un tiempo deintegracion menor de un segundo o lımites mas estrictos deberan ser tenidos en cuenta.

Un segundo erroneo es definido como un segundo con uno o mas errores de bit enun canal de 64 kbit/s, lo cual hace mas complicado normalizar segundos erroneos a otrasvelocidades. El metodo mas sencillo es dividir el numero de errores en un segundo conuna constante para la velocidad. Esta constante es la velocidad dividida por 64 kbit/s,es decir, el equivalente en numero de canales telefonicos contenidos en la trama que setrasmite. Por ejemplo, si en un enlace de 2 Mbit/s se cuentan 16 errores en el perıodo deun segundo, se contaran 16/32 = 0.5 segundos erroneos. Si la medicion tiene lugar durante10 segundos, el porcentaje de segundos erroneos sera 0.5/10 = 5 %. Como un segundo jamaspuede considerarse como mas de un segundo erroneo, la formula es solamente usada si elnumero de errores es menor de la velocidad dividida por 64 kbit/s, si no, el segundo es unsegundo erroneo. En otras palabras, en un enlace de 2 Mbps, 32 o mas bits erroneos en unsegundo se comportaran como un segundo erroneo, y menos de 32 errores como menos deun segundo erroneo.

Esta formula esta basada en la suposicion de que, en el peor de los casos, 32 erroresde bit daran un error en cada uno de los canales de 64 kbit/s, lo cual no tiene porque serestrictamente cierto, y menos de 32 bits erroneos jamas afectaran a todos los canales. Dela misma manera, el numero de errores en un segundo erroneo puede ser calculado paralas otras velocidades.

Es importante senalar los calculos anteriormente mencionados estan unicamenteespecificados para velocidades de 2 Mbit/s o mas altas, y que el uso del calculo paraservicio defectuoso del sistema no asegura que el objetivo de calidad se cumpla segun el

Page 93: PFC Modulador Digital Programable modulAD mediBER

3.3 Especificaciones G.821 para otras velocidades 81

criterio de la recomendacion G.821 a nivel de canal telefonico de 64 kbit/s.

Page 94: PFC Modulador Digital Programable modulAD mediBER

Capıtulo 4

Modulador DDS

Terminada la exposicion teorica, comenzamos la parte practica del trabajo en la quese incluyen las memorias correspondientes a los dos circuitos desarrollados. Este capıtulocorresponde al primero de ellos, y consiste en el montaje de un modulador digital queutiliza las tecnicas DDS expuestas en el capıtulo 1.

La placa moduladora DDS constituye un modesto intento de poner en practica losconceptos tratados sobre la sıntesis digital directa, y de comprobar “in situ” el estado delarte en lo que se refiere a integracion de estos sistemas. Como en casi todas las ramas dela ciencia y de la tecnica, los fundamentos teoricos siempre se establecen de antemano y suaplicacion suele topar contra alguna barrera de ındole tecnologico. En este caso particularha ocurrido ası, y ha sido necesario esperar un par de decadas hasta que la sıntesis digitaldirecta ha alcanzado el factor de integracion suficiente como para poder resultar en chipsatractivos y compactos, aptos para su utilizacion a escala masiva.

El diseno tiene como componente fundamental un dispositivo DDS al que el fab-ricante ha anadido recursos hardware para implementar los tipos de modulacion masampliamente utilizados: FSK, QPSK y 16QAM. ¿Por que se ha escogido para el disenoeste modulador y no otro? Se puede comprobar en la tabla resumen de la seccion 1.10.5que para realizar un modulador completo utilizando tecnicas DDS no habıa muchas posi-bilidades de eleccion. La mayorıa de los circuitos integrados son dispositivos DDS-DACa secas, es decir, utiles en la generacion de tonos fijos, o si tienen los registros auxiliaresnecesarios para generar las modulaciones, entonces no integran el conversor D/A. Ası queson pocos, al menos que se hayan encontrado, los que podıan generar las modulacionesrequeridas.

Cumpliendo estos objetivos generales se encuentran en la misma tabla los chipsAD9853 de Analog Devices y el STEL-2176 de Standford Telecom. Los dos son bastanteparecidos, aunque el segundo supera al primero en cuanto a que tambien es demodulador,lo que lo encarece considerablemente, ademas de aumentar la complejidad de su control.La unica pega que se le puede achacar al integrado de Standford es que no se encuentraen sus abundantes hojas caracterısticas la resolucion en frecuencia del dispositivo DDSdel modulador. El integrado de Analog es unicamente modulador, con lo que su control esbastante mas sencillo, ademas de que su uso esta bastante mas extendido. Al final optamospor el modulador AD9853 basandonos en criterios economicos y de facilidad en cuanto asu disponibilidad.

En la placa del circuito impreso, a la que en el resto de la memoria denominaremosplaca DDS, se han incluido una serie de accesorios que complementan su funcionamientoconvirtiendola en un sistema completo de modulacion, capaz de funcionar en un amplio

82

Page 95: PFC Modulador Digital Programable modulAD mediBER

4.1 Especificaciones de la placa DDS 83

margen de velocidades de modulacion y de frecuencia de salida. El interface de controlutilizado para todo el montaje es el puerto paralelo del PC. En el apendice A se ha incluidoun resumen de funcionamiento del mismo, haciendo incapie en la forma en que se utilizaen nuestro trabajo.

4.1. Especificaciones de la placa DDS

La placa DDS es la encargada de generar la senal modulada con la que se quiererealizar medidas de propagacion en el laboratorio. El rango de frecuencias de salida esta enlo que comercialmente se denomina de frecuencia intermedia, FI, que corresponde a unmargen que va desde lo que serıan frecuencias altas de la banda de HF, hasta las frecuenciasbajas de la banda de VHF. Todavıa no tenemos el sistema completo si lo que queremosmedir es la banda L, banda de 1800 Mhz asignada a comunicaciones moviles, que es dondese plantean los problemas practicos de propagacion.

Queda por lo tanto pendiente la adquisicion o diseno de un convertidor que trasladela senal modulada de salida de esta placa a la frecuencia de interes. No sera difıcil encontrarequipos comerciales con estas caracterısticas.

A modo de introduccion sobre la placa DDS, podemos empezar esta exposicion conuna sıntesis de lo que son sus prestaciones.

Generales

Aplicaciones: Modulador digital en transmisores digitales. Se puede emplear en redesde cable e inalambricas para el envıo de video, voz o cualquier tipo de datos digitales.

Modulaciones soportadas: FSK, QPSK, 16QAM, DQPSK y D16QAM.

Senal de salida de FI modulada de 0 a 65 Mhz, (40 % Nyquist), con una impedanciade 50 Ω. Filtro antialiasing pasobajo con frecuencia de corte a 3 dB de 67 Mhz.

Modo de trabajo:

1. Modo continuo. El diseno esta optimizado para este modo de transmision.

2. Modo a rafagas controlado por un terminal externo.

La trama de datos a transmitir debe cumplir la condicion de ser una fraccion parde la frecuencia del reloj del sistema ademas de estar sincronizada con el.

Caracterısticas operacionales principales

Formato de las senales digitales: TTL NRZ.

Frecuencia de referencia de 27 MHz (oscilador a cristal TTL de estabilidad media).El sistema esta equipado con un zocalo por si se desea cambiar esta frecuencia ytambien admite una fuente de reloj externa.

Frecuencia de reloj del sistema de 162 Mhz, (frecuencia de referencia multiplicada×6).

Page 96: PFC Modulador Digital Programable modulAD mediBER

4.1 Especificaciones de la placa DDS 84

Generador de reloj de bit incorporado. Crea la frecuencia de transmision de datosa partir del reloj de referencia de la placa. Ası se solventa el requisito general desincronismo entre estas dos senales.

La forma de onda puede ser simetrica o asimetrica dependiendo de la seleccionrealizada en el puente hardware JP3. El reloj de referencia es dividido por un factorque varıa entre 2 y 2047 para salida asimetrica mas otro factor adicional de 2 si lasalida se prefiere simetrica.

Senales de entrada a la placa DDS:

1. Trama de datos de transmision sincronizada y con una velocidad divisor par dela frecuencia de reloj del sistema. El reloj del sistema y el reloj de referenciade la placa DDS estan relacionados mediante el factor ×6; segun esta relacion,se cumple que cualquiera de las valores creados en el generador de reloj debit anterior cumple esta condicion. Existe ademas otra restriccion por la cualno todas las velocidades de bit que se pueden generar en la placa DDS estanpermitidas: la descomposicion en factores primos del valor que relaciona lafrecuencia del sistema con la velocidad de datos que tenga un factor mayor a63 no esta permitida. En el apartado 4.2.1.1 se profundiza sobre este tema,aunque para la tranquilidad del lector, podemos adelantar que el programa decontrol se encarga de evitar que estos valores se seleccionen, eliminando ası losproblemas que se pudieran producir.

2. Oscilador externo seleccionable mediante el puente hardware JP1 de la placa.

3. Control de transmision externo, tambien seleccionable mediante un puente JP2,por si se quiere utilizar otro control de transmision diferente al generado desdeel programa de control y funcionar en modo a rafagas.

Puentes hardware de configuracion: Su funcion esta resumida en la tabla 4.1 y susituacion fısica representada en la figura 4.1.

Alimentacion

Tension de entrada: 12 voltios DC.

Regulacion independiente para las partes analogicas (PLL y DAC) y la parte digitaldel circuito.

Consumo: 680 mA + 70 mA del ventilador de refrigeracion.

Control

Puerto Paralelo estandar del PC en modo compatible.

Programa de Control modulAD para los sistemas operativos Windows 98 y NT.

Disenado para transmision en modo continuo controlada desde el PC.

Software de control. Programa modulAD

Control de los parametros operacionales mas importantes, tales como frecuencia desalida (marca y espacio en caso de FSK), tipo de modulacion, codificacion diferencial,tipo de aleatorizador y velocidad de transmision de datos.

Page 97: PFC Modulador Digital Programable modulAD mediBER

4.1 Especificaciones de la placa DDS 85

JP1 Efecto en la operacion

1-2 Reloj interno utilizado como reloj de referencia3-4 Reloj externo utilizado como reloj de referencia

1-2, 3-4 Reloj interno utilizado como reloj de referencia y accesible en el conectorde datos

JP2

1-2 Habilitacion de transmision y programacion del DDS desde el programa decontrol

3-4 Senal externa de comienzo de transmision1-2,3-4 Seleccionado control interno de transmision y accesible al exterior en el

conector de datos

JP3

1-2 Reloj de bit asimetrico generado por el divisor principal accesible al exterior3-4 Reloj de bit simetrico generado por el divisor principal, mas un factor

anadido de 2, accesible al exterior

Cuadro 4.1: Funcion de los puentes hardware de la placa DDS

Figura 4.1: Situacion fısica de los puentes de configuracion hardware en la placaDDS

Page 98: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 86

Programacion de los coeficientes del filtro FIR de conformacion de pulso, responsablede la eliminacion de los lobulos laterales y de la forma del espectro de salida.

Ventana principal de la aplicacion parecida al frontal de un equipo comercial. Enella se indican los principales parametros de interes:

1. Frecuencia de salida.

2. Tipo de modulacion seleccionada.

3. Estado de activacion del aleatorizador y del codificador diferencial.

4. Indicacion de la velocidad de transmision en bps.

Desactivacion de senal modulada a la salida. Permite el ahorro de energıa cuandono se necesita transmitir.

4.2. Diseno hardware de la placa DDS

Ya sabemos que el elemento central de esta placa es el modulador AD9853, cuyonucleo es un DDS que genera dos senales desfasadas π/2 en el dominio digital, para multi-plicarlas por dos tramas binarias I y Q conformadas de antemano tambien interiormente,constituyendo lo que serıa un modulador en cuadratura, todo ello en el dominio digital(ver la figura 1.34).

Para no desmerecer el resultado, tambien se incluye lo que ha sido el ultimo avanceen integracion: el convertidor digital/analogico, todo dentro del mismo chip.

Nos encontramos entonces con un circuito integrado que ¡nos lo hace todo!. ¿Quenecesitamos para obtener la senal de salida? Tan solo una trama binaria de datos con losque modular la senal, (el modulador se encarga de su procesado como veremos en la seccionsiguiente), una senal de reloj para que la circuiterıa interna del modulador funcione, unfiltro paso bajo antialiasing y un programa de control con el que cargar al modulador lasopciones concretas de funcionamiento.

Vemos entonces que la potencia de la placa de modulacion DDS reside en el interiordel propio modulador DDS. Es casi obligatorio, por tanto, comenzar entendiendo todas ycada una de las funcionalidades del AD9853, pues es la llave con la que entender el restode los circuitos auxiliares de la placa.

4.2.1. El modulador AD9853

La figura 4.2, obtenida de las hojas de datos suministradas por el fabricante, es eldiagrama de bloques interno del modulador AD9853, y a ella vamos a hacer referenciaasiduamente a lo largo de este apartado.

La parte de la derecha constituirıa el “nucleo DDS” del sistema, donde se realizan lasoperaciones de modulacion recien mencionadas. Tal y como se ve en la figura, el diagramadibuja un modulador en cuadratura de libro, eso sı, este caso en el dominio digital.

La senal modulada es una secuencia de palabras de 10 bits cuyo valor equivaleal valor instantaneo en amplitud de la forma de onda modulada equivalente analogica.Su velocidad de variacion o regimen con el que cambian estas muestras sera la del relojdel sistema. Para generar esa senal analogica, la secuencia se entrega a un convertidoranalogico-digital A/D lo mas perfecto posible para generar el menor numero de senales

Page 99: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 87

Figura 4.2: Diagrama de bloques del modulador DDS AD9853

indeseadas, resultando, como consecuencia de este proceso de conversion, la senal modu-lada sintetizada originalmente mas unas componentes espectrales, que podrıamos llamar“imagenes”, producidas por efecto de tratarse de un sistema muestreado. En el capıtulo 1se calcula teoricamente el espectro resultante.

Un “defecto” notable de este espectro de salida es que tiene un factor envolvente enforma de funcion sen(x)/x. El disenador del AD9853 ha pensado en ello y ha incluido a laentrada del convertidor A/D una etapa para compensarlo. Se trata de un filtro pasoaltodisenado con la funcion de transferencia inversa (x/sen(x)) dentro del ancho de bandade Nyquist, de manera que los usuarios solo tenemos que preocuparnos de eliminar lasimagenes generadas y olvidarnos del factor envolvente dentro del intervalo de Nyquist.

Otra ventaja mas de este circuito la constituye el hecho de tener incorporado unmultiplicador interno del reloj de referencia de entrada ×6 mediante PLL.

Para alcanzar un amplio margen de variacion en la frecuencia de salida, (ancho debanda de salida), se debera trabajar, en teorıa, como mınimo a una frecuencia de relojigual al doble de ese ancho de banda, en la practica algo mas para facilitar el filtrado.En los margenes en que nos movemos actualmente, estarıamos hablando de frecuenciasdel orden de 150 a 300 Mhz para circuitos DDS comerciales. Un oscilador a 300 Mhz escualquier cosa menos facil de realizar, ya que suelen producir problemas de estabilidad yde armonicos.

Pensando en facilitarnos la vida a los usuarios, de nuevo han anadido un circuitoPLL dentro del AD9853 preparado para generar una frecuencia de reloj de sistema iguala seis veces la senal de reloj de referencia de entrada. El precio que hay que pagar poresta facilidad es que el espectro en banda estrecha de la senal de salida tiene un ruido defase superior al del reloj de entrada, caracterıstica esta tıpica de los osciladores a partirde lazos de enganche de fase PLL. En este caso es el usuario quien decide si utiliza o noeste multiplicador, puesto que su activacion se puede controlar desde el control externo.Haciendo referencia a la grafica 4.2, este subsistema esta en la esquina inferior izquierdade este esquema de bloques.

El resto de los bloques funcionales que aparecen en el esquema 4.2 nada tienen quever con la sıntesis digital directa. Se trata de diferentes manipulaciones a la trama binariade entrada para acondicionarla antes de llegar a los moduladores digitales en cuadratura.

Entre todos los procesos que refleja el esquema de bloques, el mas conocido es el dela conformacion del pulso de salida. Es el caso, por ejemplo, de las conocidas respuestas

Page 100: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 88

en coseno alzado, que eliminan los lobulos laterales del espectro de salida. Tratandosede senales en el dominio digital, la manera mas comoda y fiable de sintetizar este fil-tro conformador es mediante una topologıa del tipo FIR. En el esquema de bloques delAD9853 encontramos en el camino de las tramas I y Q otros elementos poco conocidosllamados “filtros de interpolacion” a continuacion de los filtros FIR. Su funcion resultaimprescindible para el correcto funcionamiento del sistema por lo que se trataran con unpoco mas de detalle en el siguiente apartado.

Para completar el grafico nos quedarıan otros cuatro bloques que anaden valor alsistema, pero que podrıan no estar dentro del integrado sin que ello supusiera la perdidade merito del circuito. El verdadero merito consiste en reunir todos los componentes delproceso de generacion de la senal incluyendo un DAC que trabaja a 180 Mhz y 10 bits deprecision.

Volviendo al hilo de la exposicion, el primer modulo que encontramos siguiendola ruta de la trama de datos es un codificador Reed-Salomon. La codificacion de Reed-Solomon es un tipo de codificacion cıclica especialmente util en la correccion de erroresa rafagas, es decir, es efectiva en canales que tienen memoria. Las referencias [?] y [?]contienen abundante informacion sobre este tipo de codificacion de bloque.

Desde el punto de vista practico, un codificador Reed-Solomon anade bits de redun-dancia a la trama digital de entrada organizada en bloques. Se dice que un codificador R-Sgenera un codigo (N,K), cuando a un bloque de K bytes, se le anaden otros 2t mas, cont siendo el numero de bytes erroneos corregibles, (aquı los errores se consideran a nivel debyte, da lo mismo que haya uno u ocho bits erroneos dentro del mismo), resultando unalongitud de bloque de codigo (mensaje + paridad) de:

N = K + 2t bytes (4.1)

Cuando se utiliza el codificador R-S, los datos del mensaje deben “rellenarse” condatos no validos durante el perıodo en que el codificador anade los 2t bytes de redundancia,pues durante ese tiempo los bits de entrada son ignorados. Esa circunstancia se refleja enla figura 4.3

Figura 4.3: Funcionamiento del codificador Reed-Solomon

La siguiente etapa en el camino de modulacion es la etapa de aleatorizacion. Elproblema que se trata de resolver en este caso, siempre se trata de eso, es la dependenciaque existe entre la senal modulada y las caracterısticas estadısticas de la fuente digital. Lassecuencias largas de ceros o unos pueden provocar errores de sincronismo en recepcion. Sihay patrones de datos repetitivos, la senal modulada aparece con tonos espureos discretosque pueden producir intermodulaciones. Tambien ocurre que en esquemas de modulacioncon portadora suprimida, los datos no aleatorios empeoran el rechazo de portadora. Lasolucion es usar un aleatorizador para “blanquear” la trama de entrada.

Page 101: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 89

El esquema del aleatorizador en el AD9853 utiliza la tecnica de los registros dedesplazamiento de la misma manera que el generador de tramas de BER en la placa desecuencias pseudoaleatorias. Los polinomios generadores que emplea el modulador DDSson, segun las hojas del fabricante:

1 + x5 + x6 compatibilidad DAVIC/DVB

1 + x14 + x15 compatibilidad MCNS(DOCSIS)

Los valores iniciales del registro de desplazamiento son totalmente programables.Tambien se incluye un bloque de insercion de secuencia preambulo programable. El

preambulo es un conjunto de hasta 96 bits que se transmiten cada vez que se inicia latransmision. El proposito de enviar unos bits durante el inicio es el de ayudar al receptora sincronizarse. Por un convenio establecido en las normas DAVIC/DVB, la secuencia depreambulo no se codifica de forma diferencial en DQPSK, mientras que no ocurre lo mismoen D16QAM.

El preambulo, seguido de los datos codificados y aleatorizados son a continuacionformateados de acuerdo con la modulacion elegida. El ultimo bloque, al que se conocecomo codificador de modulacion, tiene la funcion de transformar la secuencia de entradade bits, a sımbolos, para formar las dos corrientes I y Q que alimentan al modulador encuadratura.

En el caso concreto de FSK, y segun los datos del fabricante, para poder crear saltosde frecuencia continuos en fase, la trama digital de entrada se salta todos los bloques de“preprocesado” y se dirige directamente a comandar los dos registros de palabra de sintonıadel DDS. Esto equivale en la practica a decir que en FSK no se permite la utilizacion deFEC Reed-Solomon, ni del aleatorizador, como tampoco de la secuencia preambulo, algoque no tendrıa porque ser ası. Los datos podrıan enviarse al control del DDS despues desalir de estos procesos para ası poder aprovechar la mejora que ofrecen en el rendimientodel sistema.

Ademas del comentario pendiente sobre la funcion de los interpoladores, no se haaclarado hasta ahora de todos estos bloques que se ha hecho o como se utilizan en eltrabajo practico. No es etico criticar al fabricante por haberse saltado los bloques de“precodificacion” de la trama de datos en FSK, y no reconocer nuestras carencias. Hagamosentonces una puesta al dıa del resultado de nuestro trabajo, aunque mas adelante sevuelvan a reflejar sus caracterısticas. En este momento tenemos frescos todos los conceptos:

El codificador de sımbolos se controla totalmente mediante la aplicacion de controly de este modo se pueden generar cualquiera de los cinco esquemas de modulacionposibles. De todas formas, hay que reconocer que es posible que la aplicacion decontrol lleve a error. Aunque en el pulsador de seleccion de modulacion no aparecenDQPSK ni D16QAM, estos dos tipos de modulacion se activan cuando se seleccionael recurso “ficticio” llamado en la interface grafica de usuario codificador diferencial.

El bloque de insercion de preambulo no ha sido tenido en cuenta a la hora de realizarla aplicacion. En las hojas del fabricante se sugiere que siempre son necesarios comomınimo 4 bits de preambulo. Dicho y hecho, se programo la secuencia preambulo“0000” y no se penso que algun usuario del circuito pudiese evaluar la variacionintroducida por un cambio en esa secuencia. Son deformaciones del mundo practico.

Page 102: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 90

Lo contrario se penso respecto del aleatorizador. Existen controles que lo habilitan ydeshabilitan, y ademas, tambien se puede seleccionar el tipo de scrambler utilizado,en las dos variantes permitidas.

Del codificador Reed-Solomon no nos olvidamos. Desafortunadamente, por un fallode diseno, ha quedado inutilizado aunque en un principio se penso que lo ıbamosa poder utilizar. Sin embargo, a causa de la construccion hardware del generadorde reloj de bit, que es un bloque funcional de esta placa DDS de que hablaremosmas adelante, era preciso generar otra temporizacion anadida para “bloquear” latransmision de bits de informacion durante el perıodo en que el codificador R-Sinserta sus bytes de paridad. Para realizar este cambio habıa que reconstruir todala circuiterıa de division de reloj, amen de necesitar mayor numero de buffers decontrol, que equivalıa a volver a disenar una nueva placa. Bajo esta circunstancia,la decision que primo fue la de rentabilizar el trabajo realizado hasta ese momentoy continuar hacia adelante. Para resumir, se puede habilitar el funcionamiento delcodificador Reed-Solomon, pero no se ha previsto en la aplicacion de control por noser utilizable con nuestro sistema; sı que lo serıa con una fuente de datos externaque tuviese en cuenta el detalle de los bytes de paridad. En ese caso, serıa cuestionde anadir una opcion mas al programa.

Despues de esta cura de humildad, continuamos con la explicacion del funcionamien-to del modulador DDS AD9853. A continuacion se trata el bloque que quedo pendientesobre los filtros interpoladores.

4.2.1.1. Filtrado de datos (FIR + etapas interpoladoras)

A lo largo del camino seguido por los datos, se debe de llevar a cabo una “equiparacion”entre la velocidad con que se realizan sus transiciones, que equivale a su intervalo de“muestreo.o velocidad de transmision, y por otro lado, la velocidad a la que trabaja elDDS que en este caso, y puesto que vamos a modular, funciona como senal de osciladorlocal. Para que el sistema entregue el resultado que se espera de el, es obligatorio hacercoincidir estos dos intervalos de muestreo, ver figura 1.34.

Como la velocidad de trabajo del DDS no se puede bajar, resulta obvio que laoperacion a realizar es la de volver a “muestrear” los datos de transmision, pues entran auna velocidad menor que la del reloj del sistema DDS. Como resultado se transformaran ennuevos datos muestreados a la frecuencia del sistema, siempre manteniendo las propiedadesde la senal original de entrada. De ese modo conseguimos que las dos senales digitales quese procesan en el interior del modulador mantengan la misma referencia temporal.

La transformacion que acabamos de describir corresponde al funcionamiento de uninterpolador, con algunos matices. Un interpolador sobremuestrea una trama digital deentrada a una velocidad multiplo entero de la misma. Como resultado se generan compo-nentes espectrales imagenes de la senal de entrada solapadas dentro del ancho de bandade Nyquist del regimen binario de salida, (ver figura 1.42).

De lo que se trata es de filtrar esas componentes solapadas en el nuevo ancho de ban-da de Nyquist resultante, para que las propiedades originales de la senal sobremuestreadano se alteren.

Estas son las dos funciones basicas que llevan a cabo la etapa de filtrado FIR ylas dos etapas interpoladoras encadenadas en el camino de datos, (todo ello para las dostramas I y Q): por un lado acondicionar la escala de tiempo de los datos de entrada a la

Page 103: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 91

Figura 4.4: Detalle de construccion de las etapas de interpolacion en el AD9853

de proceso del DDS, y por otro lado, eliminar las componentes indeseadas que se generanen ese sobremuestreo de acondicionamiento.

Dentro del filtrado pasobajo a que se somete la trama de datos, la etapa FIR seaprovecha para conformar la parte “fundamental” o significativa de la forma del espectrode salida, mientras que el efecto de las dos etapas interpoladoras CIC, tambien de respuestapasobajo, no tiene relevancia en este caso. Su pendiente de caıda en la banda de intereses menos pronunciada que la de los filtros FIR. Lo que se hace es compensar la caıdaoriginada por las etapas interpoladoras en el diseno de la curva de respuesta del filtro depulso FIR.

En la seccion 1.9 se describe el funcionamiento de los filtros FIR y de los interpo-ladores CIC (Cascaded Integrator Comb).

Los caminos I y Q del modulador contienen cada uno un filtro FIR conformadordel pulso de 41 etapas con coeficientes ai de 10 bits. Los coeficientes se representan me-diante valores enteros en complemento a dos. Por tanto, cada etapa tiene un coeficientemultiplicativo con valores posibles −512 ≤ ai ≤ 511.

Respecto a la constitucion interna de los filtros, una importante caracterıstica es quepor diseno y para ahorrar el numero de multiplicadores necesarios en total, el fabricanteha elegido una realizacion simetrica de los mismos. Al programar los coeficientes, solo sepueden definir el de la etapa central y los de las 20 inferiores.

Se puede demostrar, que los filtros digitales cuya respuesta impulsiva es de la forma

h(n) = h(M − n) para n = 0, 1, . . . ,M (4.2)

tienen una respuesta en frecuencia

H(ejω) = He(ejω)e−jωM/2 (4.3)

con He(ejω) una funcion par real de ω. El termino e−jωM/2 representa un terminode fase lineal o retardo constante [?]. Por eso los filtros FIR con esta caracterıstica sedenominan de fase lineal.

El manual del fabricante advierte de que esta primera etapa FIR sobremuestreao interpola la velocidad de sımbolo en un factor de 4. Al final de la cadena sin embargo,las tasas que hay que hacer coincidir son la del reloj del sistema con el que trabaja el DDS

Page 104: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 92

y la velocidad de transmision de datos en bits/seg. Por tanto, habra que tener en cuentao “compensar” este factor de interpolacion de sımbolo ×4 en el factor total dependiendode la modulacion que se emplee.

Un ejemplo del filtrado que se puede sintetizar corresponde a la caracterıstica encoseno alzado. En primer lugar se calcularan los coeficientes a programar en cada una delas etapas sin tener en cuenta el efecto ya comentado de las etapas de interpolacion. Dichoefecto se tendra en cuenta a posteriori.

Puesto que trabajamos con senales reales, se calcula la transformada inversa deFourier de la parte positiva de la caracterıstica, sustituyendo la exponencial compleja porun coseno. El ejercicio se ha realizado teniendo en cuenta el factor de interpolacion ×4introducido por el filtro FIR. Los detalles del mismo se incluyen en el listado del ficherode Matlab que se incluye en el apendice ??.

La figura 4.5 representa el resultado de la simulacion de algunas de las respuestasen coseno alzado para diferentes factores de α.

En las distintas simulaciones de la grafica 4.5, se fue modificando manualmente elvalor de α en el fichero de comandos ad9853 srrc.m.

Como resultado, se obtuvieron los coeficientes que se debe programar en cada unade las etapas de los filtros FIR. En la tabla 4.2 se anotan los valores una vez normalizadosal valor maximo de 511, siendo la etapa numero 20 el punto central del mismo. Ya se hadicho que por construccion interna del modulador DDS, los valores se cargan de formasimetrica alrededor de la toma central.

α 0 1 2 3 4 5 6 7 8 9 10

0.1 -11 9 25 28 12 -16 -37 -38 -12 27 580.5 0 3 2 -2 -5 -2 5 7 1 -7 -70.9 0 2 0 -2 -1 2 1 -3 -3 3 4

α 11 12 13 14 15 16 17 18 19 20

0.1 55 13 -52 -102 -97 -13 138 315 457 5110.5 7 19 7 -34 -71 -48 71 260 438 5110.9 -5 -8 5 13 -11 -41 11 189 410 511

Cuadro 4.2: Coeficientes de cada etapa del filtro FIR en el AD9853 para lasdistintas curvas de respuesta en coseno alzado sin compensar la caıda provocadapor las etapas interpoladoras.

Si en el camino de datos intercalamos a continuacion unas etapas interpoladoras,el resultado en el dominio de la frecuencia es el de “repeticion” de la curva de respuestasintetizada dentro del nuevo ancho de banda de Nyquist. La figura 1.42 representaba estasituacion en el dominio espectral, y en ella se podıa apreciar como el numero de imagenessolapadas dependıa del factor R de interpolacion.

Afortunadamente, el mismo bloque utilizado para interpolar contiene la respuestacompensatoria del “defecto” descrito. Ya se comento la construccion interna de los filtroscon estructura CIC, Cascaded Integrator-Comb, en la seccion 1.9.3.4. Se puede demostrarque la respuesta de un filtro CIC viene determinada por:

HCIC(z) =

(RM−1∑k=0

z−k

)N(4.4)

Page 105: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 93

(a) (b)

(c) (d)

(e) (f)

Figura 4.5: Respuestas impulsivas y en frecuencia simuladas en Matlab para elfiltro FIR del AD9853 correspondientes a funciones en coseno alzadocon factores α de 0.1, 0.5 y 0.9(a) y (b) Curvas de respuesta para α 0.1(c) y (d) Curvas de respuesta para α 0.5(e) y (f) Curvas de respuesta para α 0.9

Page 106: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 94

donde N es el numero de secciones de integracion y filtros peine contenidos en laestructura CIC, recordando que siempre coinciden en numero. R es el factor de interpo-lacion programable del bloque, y M el numero de retardos dentro de cada etapa de filtropeine. Dentro del AD9853 dos de estas variables se han fijado, N = 4 y M = 1 y quedadisponible al usuario el factor de interpolacion.

La curva de respuesta en frecuencia se encuentra evaluando H(z) para z = ej(2πf/R):

HCIC(f) =

(RM−1∑k=0

e−j(2πf/R)k

)N(4.5)

que es una respuesta pasobajo tal y como se vio en la figura 1.51 para distintosvalores de parametros M y N.

Cada rama de datos I y Q dispone de dos de estas etapas ademas del filtro confor-mador FIR, todas en cascada. Es preciso si se quiere conseguir una funcion conformadoralo mas precisa posible, tener en cuenta la variacion introducida en la respuesta del filtroFIR por las etapas CIC, pues su caracterıstica no es perfectamente plana en la bandade paso. Lo que sı resulta practico es despreciar el efecto de la segunda de estas etapas,puesto que como ya hay que tener en cuenta el factor de interpolacion total, en este casosı que resulta despreciable su efecto.

Lo que se hace es “precompensar” la curva de respuesta del filtro FIR en su diseno.Para ello, multiplicamos su funcion de transferencia por una funcion compensadora

HCOMP (f) =∣∣∣∣ 1HCIC(f)

∣∣∣∣ (4.6)

aplicandola en un margen del 90 % del ancho de banda de interes (parametro β enel fichero cic.m de simulacion de Matlab). Si se aplica en todo el rango de frecuencias,el incremento de amplitud que experimentan los lobulos espureos fuera de la banda nocompensa con la precision conseguida en la banda de paso.

Por ultimo, otro efecto importante sobre el que se debe de actuar es el de la escala enfrecuencia. La frecuencia de muestreo a la entrada de la etapa CIC resulta ser la de salidadel filtro FIR, o lo que es lo mismo, cuatro veces la velocidad de sımbolo: existe por tantoun problema de escala. Afortunadamente la solucion es facil puesto que la interpolacionen frecuencia equivalıa a hacer un cambio de variable en la funcion de transferencia deH(f) por H(f/Escala). En este caso el factor Escala = 4.

Se ha realizado en ejercicio en Matlab donde se ponen en practica todas estas con-sideraciones. Su listado se incluye en el fichero cic.m del apendice C. Aquı incluimossimplemente las graficas que ponen de manifiesto la precompensacion de la respuesta delfiltro en coseno alzado y la tabla con los nuevos valores de los coeficientes. ¿Cual es elproblema principal planteado por este fenomeno? La compensacion es especıfica para unfactor de interpolacion del filtro R determinado, ya que segun se ha visto en la ecuacion 4.5,la curva de respuesta de las etapas CIC depende de este parametro, que varıa segun lohaga la velocidad de transmision. Por tanto, idealmente serıa necesario recalcular estaprecompensacion cada vez que cambiara la tasa de transmision. En nuestra aplicacion nolo hacemos ası, y tampoco es que se haya visto una degradacion tan importante en lacurva de respuesta, puesto que despues de haber jugado con el fichero cic.m cambiandoalgunos valores de parametros, no se aprecia un cambio tan sustancial en los coeficientesresultantes.

Page 107: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 95

(a) (b)

Figura 4.6: Compensacion de la caıda producida por la etapa de interpolacion CICen el filtro FIR del AD9853. Valores de R = 6, α = 0,5 y β = 0,9.(a) Respuesta impulsiva antes y despues de la compensacion(b) Curva de respuesta en frecuencia antes y despues de la compen-sacion.

Nos quedarıa por determinar como se calculan los valores de interpolacion que sedeben de cargar en las distintas etapas, pero preferimos posponerlo para la seccion 4.3donde se describe el software, puesto que se tendra que volver a explicar un problema quese plantea al respecto.

Etapa 0 1 2 3 4 5 6 7 8 9 10

Valor org. 0 3 2 -2 -5 -2 5 7 1 -7 -7Valor comp. 1 4 2 -3 -6 -1 7 9 1 -10 -9

Etapa 11 12 13 14 15 16 17 18 19 20

Valor org. 7 19 7 -34 -71 -48 71 260 438 511Valor comp. 8 24 12 -33 -78 -62 56 251 435 511

Cuadro 4.3: Coeficientes de cada etapa del filtro FIR en el AD9853 antes y de-spues de la compensacion del efecto de las etapas interpoladoras CIC.Valores de R = 6, α = 0,5 y β = 0,9.

4.2.2. Bloques funcionales de la placa DDS

Despues de esta revision de las caracterısticas del circuito AD9853, vamos a tratardel resto de los modulos que lo acompanan en la placa DDS. Esta claro que la finalidad deestos modulos es la de proporcionar las senales de control y sincronismo que el moduladornecesita para funcionar satisfactoriamente. En este apartado trataremos en profundidaden cada uno de estos modulos.

La representacion esquematica de la placa DDS se muestra en la figura 4.7. En ellase pueden distinguir los principales modulos de que consta la placa:

1. Puerto paralelo de control

Page 108: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 96

Figura 4.7: Esquema de bloques de la placa DDS

2. Buffer de control y datos

3. Modulador DDS

4. Generador de reloj de bit

5. Oscilador de referencia

6. Salida FI

7. Entrada-salida de datos

Los bloques de acceso al exterior son el puerto paralelo, la salida de FI y el bloque deentrada-salida de datos. El primero posibilita la comunicacion con el ordenador de control,y los restantes reciben o entregan las senales necesarias para la operacion. El bloque desalida de FI entrega la salida modulada y filtrada en un conector BNC, mientras que elbloque de entrada-salida es el que recibe la trama digital moduladora y un conjunto desenales de diversa ındole, todas teniendo la cualidad de ser senales digitales que formanparte de las distintas opciones operativas del sistema en su conjunto. De ellas hablaremosllegado su momento.

Los bloques principales de la placa DDS son el oscilador de referencia, el generadorde reloj de bit, y el modulador DDS. El primero genera la senal de reloj maestro para losotros dos modulos: el generador de reloj de bit, del que se obtiene el reloj de transmision dedatos, y el modulador DDS, constituido por el circuito integrado AD9853 que ya conocemosen profundidad.

El buffer de control y datos esta formado por un grupo de demultiplexores quereciben las senales enviadas por el bus de datos del puerto paralelo y las acondicionanpara ser utilizadas en el hardware del circuito.

Page 109: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 97

En los siguientes apartados entramos mas en detalle en todos y cada uno de estosbloques.

4.2.2.1. Puerto paralelo de control

Accesible por medio de un conector plano de 26 patillas, se prolonga mediante uncable plano paralelo hasta el conector exterior DB-25 del chasis que contiene todo elsistema. El mismo cable plano se emplea en paralelo para conectar tambien al puertola placa de generacion de secuencias. Desde el conector DB-25 del chasis solo hace faltaconectar un cable paralelo hasta el PC de control. En la tabla 4.4 estan anotados losterminales utilizados para la comunicacion de esta placa con el ordenador de control.

Pin Nombre Funcion en la placa DDS

2 D0 LSB del Bus de datos

3 D1 Bus de datos

4 D2 ”5 D3 ”6 D4 ”7 D5 ”8 D6 ”9 D7 MSB del Bus de datos

14 LATCH1 Strobe de carga del bus de datos en placa DDS15 OD3 Hilo de lectura de datos desde placa DDS16 LATCH2 LSB de Seleccion de Registro en placas DDS y BER17 LATCH3 MSB de Seleccion de Registro en placas DDS y BER

18 a 26 GND Masa

Cuadro 4.4: Interface paralelo de la placa DDS.

En este caso, el PC de control solo lee informacion de la placa DDS a traves del hilode estado OD3, desde donde se lee el puerto serie de control del AD9853. Del resto decircuitos de la placa DDS no hay forma de obtener informacion.

4.2.2.2. Buffer de control y datos

Este bloque es el encargado de recibir los datos del puerto paralelo y, como cualquierbuffer, mantenerlos en sus terminales de salida al margen de las variaciones del bus cuan-do este se encuentra enviando informacion a otros perifericos, por ejemplo la placa desecuencias pseudoaleatorias.

Casi podrıamos haber denominado a este bloque como de control, puesto que lamayorıa de las senales que se reciben realizan esa funcion. La excepcion corre a cargo delterminal etiquetado como BUS DATIN del buffer U5, encargado de soportar la comuni-cacion serie con el bus de control del modulador AD9853.

Comentaremos la funcion de los componentes que constituyen este bloque apoyandonosen la figura 4.8:

Page 110: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 98

Figura 4.8: Buffer de control y datos de la placa DDS

U10, 74HC139. Es un demultiplexor dos a cuatro que genera las senales de “enable”de activacion de los drivers que retienen la informacion enviada desde el PC a travesdel bus de datos del puerto paralelo (D0 a D7). Los hilos de seleccion son los ter-minales LATCH2 y LATCH3 del puerto de control del PC, y su validacion tambienllega directamente desde el puerto paralelo a traves de la senal de control LATCH1.

En la figura se ve como se aprovechan solo dos de las cuatro salidas demultiplexadasdisponibles (CHIP0 y CHIP1). Es el resultado de la optimizacion realizada a fin dereducir en lo posible el tamano y numero de circuitos de la placa.

U3, 74HC574. Es el primero de los buffers triestado de este bloque, siendo el encarga-do de mantener el byte menos significativo de la palabra de comando de division queel programa de control envıa al generador de reloj de bit, P0 a P7. Este componentetiene anulada su capacidad de poner en estado de alta impedancia sus salidas al noser de utilidad en este caso.

La salida se actualiza con el dato presente en los hilos del bus en el flanco de subidade su senal de enable, CHIP0, que le llega desde U10.

U5, 74HC574. Es el otro buffer triestado, aunque esta caracterıstica no se empleaal igual que en su predecesor. Sus salidas ya se dirigen a sitios muy variados delsistema, razon esta por la que se comenta separadamente de su companero.

Los tres bits menos significativos completan la funcion de controlar el divisor pro-gramable del generador de reloj de bit, P8 a P10. Para programar el divisor hade procederse de forma curiosa: si lo que se desea es programar un factor dedivision de 2, hay que cargar el valor 37EH , o 111111111102; para programarel maximo valor de division de 2047, en este caso el valor a cargar debe ser1H . El valor 0H no tiene validez puesto que impide el correcto funcionamientodel circuito, y serıa el correspondiente a un factor de division de 2048. Vemospor tanto que el valor a cargar corresponde al complemento a 2 del factor dedivision deseado.

Q4 es el hilo que resetea el modulador DDS, tambien accesible en el conector deentrada-salida por si se quiere aprovechar en otro sistema externo.

Page 111: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 99

Q5 es un terminal de control de la transmision del AD9853 que tambien juegaun papel importante en la programacion del mismo a traves de su puerto decontrol serie. Su funcion se comenta con mayor rigor en el apartado dedicadoal conexionado del modulador AD9853.

Q6 a Q8 controlan el flujo de senales en el puerto serie de control del modulador.Utilizando sus etiquetas de la figura 4.8, 3 STATE BUS es el hilo que controlael estado de alta impedancia del transceptor U8 incluido dentro del bloquedel modulador DDS. Este transceptor debe estar en alta impedancia durantelas respuestas del integrado hacia el terminal OD3 del puerto paralelo delPC. BUS DATIN constituye el otro sentido de datos en el puerto serie; sucontenido se envıa hacia el modulador pasando a traves del transceptor U8. Porultimo, BUS CLK es el hilo conectado al terminal de reloj que temporiza lastransacciones del puerto serie del modulador DDS. En este caso, se requiere unaalta actividad en el puerto paralelo del PC, puesto que como ya se podra intuir,los intercambios de informacion con el modulador DDS se han de realizar bit abit.

4.2.2.3. Modulador DDS

Es el bloque que mas conocemos, pues esta constituido por el circuito integradoAD9853 con el que ya estamos familiarizados desde la seccion 4.2.1. Genera la senal mod-ulada directamente en el dominio digital a partir de la trama binaria moduladora deentrada. Su salida es una senal analogica a la que unicamente se debe someter a un pro-ceso de filtrado para eliminar las componentes espectrales indeseadas que el procesadodigital origina.

Figura 4.9: El circuito AD9853 y su conexionado en la placa DDS

En la figura 4.9 podemos observar el esquema de conexiones del AD9853 en la placaDDS. Se ha anadido el driver triestate U8B para resaltar el caracter bidireccional delpuerto serie de control del AD9853 (terminal BUS DAT IN). Formalmente este integrado

Page 112: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 100

deberıa de haberse incluido en el bloque de datos y control.En la figura se puede apreciar como los datos que se reciben de control han de

pasar a traves del buffer U8B hacia el modulador, etiqueta BUS DATIN, mientras quelas respuestas desde el modulador DDS exigen que este buffer pase al estado de triestate,dependiendo del hilo 3 STATE BUS, para que las senales de salida del terminal BUS DATIN lleguen hasta el modulo de control y datos, etiqueta BUS DAT, sin que la entradacargue la lınea. La temporizacion del bus esta gobernada por medio del hilo BUS CLK,a donde se han de aplicar los pulsos de reloj segun el diagrama que aparece en las hojasdel fabricante [?]. Estos pulsos se “generan” desde el programa de control, pues es el quecontrola todo el proceso de programacion del AD9853.

Otra parte integrante de este modulo, que tambien podrıa haber sido incluida en elbloque de control, esta representada en la figura 4.9. Su funcion, mas proxima al modode funcionamiento del modulador que al mero hecho de tratarse de un hilo de control,nos ha decidido a recogerlo dentro de este bloque. El terminal TX EN es el que deter-mina el paso a la condicion de transmision del modulador DDS, con la caracterıstica deque es obligatorio su deshabilitacion cuando se reprograman los registros del modulador.Cualquier cambio de configuracion del modulador pasa por el cambio a nivel bajo de esteterminal. Si este terminal esta activo, y por lo tanto la circuiterıa de modulacion tambien,el bus de control estara inactivo y viceversa.

Figura 4.10: Selector JP2 de habilitacion de transmision

Existe otra cuestion operativa en la que esta implicada el terminal TX EN. Setrata de que sirve como referencia de sincronismo en el inicio de la transmision. Por eso seincluye el biestable U7B (figura 4.10): para que la transicion de bajo a alto que se produceen este terminal durante el inicio de la transmision este sincronizada con el reloj de bit,y a la postre con el reloj del sistema. Por otra parte, se puede gobernar la transmisiondel modulador si se le sincroniza a un sistema externo, cambiando el puente JP2 a lasconexiones 3-4.

Continuamos conociendo la funcion del resto de terminales importantes para el fun-cionamiento del modulador DDS:

REF CLK IN, reloj de referencia de entrada, en este caso se ha elegido 27Mhz, porestar cerca del lımite maximo de 28 Mhz y haberse encontrado con relativa facilidad.El reloj del sistema, o reloj con el que trabaja el DDS es 6 veces mayor porque se hahabilitado el multiplicador interno a traves del bus de control.

Page 113: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 101

DAT IN, es el terminal al que se aplican los datos a transmitir. Esta conectado a laetiqueta SDI, que llega desde el conector de entrada-salida.

4.2.2.4. Generador de reloj de bit

Este bloque es simplemente un conjunto de divisores programables en cascada con elfin de obtener la frecuencia de reloj de bit a partir del reloj de referencia de la placa DDS.Esto quiere decir que no se puede generar cualquier velocidad de transmision: todas serandivisores exactos de la frecuencia de referencia. Este es uno de los factores determinantesde la frecuencia de referencia de la placa.

Figura 4.11: Esquema del generador de reloj de bit

Por ejemplo, para transmitir a la velocidad estandar de 2.048 Mbps, con el cristalde referencia actual de 27 Mhz se necesita una relacion de division de 13.1835, imposiblede conseguir. En ese caso, seleccionando un factor de division de 13 necesitarıamos unareferencia de 26.624 Mhz, que no sobrepasa el lımite superior de frecuencia permitidapor el modulador DDS. El factor de division 14 da como resultado 28.672 Mhz que sı losobrepasa. En este ejemplo serıa necesario, por tanto, sustituir el oscilador de referenciaactual por uno de 26.624 Mhz.

En nuestro diseno no tenıamos especificada ninguna velocidad en particular, porquepara hacer pruebas de laboratorio lo que importan son los ordenes de magnitud, ası quese escogio la frecuencia que mas se acercaba al lımite maximo de 28 Mhz y que se encon-tro facilmente en el mercado: 27 Mhz.

Por lo que respecta a la circuiterıa en particular, U1,U2 y U4 son los tres contadoressıncronos conectados en cascada que dividen el reloj de referencia CLK BUF. Se trata decontadores descendentes programables con un terminal de indicacion de final de cuentaRCO empleado como habilitacion en el contador siguiente de la cadena. Aun utilizandoeste metodo, se trata de un contador sıncrono si se observa que la senal de reloj CLK BUFse aplica a los tres contadores en paralelo.

Page 114: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 102

El terminal RCO del ultimo contador U4 es la salida asimetrica de este bloque,y como tal esta conectada a JP3; pero tambien se emplea en la carga de los valores deprogramacion de todos los contadores despues de invertirse en U8A. El terminal Y1 deU8A es la senal de salida invertida, con lo que al final de cada ciclo se genera un pulsode bajada de duracion igual a la del periodo de la frecuencia de referencia, que al estarconectado a los terminales LOAD de los contadores, provoca que los valores enviados desdeel buffer de datos P0 a P10 se carguen en la salida de estos, comenzando de nuevo la cuentadescendente en el siguiente pulso de reloj. Se deduce que para programar una relacion dedivision en este circuito lo unico que hace falta es colocar el valor adecuado de division enlos hilos P0 a P10 y el mismo circuito se encarga de cargarlo en el siguiente ciclo.

Se observa en la figura 4.11 que no se utiliza el terminal D de carga paralelo en U4.Esto es porque con 11 terminales, P0 a P10, podemos conseguir un margen de divisionde 211 − 1 = 2047 (el valor 7FFH no es valido), margen mas que suficiente en QPSK y16QAM dado que el modulador DDS como maximo tiene un factor de interpolacion de3906 al que hay que descontar el factor multiplicativo ×6 a que se somete la frecuencia dereferencia en el interior del modulador AD9853. La unica modulacion para la que resultautil tanto margen de division es para FSK que no tiene ningun procesado en el moduladorDDS.

Podıamos habernos casi ahorrado incluso un hilo mas de control del contador. Nose hizo ası puesto que no se necesitaba para ninguna otra funcion.

El biestable U7A sobraba y se penso aprovecharlo para el caso en que se deseara unfactor de forma en la senal de salida de reloj de bit del 50 %. Conectandolo en forma debiestable T conseguimos que su salida bascule a cada pulso de reloj asimetrico, obteniendopor tanto un factor adicional de division ×2, ademas del cambio en la forma de onda.La seleccion de salida de un reloj de bit u otro se realiza fısicamente en JP3, dondedeterminamos el reloj de bit disponible en el conector de entrada-salida:

1. Puente JP3 1-2. El reloj de bit utilizado es asimetrico.

2. Puente JP3 3-4. El reloj de bit empleado tiene factor de forma del 50 % y ademases sometido a una division adicional ×2, ademas de la comandada por el bus decontrol. Existe sin embargo un modo de indicarle al programa de control que se haseleccionado esta opcion, de modo que las indicaciones del mismo no sean erroneas.

La capacidad de division conjunta de todas las etapas de contadores en cascadaresulta estar entre 2 y 2047 mas el factor adicional × 2 anadido con el biestable U7A. Ellımite practico superior utilizado depende del tipo de modulacion que se este empleando,puesto que esta limitado por el software de control para no sobrepasar los lımites operativosde las etapas de interpolacion del modulador DDS. Los margenes de funcionamiento delcircuito se resumen en la tabla 4.5.

Para un reloj de referencia de 27 Mhz, se obtiene una velocidad de transmision dedatos maxima de 13.5 Mbps en modo asimetrico. Los lımites inferiores resultan ser ennuestro caso:

1. FSK: 13.190 Kbps en modo asimetrico y 6.595 Kbps en modo simetrico.

2. QPSK y DQPSK: 41.474 Kbps en ambos modos.

3. 16QAM y D16QAM: 83.077 Kbps en ambos modos.

Page 115: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 103

(a) (b)

(c) (d)

(e) (f)

Figura 4.12: Formas de onda de salida del generador de reloj de bit:(a),(c) y (e) Salida asimetrica para valores del divisor principal 2, 13y 2047.(b),(d) y (f) Salida simetrica para los mismos valores del divisor prin-cipal y con JP3 en la posicion 3-4

Page 116: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 104

Modo asimetrico Modo simetricofBIT max fBIT min fBIT max fBIT min

FSK fREF /2 fREF /2047 fREF /4 fREF /4094QPSK fREF /2 fREF /651 fREF /4 fREF /650

16QAM fREF /2 fREF /325 fREF /4 fREF /324

Cuadro 4.5: Sumario de velocidades de bit generadas en la placa DDS

Obviamente, estos valores dependen del reloj de referencia, por lo tanto se pueden variarcambiando el oscilador de referencia o utilizando uno externo segun las necesidades decada momento.

Para ilustrar el funcionamiento independiente de este bloque se han obtenido facil-mente las graficas de la figura ??. Al disponer en el terminal de salida de la placa DDSde la senal de reloj de bit generada en este bloque, no resulta difıcil comprobar el fun-cionamiento de este circuito. Se puede distinguir el distinto factor de forma de la senal desalida cuando se intercala el divisor U7A, resultando el factor adicional de division ×2.

4.2.2.5. Oscilador de referencia

Figura 4.13: Oscilador interno de referencia y jumper JP1 de seleccion de relojmaestro

Se utiliza como reloj maestro de transmision y tambien, tal y como se acaba decomentar en el apartado anterior, para la creacion del reloj de bit, puesto que ambosrelojes deben de ser sıncronos segun las especificaciones del modulador DDS. No tenıamosninguna razon que nos forzase la eleccion de la frecuencia, al margen de no sobrepasarel lımite del AD9853 de 28 Mhz. Se escogio la frecuencia de 27 Mhz por ser un valorfacilmente asequible en el mercado. De todos modos, si se desea trabajar con otra senalde informacion generada en un circuito con su propia fuente de reloj, es preciso utilizar

Page 117: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 105

esa misma fuente de reloj como referencia en la placa DDS. Es por lo que se ha previstola entrada de otro reloj externo en JP1.

De acuerdo con la figura 4.13, la etiqueta CLK representa el terminal interno de relojde la placa DDS. El bloque Y1 representa el oscilador a cristal incorporado en el circuito,con una frecuencia nominal de 27 Mhz y salida TTL, encapsulado en una carcasa DIL-16similar a la de los circuitos integrados TTL tradicionales. Es un buen metodo si se quieresustituir en el futuro por otro de frecuencia diferente. La contraprestacion que nos tocapagar por esa comodidad es la escasa precision de los mismos, puesto que suelen tener unaestabilidad caracterıstica de 10−7. La etiqueta EXT OL es la entrada de oscilador externadel conector de entrada salida.

Jugando con los puentes en JP1 podemos conseguir las siguientes posibilidades:

1. Puente JP1 1-2 aislado. El circuito trabaja con el oscilador interno Y1 de 27 Mhz.

2. Puente JP1 3-4 unico. En este caso el reloj de la placa DDS es el externo suministradodesde el conector de entrada-salida.

3. Puentes JP1 1-2 y 3-4 conjuntos. Ahora el circuito trabaja con el reloj interno yademas disponemos de el en lo que normalmente es entrada, por si queremos utilizarel reloj de la placa DDS en otro sistema distinto.

4.2.2.6. Salida de FI

Esta etapa comprende el filtro antialiasing y el acoplamiento mediante transformadorpara convertir las salidas unipolares de corriente del DAC, a senales bipolares simetricastal y como se recomienda en la seccion 1.8.

Figura 4.14: Filtro antialiasing de salida en la placa DDS

El esquema de la etapa de salida se representa en la figura 4.14, donde no se incluyenlas resistencias de terminacion que se conectaron a los terminales de salida del DAC durantela etapa de diseno mientras suministraban el transformador de banda ancha. La conexiondefinitiva ha quedado tal y como aparece en la figura, unicamente con el transformador yel filtro, y de ahı al conector BNC de salida. Las caracterısticas de los dos componentesse resumen a continuacion:

Transformador de banda ancha T1-1T-X65 de Minicircuits.

Page 118: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 106

Relacion de impedancias: 1:1.

Margen de frecuencia: 80 Khz a 200 Mhz.

Perdidas de insercion 1 dB: 200 Khz a 80 Mhz.

Perdidas de insercion 2 dB: 150 Khz a 150 Mhz.

Perdidas de insercion 3 dB: 80 Khz a 200 Mhz.

Filtro paso bajo PLP-70 de Minicircuits.

Banda de paso: DC - 60 Mhz (atenuacion < 1 dB).

Frecuencia de corte a 3 dB: 67 Mhz.

Banda eliminada: atenuacion > 20 dB a 90 Mhz.

4.2.2.7. Entrada-salida de datos

En este apartado comentaremos brevemente el conector de entrada-salida de la placaDDS, que es el punto donde se han reunido todas las senales digitales que por una causau otra han de estar accesibles al exterior. La ubicacion fısica del mismo se encuentra enla parte lateral superior del chasis donde se ha mecanizado todo el sistema, justo encimade su homologo de la placa de secuencias pseudoaleatorias, y a la misma altura que elconector BNC de salida de senal.

Figura 4.15: Conector de entrada de datos de la placa DDS

Es un conector plano de diez terminales agrupados en dos filas, y las senales se handistribuido de tal forma que su correspondencia en el conector de la placa de secuenciaspermita un cable plano paralelo de interconexion. De este modo, los terminales conectadosa este conector son los siguientes:

SDI Serial Data Input. Entrada de la trama digital de informacion a transmitir. Debede cumplir obligatoriamente la condicion que ya se ha repetido muchas veces a estaaltura, pero fundamental para el correcto funcionamiento del sistema: su velocidaddebe ser un submultiplo par del reloj del sistema, ademas de estar sincronizado conel.

EXT OL External Oscillator. Entrada TTL de frecuencia de referencia externa. Se activacambiando el puente JP1 a la posicion 3-4 y su funcion es permitir al modulador

Page 119: PFC Modulador Digital Programable modulAD mediBER

4.2 Diseno hardware de la placa DDS 107

trabajar cuando la trama de datos a transmitir tiene ya un reloj de referencia queno se puede cambiar. Se puede jugar astutamente con los puentes de JP1 y utilizareste terminal tambien como terminal de salida de la frecuencia de referencia interna,tal y como se comento en la seccion 4.2.2.5.

EXT TXE External Transmission Enable. Entrada de activacion de la transmision cuan-do se quiere trabajar con otra senal distinta a su homologa generada internamente.Es util si se quiere trabajar en modo a rafagas para sincronizar con la circuiterıa dedatos la activacion de la transmision.

CLK DAT Data Clock. Frecuencia de datos creada con la caracterıstica de ser sıncronaal reloj de referencia de la placa, por tanto apta para servir de senal de reloj en lacircuiterıa de datos de entrada. La senal viene desde el generador de reloj de bitque tiene incorporado la placa DDS. En nuestra aplicacion particular se utiliza en laplaca de secuencias pseudoaleatorias como senal de reloj de bit y como tal, determinala velocidad de transmision de datos.

RESET. Senal de reset del modulador AD9853 generado desde el control de la placa yque se ha dejado accesible al exterior por si en algun momento fuera de utilidad.

4.2.2.8. Alimentacion

El bloque de alimentacion esta constituido por tres reguladores similares, cada unode los cuales suministra la tension de 5 voltios a partir de los 12 de entrada. El motivode separar las distintas alimentaciones esta en el intento de mejorar en lo posible lasprestaciones de margen libre de espureos del modulador DDS. Se ha separado por unaparte la alimentacion al convertidor D/A del DDS (+VDA), por otro lado, la alimentaciondel PLL interno multiplicador de la frecuencia de referencia de la placa DDS × 6 paragenerar el reloj del sistema, en un intento de minimizar el acoplo de la senal de reloj a lasalida (+VD). Por ultimo, la alimentacion de la parte digital del modulador DDS y delresto de la placa, +V.

Figura 4.16: Reguladores de alimentacion independientes en la placa DDS

Page 120: PFC Modulador Digital Programable modulAD mediBER

4.3 Software de control 108

Con la ultima nos llevamos la sorpresa de tener que cambiar el regulador por otro queaguantase mas corriente, dado el elevado consumo del AD9853. La sorpresa siguio cuandodescubrimos su calentamiento, lo que nos decidio a instalar un ventilador para mantenerla temperatura dentro de los margenes de seguridad.

En el apendice A se puede ver como ha quedado montado todo el sistema dentro deun chasis de aluminio.

4.3. Software de control

Despues de tanto hardware llega el turno de revisar el software de control de la placaDDS, que comprende una aplicacion a la que se ha dado el nombre de modulAD. Constafundamentalmente de dos ficheros fuente, separacion hecha con el fin de ordenar por unlado lo que son las funciones de bajo nivel encargadas de interactuar con el hardware dela placa DDS, y por otro las funciones tıpicamente encargadas del aspecto grafico de lainterfaz de usuario.

En el apendice C se presentan los listados completos de la aplicacion modulAD.

4.3.1. Modulo principal mod.c

Las mayorıa de las funciones de este modulo estan pendientes principalmente delaspecto grafico de la aplicacion. En la figura 4.17 se ha hecho el despliegue de todos lospaneles graficos.

De entre todas estas ventanas, las mas interesantes son las de Configuracion delgenerador de reloj de bit y Configuracion del filtro FIR de datos. La primera controladirectamente el valor de frecuencia de bit generado por el bloque del mismo nombre. Enesta ventana se presenta una manera peculiar de comandar la frecuencia de bit deseada.Lo mas logico hubiera sido mostrar un control numerico donde escribir directamente lavelocidad de datos que se deseara utilizar. Sin embargo, surge un problema por la necesidadque tiene este valor de ser multiplo par de la frecuencia del sistema, o lo que es equivalente,de la frecuencia de referencia de la placa. El resultado final cuando se hubiese querido hacercambios rapidos, casi seguro que habrıa sido un continuo mareo al usuario advirtiendole dela imposibilidad de generar la velocidad que hubiese acabado de programar en el hipoteticocontrol. Puede que haya otra forma mejor de hacerlo, pero la solucion adoptada en este casoha sido la de comandar directamente el valor entero de division que se quiere programar.Aquı la aplicacion es la encargada de mostrarnos automaticamente el valor de velocidadde transmision resultante. La funcion directamente relacionada con la programacion delgenerador de reloj de bit es ValorDiv.

Una aplicacion comercial no hubiese dispuesto de la ventana para configurar loscoeficientes del filtro FIR. Lo usual serıa que el filtro estuviese programado para unacurva determinada, resultando un proceso transparente para el usuario. Desde el punto devista de la operacion del modulador, lo importante es que el espectro de salida aparezca sinlobulos laterales. Sin embargo, dado que se piensa utilizar esta aplicacion en el laboratorio,se ha anadido en este caso esta posibilidad de configuracion: resultara interesante veren el futuro el efecto de distintas curvas conformadoras del pulso en el espectro de lasenal de salida. Hablaremos de la funcion ValorFirAx, con “x” refiriendose al coeficienterespectivo del filtro FIR, que nos servira para introducirnos en uno de los aspectos claveen la programacion del camino de procesado de datos.

Page 121: PFC Modulador Digital Programable modulAD mediBER

4.3 Software de control 109

Figura 4.17: Distintas pantallas de la aplicacion de control modulAD

Page 122: PFC Modulador Digital Programable modulAD mediBER

4.3 Software de control 110

Aunque las dos funciones que vamos a comentar en este apartado se encuentran en elmodulo de la interface grafica de usuario, la verdad es que en este caso se puede considerarque estan bastante cerca del hardware de la aplicacion. Evidentemente, pertenecen almodulo mod.c porque estan a cargo de unos controles concretos y bien determinados delas ventanas de la aplicacion.

4.3.1.1. Funcion ValorDiv

La primera funcion que vamos a comentar de este modulo se encuentra asociada a laventana Configuracion del generador del reloj de bit. Su control de llamada es el etiquetadocomo “Divisor programable 2se ejecuta cada vez que el usuario modifica su contenido agolpe de raton o directamente escribiendo un numero dentro del mismo. Esta es la formade cambiar el valor de frecuencia del reloj de bit generado por la placa DDS, o lo quees lo mismo, la velocidad de transmision de datos. La funcion ValorDiv tambien es unafuncion importante porque se llama desde muchas otras funciones del modulo, siempreque la operacion que realize el usuario implique un cambio “serio” de configuracion delsistema.

A priori su funcionamiento no presenta muchas complicaciones conceptuales. De loque se trata es de escribir la palabra de programacion en el divisor de la placa DDS, yeste trabajo lo descarga sobre la funcion de bajo nivel gen bit clk. Las complicacionessurgen cuando se analizan un poco todas las posibilidades de funcionamiento, pues losvalores maximos y mınimos de frecuencia de bit permitidos dependen del tipo de modu-lacion seleccionado, y hay que considerar la estructura interna del modulador que no nospermitira programar todos los valores que fısicamente son posibles de generar. Toda estacomplicacion tambien se descarga sobre la funcion del modulo mod hard.c interpoladorque trataremos un poco mas adelante.

De momento nos sirve con saber que esta funcion chequea el valor que se ha coman-dado, y si se detecta un valor imposible de programar, la funcion interpolador automatica-mente busca el valor “permitido” por defecto y lo programa. Por supuesto, informa a lafuncion llamante para que la presentacion grafica se actualize correctamente y le aparezcaal usuario el mensaje de aviso pertinente.

Lo realmente destacable de esta funcion puede que no sea facil de distinguir ensu listado: es realmente la funcion que gobierna la correcta temporizacion de la placaDDS. Por un lado se ejecuta cada vez que se cambia el tipo de modulacion (FSK, QPSK,16QAM), tambien cuando se pulsa el boton del divisor fijo en la misma ventana, porsupuesto cuando se cambia el valor desde el mismo control. A continuacion llama a lafuncion que valida el valor comandado, despues llama a la funcion que modifica fısicamentela programacion del generador de reloj de bit, tambien ordena la correcta reprogramacionde todos los coeficientes del filtro de datos, y por ultimo modifica los registros internosdel modulador de acuerdo con la nueva velocidad. Es decir, es la encargada de que todoeste como debe de estar.

Otro detalle que se debe de mencionar no tiene nada que ver con esta funcion,pero se refiere a un control junto al boton Divisor programable, en este caso de nombreDivisor fijo. Lo importante es senalar que no tiene ningun efecto sobre el hardware de laplaca. Se ha incluido dentro de la interface grafica como medio de avisarle al programa decontrol de la posicion fısica del puente JP2. Es responsabilidad del usuario el no modificarinadecuadamente este control, porque de lo contrario la velocidad de datos indicada porla aplicacion serıa incorrecta.

Page 123: PFC Modulador Digital Programable modulAD mediBER

4.3 Software de control 111

4.3.1.2. Funcion ValorFirAx

Ademas del trabajo de programar el coeficiente del filtro FIR correspondiente, estasfunciones (existe una por cada coeficiente) nos sirven de excusa para comentar una carac-terıstica en la que tenemos pendiente profundizar como es el factor de escala del caminode datos. El efecto se aprecia en el listado viendo como el valor a programar se divide poruna variable esc old, para en la siguiente instruccion multiplicar el resultado por esc.

El funcionamiento del modulador depende de la correcta propagacion de los datosa traves del filtro conformador de pulso y de los interpoladores en cascada. Segun elmanual del AD9853, el tamano de las palabras que manejan las etapas CIC dependedirectamente de los factores de interpolacion con que trabajan. En efecto, los integradoresde los filtros CIC realizan sumas que acumularan mayores resultados a medida que aumentasu velocidad de trabajo en proporcion directa al factor de interpolacion. De todas formas,los interpoladores se han disenado con suficiente margen para evitar el desbordamientotrabajando al maximo de sus posibilidades. El problema se plantea porque a la salida delos mismos se realiza un truncamiento variando la precision de los datos. Si se le echa unvistazo a la figura 4.4, vemos que a la salida de cada interpolador existe una etapa llamadascaler. Si el factor de interpolacion elegido es muy bajo, los valores significativos de losdatos de salida estaran concentrados en los bit menor peso, mientras que lo contrarioocurre a velocidades de interpolacion alta. La funcion de los bloques escaladores serıala de mantener siempre el mismo orden de precision independientemente del factor deinterpolacion seleccionado.

El problema que se plantea es el programar las etapas escaladoras de manera optimaevitando por un lado perdidas en la precision de salida, y por otro que se produzca eldesbordamiento. Lo ideal serıa estar siempre al borde del desbordamiento; de este modomantendrıamos un alto grado de bits utiles con pocos “ceros a la izquierda”.

El fabricante recomienda programar las etapas escaladoras con un valor inferior enuna unidad al factor de interpolacion asociado. En las hojas de datos se publica una tablacon un factor de “ganancia nominal” correspondiente a cada factor de escalado, siendo esteun factor de merito que indica lo mas o menos cerca que estamos del desbordamiento. Paraque el sistema permanezca estable, la ganancia conjunta de la etapa FIR, del interpolador1 y del interpolador 2 debe ser a toda costa ≤ 1.

El fabricante recomienda elegir valores de escalado en los dos interpoladores queresulten en una ganancia lo mas cerca posible a 1 pero nunca por debajo, digamos z, paraluego escalar los coeficientes del filtro FIR con un valor igual a 1/z, que siempre sera menorde la unidad. Es el proceso comentado al principio de este apartado.

La busqueda de los factores de escalado siguiendo el criterio del fabricante se realizaen la funcion busca esc llamada por interpolador, que a su vez es llamada por la funcionValorDiv que acabamos de comentar. Es en la funcion que nos ocupa cuando se completael ciclo, al multiplicar el valor de programacion por la variable global esc.

4.3.2. Modulo de funciones hardware mod hard.c

Hablaremos en primer lugar de la funcion prog hard que es la funcion encargadade dialogar con el modulador AD9853 a traves de su puerto serie, y tambien de la funcioninterpolador, con la que terminaremos la descripcion del camino de procesado de senalen el interior del modulador, pendiente desde el apartado 4.2.1.1.

Page 124: PFC Modulador Digital Programable modulAD mediBER

4.3 Software de control 112

4.3.2.1. Funcion prog hard

Hablar de esta funcion es comentar el protocolo de comunicaciones serie del modu-lador AD9853.

Figura 4.18: Protocolo hardware del puerto serie en el AD9853

Si observamos la figura 4.18, existe una parte comun en los protocolos de lectura yescritura del modulador en la cual se envıa la direccion del dispositivo y la del registrointerno al que se quiere acceder, independientemente de que sea para leer o escribir. Co-mo se habra podido intuir, el trabajo se ha repartido entre tres funciones de bajo nivel:carga reg ser, la parte comun a las operaciones de lectura/escritura, escribe ser y lee ser,de funcion clara segun indica su nombre.

Comentando ya el funcionamiento concreto de la instruccion prog hard, se observaen el listado de la aplicacion su funcion de escribir datos de configuracion en el modulador.Segun las hojas de datos del fabricante, la lınea fısica TXE debe estar desactivada durantela utilizacion del puerto serie del modulador. Como durante la secuencia de inicializaciondel programa principal, la lınea TXE se deshabilita un tiempo considerable, se quiereevitar esa reiteracion de ordenes con la construccion if del interior de la funcion.

4.3.2.2. Funcion interpolador

Se explico en el apartado 4.2.1.1 como las etapas de interpolacion sirven para ajustarla frecuencia de datos a la frecuencia del reloj del sistema DDS. A continuacion vamos aanalizar brevemente la relacion entre todos los parametros que intervienen es este procesopara ver las opciones de maniobra que tenemos disponibles.

En primer lugar enumerammos los parametros fijos que nos impone nuestra con-struccion hardware. La frecuencia de referencia de la placa es constante e igual a la delcristal del circuito, en nuestro caso:

FREF = 27Mhz = cte

La frecuencia del sistema DDS tambien lo sera puesto que se obtiene mediantemultiplicacion del valor de referencia .

FSIS = 6FREF (4.7)

El usuario puede modificar la frecuencia de transmision de datos cambiando el factorde division segun hemos visto en el apartado anterior.

FBIT =FREFDiv

(4.8)

Page 125: PFC Modulador Digital Programable modulAD mediBER

4.3 Software de control 113

Ahora expresamos la relacion entre la frecuencia del sistema y la velocidad de trans-mision de datos segun las hojas del fabricante:

FSIS = 4I1I21MFBIT (4.9)

donde el cuatro es un factor de interpolacion fijo en la etapa FIR y M es el numerode bits por sımbolo de valor 2 en QPSK y 4 en 16QAM.

Operando con todos estos datos, y teniendo en cuenta los valores maximos y mınimosde las etapas de interpolacion, obtenemos

I1I2 = 3DivI1I2max = 1953 Divmax = 651I1I2min = 6 Divmin = 2 Para QPSK

I1I2 = 6DivI1I2max = 1953 Divmax = 325I1I2min = 12 Divmin = 2 Para 16QAM

bit]

Jugando con estos valores y con la ecuacion 4.8 podemos calcular los valores maximosy mınimos de frecuencias de transmision de datos de nuestro sistema.

Podemos erroneamente pensar en este momento que todos los valores de factor dedivision entre los lımites que se acaban de enunciar son posibles. Sin embargo, hay quetener en cuenta que los interpoladores estan disenados para funcionar con unos factoresmaximos de interpolacion de 31 el primero y 63 el segundo. Esto supone una limitacionimportante puesto que elimina aquellos valores de division cuya descomposicion en factoresprimos tenga un factor mayor de 63. Por ejemplo, podrıamos querer seleccionar un factorde division de 316 para trabajar en QPSK a una velocidad de 85.443 kbps. Pues bien,como su descomposicion en factores primos es 316 = 79 × 22, no podemos programar aninguno de los interpoladores con el factor 79 y por tanto, aunque el circuito de generacionde reloj de bit admitiese ese valor, luego no podrıamos trabajar con el modulador DDS.

La funcion interpolador realiza este trabajo de control sobre los parametros detemporizacion. En la aplicacion se ha incluido una tabla con todos los valores que tienenun factor primo mayor de 63 mediante el fichero de encabezamiento primo 63.h.

Cada vez que se cambia la velocidad de transmision, lo primero hace esta funcion escomprobar si el valor comandado es un valor permitido. Si esto no se cumple, la funcionempieza a buscar un valor de velocidad hasta que se encuentra el primero permitido pordefecto.

Cuando se ha encontrado un valor posible o bien el que se comando ya lo era, lafuncion busca la reparticion del factor de interpolacion mas adecuada siguiendo las re-comendaciones del fabricante. Aconsejan que el factor de interpolacion global se reparta lomas equitativamente posible en cada una de las etapas. Por ello, el algoritmo de busquedaempieza haciendo la raız cuadrada del valor a conseguir y le asigna a cada interpolador elentero mas cercano a ese valor.

Page 126: PFC Modulador Digital Programable modulAD mediBER

4.4 Resultados practicos 114

4.4. Resultados practicos

Una vez finalizada la descripcion de la placa DDS es obligado el comprobar el cor-recto funcionamiento del sistema. Para obtener los resultados que se presentan en esteapartado se ha realizado la conexion representada en la figura 4.19, que es la forma usualde utilizar el montaje en su conjunto: La placa BER de secuencias pseudoaleatorias generadatos utilizando el reloj de bit proporcionado desde la placa DDS, datos que se aplicancomo senal de informacion a transmitir a la entrada de la placa DDS. Obtendremos unasenal modulada con la que se pretende hacer medidas de propagacion en el laboratorio.En caso de disponer de algun metodo de demodulacion, serıa bueno el volver a aplicarlos datos recibidos a la placa de BER, para ası poder calcular la tasa de bits erroneos delcanal de transmision.

Figura 4.19: Conexionado usual del sistema: placa DDS y placa de BER trabajan-do conjuntamente

En el momento de redaccion de este documento todavıa no ha sido posible llevara cabo esta ultima comprobacion. Los unicos medios a nuestro alcance han sido la ob-servacion de la senal en el dominio espectral y la revision de los diagramas de ojos y laconstelacion generados con las diferentes modulaciones.

Los graficos que se presentan en la figura 4.20 han sido obtenidas en el laboratoriocon el analizador vectorial HP89410A, para una velocidad de transmision de 2.5175 Mbps,resultando en una velocidad de sımbolo de 2.5175 Msps en FSK, 1.25875 Msps en QPSK,y 629 Ksps para 16QAM. El filtrado seleccionado en el equipo de medida fue un filtro encoseno alzado con factor α = 0,28.

En el modulador DDS lo unico que se programo fue una frecuencia de salida dentrodel margen operativo del analizador, que alcanza hasta los 15 Mhz, y como filtro de pulsono se modifico el que tiene la aplicacion modulAD cargado por defecto en coseno alzadocon α = 0,5.

Por otra parte se incluyen las medidas realizadas con el analizador de espectros,tanto en banda ancha para observar el comportamiento del modulador en lo referente amargen libre de espureos, como en banda estrecha para observar el filtrado que se realizaen el dominio digital mediante las etapas FIR conformadores del pulso.

En la primera figura 4.21, se querıa comprobar la teorıa sobre la generacion deespureos por truncamiento de fase expuesta en el apartado 1.5. En efecto, se puede apreciarcomo existen palabras de sintonıa de frecuencia que no generan espureo alguno como en lafigura (a), donde solo se aprecia distorsion armonica, mientras que la figura (b) se presenta

Page 127: PFC Modulador Digital Programable modulAD mediBER

4.4 Resultados practicos 115

(a) (b)

(c) (d)

(e) (f)

Figura 4.20: Medidas de salida para vt = 2,7175Mbps realizadas con analizadorvectorial HP89410A y filtro de datos en coseno alzado de factor α =0,28.(a),(c) y (e) Diagramas I-Q para QPSK, 16QAM y FSK.(b),(d) y (f) Diagramas de ojos correspondientes

Page 128: PFC Modulador Digital Programable modulAD mediBER

4.4 Resultados practicos 116

(a) (b)

Figura 4.21: Medidas de los espureos de truncamiento de fase de salida.(a) Palabra de sintonıa que no genera espureos.(b) Palabra de sintonıa donde se genera el maximo nivel de espureos

un caso de sintonıa para maximo nivel de espureos. En aplicaciones donde sea importanteesta especificacion habra que seleccionar adecuadamente la frecuencia de referencia paraque nuestra frecuencia de interes caiga en una palabra de sintonıa “limpia”.

(a) (b)

Figura 4.22: Medidas en banda ancha para QPSK donde se observan las imagenesgeneradas por el proceso de conversion D/A.(a) QPSK a 13.5 Mbps a la frecuencia de 15 Mhz.(b) QPSK a 13.5 Mbps a la frecuencia de 65 Mhz

Se han obtenido graficas como las de la figura 4.22 habiendose anulado el filtro an-tialiasing de la placa DDS. En ellas se pueden apreciar claramente las imagenes generadasen el proceso de conversion D/A alrededor de la frecuencia de reloj del sistema de 162Mhz. Esta senal de reloj tiene un gran acoplamiento de salida, incluso despues de haberserealizado trabajos de blindaje en la placa.

La grafica (a) representa la senal de salida para una frecuencia nominal de 15 Mhz.En este caso, las dos imagenes representadas corresponden a las frecuencias de 162 ±15Mhz = 147 y 177 Mhz. Como curiosidad, los principales espureos que se aprecian

Page 129: PFC Modulador Digital Programable modulAD mediBER

4.4 Resultados practicos 117

corresponden a la banda de FM comercial de 88 a 108 Mhz. En la grafica (b) se representala misma situacion, en este caso para una frecuencia de salida nominal de 65 Mhz. Aquı yavemos unicamente la imagen de 162−65 = 97 Mhz. Otro efecto que se pone de manifiestoes el empeoramiento de las prestaciones del sistema a medida que subimos en frecuencia,observense si no los espureos que aparecen.

Figura 4.23: Medidas en banda ancha para FSK sin filtro antialiasing

La figura 4.23 corresponde a la misma situacion de la anterior grafica, en este casopara una modulacion FSK. La frecuencia nominal es 65 Mhz y la velocidad de datos de133.66 kbps. La razon de volver a incluir una grafica similar es destacar la mejorıa enSFDR de este caso, motivada por el cambio en el esquema de modulacion y el regimende transmision: Para todos los esquemas de modulacion, el DAC del DDS genera la mis-ma potencia de salida puesto que no se cambia para nada su configuracion de corrientemaxima. Ahora bien, en QPSK y 16QAM la potencia se distribuye uniformemente sobretodo el ancho de banda ocupado, mientras que en el ejemplo de FSK a baja velocidad,como el regimen de transmision es mucho menor, el espectro de salida se asemeja muchomas a dos tonos, por lo que esa potencia de salida se “concentra” y la relacion senal ruidomejora ostensiblemente.

La inclusion del filtro antialiasing de salida es muy efectiva como se aprecia en lagrafica 4.24. La verdad es que para ser del todo realistas habrıa que decir que la graficacorresponde a la situacion mas favorable del DDS puesto que la frecuencia de salida esbastante baja, 15 Mhz. Desgraciadamente, en el momento de confeccionar este trabajotodavıa no se disponıa de el filtro nominal con frecuencia de corte de 67 Mhz que estabaespecificado en el diseno, y ası poder cubrir todo el margen de salida del DDS. De cualquiermodo, es facil de imaginar el resultado, si acaso con algunos espureos mas que no se venen la grafica actual por haber sido eliminados con el filtro de 15 Mhz.

Queda por comentar el espectro cercano para las tres modulaciones. En las fig-uras 4.25 (a) y (b) se puede comprobar el funcionamiento del filtro FIR conformador depulso programado para una curva de respuesta en coseno alzado. La figura (c) correspondea FSK, y aquı no se da filtrado alguno, por lo cual la senal se expande considerablementeen el espectro.

Hasta aquı las medidas realizadas en la placa de modulacion. Queda por comprobarsi los resultados practicos de laboratorio son satisfactorios, una vez se sustituya el filtropasobajo de salida por el definitivo con frecuencia de corte 67 Mhz. En el apendice B seincluyen fotografıas con indicaciones practicas que facilitan el manejo del sistema. Son

Page 130: PFC Modulador Digital Programable modulAD mediBER

4.4 Resultados practicos 118

(a) (b)

Figura 4.24: Efecto del filtro antialiasing de salida.(a) QPSK a 13.5 Mbps a la frecuencia de 15 Mhz.(b) FSK a 13.5 Mbps a la frecuencia marca de 15 Mhz

vistas laterales del chasis que contiene el sistema, y en ellas se indica que conector es cadacual. Tambien se incluyen tablas con la funcion de los pines de cada conector.

Page 131: PFC Modulador Digital Programable modulAD mediBER

4.4 Resultados practicos 119

(a)

(b)

(c)

Figura 4.25: Espectro cercano para los tres tipos de modulaciones principales.(a) QPSK a 13.5 Mbps a la frecuencia de 10 Mhz.(b) 16QAM a 13.5 Mbps a la frecuencia de 10 Mhz.(c) FSK a 133.66 Kbps a la frecuencia de marca de 10 Mhz.

Page 132: PFC Modulador Digital Programable modulAD mediBER

Capıtulo 5

Generador medidor de tasa de bitserroneos

Corresponde a este capıtulo la descripcion del funcionamiento de la placa hardwarede generacion de secuencias aleatorias, ası como de su correspondiente aplicacion de con-trol. La funcion de este circuito dentro del proyecto es servir como fuente de datos deinformacion a la placa de modulacion DDS. Esta es la forma mas sencilla de obtener unatrama de entrada para la evaluacion del funcionamiento y las prestaciones del sistema.

El montaje practico esta basado en el integrado de Dallas DS2172, que genera lassecuencias de salida gracias a un banco de registros de desplazamiento con realimentacionconfigurable. Esta caracterıstica permite obtener una amplia gama de secuencias con al-gunas restricciones que se veran mas adelante.

Aunque la aplicacion particular para la que se utiliza es la generacion de secuenciaspseudoaleatorias, el chip tambien dispone de un circuito “sincronizador” que permite de-tectar la recepcion coincidente con la secuencia transmitida, util en la comprobacion detasa de bit erroneos (BER).

Con el objetivo de sacar el maximo partido a las prestaciones del integrado, tantola placa hardware como la aplicacion de control se ha desarrollado para aprovechar lacaracterıstica principal del chip DS2172: la medida de tasas de BER.

El aspecto de la interface de usuario trata de emular el frontal “virtual” de un equipode medida de BER, siguiendo un metodo similar al de algunas otras aplicaciones practicascomerciales corrientes, como por ejemplo las tarjetas de adquisicion de senal para PCutilizadas en forma de osciloscopios, analizadores de espectros y analizadores de bus.

Durante la exposicion del resto del capıtulo, haremos referencia a esta placa decircuito impreso como placa de BER.

5.1. Opciones de diseno

En principio, la necesidad de disponer de una trama de datos con la que comprobarla placa de modulacion DDS obligaba a generar esos datos de alguna manera practica. Sepensaron varias alternativas a la hora de acometer el diseno del sistema, cotejandose lamedida en que cada una de estas alternativas se adaptaba a nuestras necesidades.

Los requisitos que el sistema de generacion de tramas digitales necesitaba cumplirse pueden resumir en los siguientes puntos:

Altas velocidades de operacion, del orden de decenas de Mhz, ya que se pretende

120

Page 133: PFC Modulador Digital Programable modulAD mediBER

5.1 Opciones de diseno 121

analizar el modulador a regımenes altos de velocidades de transmision simulando losnuevos servicios de telecomunicaciones en banda ancha que se estan empezando aintroducir.

Numero de secuencias suficientemente amplio como para poder realizar diferentestipos de pruebas. A ser posible serıa interesante el contar con la posibilidad de generarsecuencias arbitrarias creadas por el usuario permitiendo provocar determinadascondiciones en el modulador especialmente particulares: secuencias del tipo 1010...1100... 11110000... hacen que la senal de salida de los moduladores adquiera en segunque tipos de modulacion la caracterıstica de tonos fijos.

Facilidad de control externo que permita el desarrollo de un software de controlapropiado.

La primera opcion que se barajo fue la de generar las secuencias de datos medianteun programa desde el ordenador. La ventaja inherente a la generacion software estribaen el control que se tiene sobre la secuencia generada, permitiendo ampliar facilmente elnumero de secuencias y patrones de transmision para poder simular los nuevos escenariospracticos que vayan apareciendo en el futuro.

Por otra parte, el principal inconveniente de esta opcion consiste en que el sistemaoperativo Windows proporciona un control de temporizaciones que como maximo llega a1 milisegundo. Por tanto, si se pretende llegar a unos regımenes de transmision del ordende los 15 Mbit/s es preciso enviar a un buffer 15000 bits por operacion de entrada/salida,(15000 bits / 1 ms). El bus ISA del PC funcionarıa sobrado de capacidad, pero tendrıamosel inconveniente de necesitar un dispositivo hardware que estuviese dotado de una memo-ria de doble puerto que, funcionando en forma de buffer plesiocrono, recibiera los datosasıncronos del PC para enviarlos al modulador DDS de forma sincronizada.

La necesidad de utilizar el bus ISA nos obliga a un desarrollo en forma de tarjeta deexpansion del PC, que dificulta su instalacion en un portatil y limita considerablementesu abanico de utilizacion a entornos cerrados de laboratorio.

Alternativamente surgio la idea de generar los datos directamente desde hardware,puesto que incluso la primera opcion obligaba a realizar por este mismo metodo el yacomentado dispositivo de sincronizacion. De esta forma se liberarıa de mucho trabajo ala CPU principal del PC, a costa de disminuir el grado de libertad en la generacion desecuencias. Se buscaron circuitos integrados que realizaran ese trabajo, encontrandose elintegrado de Dallas DS2172.

En este caso la opcion de diseno contempla la realizacion de una placa de circuitoimpreso, siendo necesaria unicamente la programacion de los registros del integrado de-pendiendo de la secuencia que se desee utilizar. Dada la relativamente escasa cantidadde instrucciones y comandos necesarios, al menos comparada con la primera opcion, sepuede utilizar al puerto paralelo del PC como interface de control, que ademas es unainterfaz ampliamente conocida y sobre la que se puede encontrar multitud de informacional formar parte integral del PC. [?].

Al utilizar el puerto paralelo del PC se gana en flexibilidad de uso, ya que lo unicoque hace falta en este caso es un cable paralelo, y por tanto se puede utilizar cualquierportatil para controlar el circuito en medidas de campo.

Se opto por esta ultima opcion dadas sus ventajas sobre la primera filosofıa, conla particularidad de que fue esta decision la que determino el tipo de control a utilizar

Page 134: PFC Modulador Digital Programable modulAD mediBER

5.2 Especificaciones de la placa BER 122

en la placa DDS. No hubiese tenido sentido realizar dos tipos de control independientespudiendo controlar los dos circuitos de modo homogeneo.

5.2. Especificaciones de la placa BER

Una vez justificada la opcion de diseno seleccionada, resumimos las prestaciones quese han conseguido en el trabajo.

Generales

Aplicaciones: Generacion de secuencias aleatorias de prueba y medida de tasas deerror de bit.

Puede funcionar conjuntamente con la placa DDS como fuente de bits a transmitir,o utilizarse como sistema aislado independiente.

Tipos de secuencias generadas:

1. Modo pseudoaleatorio: 23 secuencias diferentes resumidas en la tabla 5.1. Lalongitud de la secuencia mas larga es 232 − 1.

2. Modo repetitivo: Cualquier secuencia programable de hasta 32 bits de longitud.Se han predefinido 10 que se muestran en la tabla 5.2.

Control

Puerto Paralelo estandar PC en modo compatible

Programa de Control mediBER para los sistemas operativos Windows 98 y NT.

Caracterısticas de Entrada Salida

Formato de senales digitales: TTL NRZ.

Velocidad maxima de transmision y recepcion: 52 Mhz.

Modos de trabajo:

1. Modo continuo. Conectando los pines 3 y 5 (RDIS y TDIS) del conector detransmision/recepcion a masa.

2. Modo rafagas. Gobernado por los hilos RDIS y TDIS del conector de trans-mision/recepcion.

Alimentacion

Tension exterior: 12 voltios DC.

Consumo: 85 mA

Software de control. Programa mediBER

Duracion de los test programable hasta en un mes.

Page 135: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 123

Seleccion de la secuencia digital de prueba de entre 33 predefinidas. Tambien esta disponiblela opcion de generar una secuencia repetitiva de hasta 32 bits.

Insercion manual y automatica de errores en la secuencia transmitida. Las tasas deerror que se pueden generar automaticamente son 10−1, 10−2, 10−3, 10−4, 10−5, 10−6

y 10−7.

Indicacion en la ventana de la aplicacion de los principales parametros de interes:

1. Tiempo de test y tiempo de disponibilidad.

2. Numero total de bits recibidos y numero de errores.

3. Indicacion de las tasas de ES, SES, DM y BER. (Segundos erroneos, segundosseveramente erroneos, minutos degradados y tasa de error de bit).

Indicacion grafica del estado de sincronismo entre la secuencia transmitida y recibida.Indicaciones adicionales auxiliares para cuando se reciben las senales de error “todounos” y “todo ceros”.

Grabacion del resultado de los test en fichero de texto con los parametros masimportantes de la prueba realizada.

5.3. Diseno hardware de la placa BER

Dado que el principal bloque constitutivo de esta placa es el integrado DS2172 deDallas, lo primero que debemos determinar claramente es su funcion: El chip DS2172esta pensado para analizar y comprobar la calidad de los sistemas digitales por medio dela generacion y deteccion de patrones digitales binarios.

Tambien enumeramos sus principales caracterısticas, muchas de las cuales son lasresponsables de las especificaciones que se acaban de enunciar en el apartado anterior.

Generacion de secuencias aleatorias a partir de un registro de desplazamiento dehasta 32 etapas con un punto de realimentacion intermedio programable. Esto per-mite generar cualquier secuencia, bien sea de longitud maxima o no, cuyo polinomiogenerador sea del tipo:

g(x) = 1 + xB + xA (5.1)

teniendo A una gama de valores de 1 a 32 (determina la cantidad de etapas utilizadasen la generacion de la secuencia), y B tambien una gama de 1 hasta A (determinala posicion del punto intermedio de realimentacion). En realidad existe libertad ala hora de programar los dos valores, y B puede valer tambien de 1 a 32, lo que sedesconoce es el efecto de programar un valor de realimentacion intermedio B mayorde la longitud total del banco de etapas A.

Las hojas caracterısticas del fabricante contienen la informacion concreta para laprogramacion de las secuencias pseudoaleatorias estandar utilizadas en la industria,pero se han hecho pruebas de generacion de otras secuencias diferentes sin haberencontrado ningun tipo de problema.

Page 136: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 124

Tambien dispone de la posibilidad de generar secuencias repetitivas de hasta 32 bits,incluyendo cualquier patron decidido por el usuario. Los registros se cargan con elvalor programado y sus contenidos son desplazados a la salida de forma periodicasin alteracion de los mismos.

Tanto trabajando en modo repetitivo como en modo pseudoaleatorio, la parte derecepcion dispone de un autosincronizador que busca la coincidencia entre la tramaque esta generando y la que recibe. De este modo, si se encuentra una comparacionpositiva entre las dos secuencias, se activa el mecanismo de conteo de errores, con loque se pueden obtener parametros de funcionamiento de un enlace digital.

El dispositivo es capaz de detectar mediante este procedimiento tasas de error dehasta 10−2.

Insercion de errores tanto de forma automatica como manual. De forma automaticase puede programar para generar las tasas de BER desde 10−7 hasta 10−1, en 6 pasosde un orden de magnitud cada uno.

Velocidades de operacion desde DC hasta 52 Mhz. Esto nos permite generar unaamplia gama de velocidades de transmision. En la practica esta ventaja no se explotaen su totalidad dado que el reloj maestro del sistema realizado es 27 Mhz, y porconstruccion practica de la placa DDS la maxima velocidad de datos que se puedeconseguir es 27/2 = 13,5 Mbps. Si se utiliza la placa de BER por separado estalimitacion no existe, siempre suministrando la senal de reloj de forma externa.

Puerto paralelo de control de 8 bits. Factor importante que hace que el puertoparalelo del PC se convierta en una interface casi directa con el chip. Se requiereuna pequena variacion hardware si, como en nuestro caso, se quiere utilizar el puertoparalelo en modo compatible.

5.3.1. Composicion interna del DS2172

En esta seccion profundizaremos en el esquema de bloques del DS2172 con el obje-tivo de clarificar su funcionamiento interno, de forma que al lector le resultara mas facilentender su operacion. El diagrama general del integrado se representa en la figura 5.1.

Dentro del mismo podemos distinguir los siguientes bloques:

Puerto de control: Esta constituido por un bus multiplexado de direcciones y datosque puede funcionar en dos configuraciones de protocolo que se selecciona medianteel pin BTS: el modo Intel (BTS = 0) o el modo Motorola (BTS = 1). Cada modotiene su forma particular de funcionar, pero ambos utilizan la premisa de primerocolocar la direccion del registro al que se quiere acceder, tanto para leer como paraescribir, y en ultimo lugar el dato. La informacion concreta de diagramas de tiempose encuentra en las hojas del fabricante [?]

Generador de secuencias patron: Forman parte de este bloque funcional losregistros PSR, Pattern Set Register o Registro de Configuracion de Patron, PLR,Pattern Length Register o Registro de Longitud de Patron, y el PTR, Pattern TapRegister o Registro de Etapa de Patron. Su funcion conjunta es la de determinar la

Page 137: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 125

Figura 5.1: Diagrama de bloques del integrado medidor de BER DS2172

secuencia generada, y esta relacionada con la configuracion del registro de desplaza-miento que la crea. Este bloque se estudia con mayor profundidad en el siguienteapartado.

Bloque de insercion de errores: Esta encargado de la produccion de errores enla secuencia generada, invirtiendola instantaneamente. Los errores generados puedenser automaticos, en cuyo caso este bloque se encarga de generar una tasa determinadade error, o bien manuales, insertandose entonces a peticion desde el puerto de control.

Detector de Patron: Es un bloque en el que se realiza la comparacion entre elpatron de secuencia transmitida y lo que se recibe en el bloque de recepcion. Sufuncion es la de detectar la “coincidencia” o estado de sincronizacion entre ambassecuencias. Se puede configurar para que trabaje de modo automatico ante la perdidadel sincronismo o bien para que sea el usuario el que comande el momento de empezarel proceso de sincronizacion, (bits SYNCE y RESYNC del registro PCR, Registrode Control).

Bloque de control de Transmision: Controla la salida de los bits generados alexterior. Es el encargado de la temporizacion de transmision.

Bloque de control de Recepcion: Controla la entrada de datos desde el exterior.Recibe el reloj con el que se temporiza toda la parte de recepcion.

Multiplexacion de Bucle: Determina la trama de entrada hacia los subsistemas derecepcion, bien la secuencia de entrada desde el bloque de recepcion (funcionamientonormal), o por el contrario la secuencia que se genera en los bloques de transmision,util en la realizacion de un bucle interno. Su funcionamiento se gobierna medianteel bit LPBK del registro de control, PCR.

Page 138: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 126

Bloque de recepcion: Es el bloque donde se ubican los bits recibidos desde elbloque de multiplexacion y desde el que se alimenta el detector de secuencias osincronizador. Tambien se puede leer su contenido desde el puerto de control. Eneste caso, se debe de acceder al registro PRR, Pattern Receive Register, Registro depatron de recepcion

Contadores de Errores y de Bits: Son dos registros donde el sincronizador an-ota el resultado de estas dos cuentas, por lo tanto son dos registros claves para laobtencion de tasas de BER. Totalmente controlables desde el puerto de control, susnombres son BECR, Bit Error Count Register, y BCR, Bit Count Register.

Quedarıan por mencionar el registro de estado, SR, Status Register, y el registrode mascara de interrupciones, IMR, Interrupt Mask Register, desde donde seconocen en tiempo real las circunstancias de operacion del sistema, y se gobierna laactivacion del pin externo INT de interrupcion.

5.3.1.1. Configuracion del registro de desplazamiento

En nuestro conocido integrado medidor de BER se utiliza la tecnica descrita en elcapıtulo 2 para generar secuencias de test. Se trata de un registro de desplazamiento alcual se le puede programar la realimentacion dependiendo del polinomio generador de lasecuencia elegida.

No obstante, existen una serie de limitaciones impuestas por las caracterısticas delhardware, que anaden una serie de condiciones a la hora de seleccionar la secuencia agenerar. Se impone por tanto una revision interna del registro de desplazamiento.

Su representacion esquematica se muestra en la figura 5.2, donde se pueden observarvarios aspectos destacables:

Figura 5.2: Esquema del registro de desplazamiento para generacion de secuenciasen el DS2172

Modo pseudoaleatorio

Por un lado, lo referente a la naturaleza de la secuencia pseudoaleatoria generada.Su descripcion matematica, y por tanto su longitud y patron vienen determinados por dosparametros:

Page 139: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 127

1. La cantidad de etapas utilizadas del registro de desplazamiento (como maximo 32).Esto determina directamente el grado del polinomio generador de la secuencia. Es loque en la figura viene indicado como “toma de realimentacion A”, Tap A Feedback.

El registro interno determinante de esta longitud es el Pattern Length Register, PLR,y se encuentra en la direccion hexadecimal 04H .

2. El punto intermedio de realimentacion. Esto determina el termino de menor gradodel polinomio generador, (ver la ecuacion 5.1). Aquı el termino de menor grado vieneindicado por xB.

El valor de la “toma de realimentacion B” se configura mediante el registro Polyno-mial Tap Register, PTR, de direccion 05H .

Otro de los aspectos destacables de la figura 5.2 es la puerta and incluida en la tomade realimentacion B. El terminal PCR.5 es el que la habilita: Un uno permite que losvalores que se desplazan por el registro de desplazamiento se realimenten a la puerta xorde entrada, por tanto modificando las caracterısticas de la secuencia de salida, siempredependiendo del polinomio generador elegido.

Por el contrario, un cero en el terminal PCR.5 anula la realimentacion a la entradadel registro de desplazamiento de los valores que se propagan a su traves, resultando unasecuencia periodica o repetitiva, igual al valor inicial cargado en los flip-flops tipo D queconforman el registro.

De este analisis podemos concluir que es el terminal PCR.5 el que determina el modode trabajo del generador de secuencias patron, bien en el modo pseudoaleatorio, bien enmodo repetitivo.

El terminal EIR.5 realiza la inversion de los bits transmitidos. Esta inversion sepuede configurar de forma permanente desde el controlador, aunque como su nombresugiere: EIR, Error Insert Register, forma parte de la circuiterıa de insercion de errores ypor eso esta situado en el camino de la trama de salida.

¿Cuantas secuencias pseudoaleatorias se pueden generar con esta topologıa del reg-istro de desplazamiento?. La respuesta mas inmediata es ¡muchas!. Obviamente, aunqueno vamos a poder determinar su numero exacto, ahora estamos en condiciones de deciralgo mas gracias al capıtulo 2.

La ecuacion 2.16 calculaba el numero de polinomios primitivos de un grado deter-minado, de forma que estamos en condiciones de determinar el numero de polinomiosprimitivos que existen desde grado 2, (1 + x + x2 serıa la primera secuencia de longitudmaxima generable), hasta grado 32:

NPPtot =r=32∑r=2

λ2(r) =r=32∑r=2

φ(2r − 1)r

(5.2)

siendo λ2(r) el numero total de polinomios primitivos de grado r, y φ(n) la funcionde Euler.

Este valor se puede calcular, y es del orden de millones, aunque afortunadamenteel problema se simplifica enormemente. Para cada grado r de polinomio generador, solotenemos que comprobar si los r − 1 polinomios generadores que existen de la forma 1 +xB + xr, con B desde 1 hasta r − 1 son primitivos.

El numero total de polinomios existentes de este tipo es:

Page 140: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 128

NP3tot =r=32∑r=2

(r − 1) = 496 (5.3)

Estos 496 polinomios representan otras tantas secuencias, y todas se pueden generarcon nuestro medidor de BER, incluso aquellas que no son de longitud maxima (primitivos).Aunque no hemos resuelto el problema, quedarıa ahora por averiguar utilizando tecnicascomputacionales, cuales de esos 496 polinomios son primitivos realmente.

Con la intencion de retornar al mundo practico se incluye la tabla 5.1 enumerandolas secuencias recomendadas por el fabricante, y aunque, se podrıa programar cualquierade la forma 1 + xB + xA, no todo es perfecto y no se ha previsto esa posibilidad en laaplicacion de control. Solamente se realizaron diversas pruebas satisfactorias durante lafase de desarrollo.

Secuencia Polinomio generador Observaciones

23 − 1 1 + x+ x3

24 − 1 1 + x+ x4

25 − 1 1 + x2 + x5

26 − 1 1 + x5 + x6

27 − 1 1 + x+ x7

27 − 1 1 + x4 + x7 LB T127 − 1 1 + x4 + x7 LB T1 Invertida29 − 1 1 + x5 + x9 Recomendacion O.153210 − 1 1 + x3 + x10

211 − 1 1 + x9 + x11 Recomendacion O.152 y O.153215 − 1 1 + x14 + x15 Recomendacion O.151217 − 1 1 + x3 + x17

218 − 1 1 + x7 + x18

220 − 1 1 + x3 + x20 Recomendacion O.153220 − 1 1 + x17 + x20 Recomendacion O.151, QRSS221 − 1 1 + x2 + x21

222 − 1 1 + x+ x22

223 − 1 1 + x18 + x23 Recomendacion O.151225 − 1 1 + x3 + x25

228 − 1 1 + x3 + x28

229 − 1 1 + x2 + x29

231 − 1 1 + x3 + x31

232 − 1 1 + x17 + x32

Cuadro 5.1: Descripcion matematica de las secuencias pseudoaleatorias progra-madas en la placa de BER. Se puede apreciar como los polinomiosgeneradores siempre tienen 3 terminos a causa del diseno interno delDS2172

Page 141: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 129

Modo repetitivo

Las secuencias repetitivas que se permite configurar tienen como maximo una lon-gitud de 32 bits. Este lımite viene impuesto por el hardware del integrado, ya que es esteel numero de etapas que posee el registro de desplazamiento.

La verdad es que en este aspecto notamos una cierta limitacion de prestaciones,pues se echa de menos el poder generar secuencias repetitivas de mayor longitud; al menosesa es una de las pocas diferencias que se han encontrado con respecto a otros equiposcomerciales comparados [?]. Por ejemplo, con 256 bits de longitud se podrıa simular unatrama E1 de 2048 kbits/s repetitiva, jerarquıa primaria en Europa.

De cualquier forma, en la tabla 5.2 se reflejan las secuencias repetitivas recomendadaspor el fabricante que son las que se han predefinido en la aplicacion de control. Para poderprogramar cualquier otra secuencia, esta vez si que se ha dispuesto de una opcion en lapantalla principal de la aplicacion de control.

Secuencia Patron Observaciones

Todo unos . . . 11111 . . .Todo ceros . . . 00000 . . .Unos y ceros alternativos . . . 10101 . . .Unos y ceros dobles alternados . . . 1100110011 . . .3 unos en 24 bits . . . 001000000000000000100010 . . .1 uno en 16 bits . . . 1000000000000000 . . .1 uno en 8 bits . . . 1000000010000000 . . .1 uno en 4 bits . . . 10001000 . . .Bucle D4 activado . . . 1000010000 . . . 1 uno en 5 bitsBucle D4 desactivado . . . 100100 . . . 1 uno en 3 bits

Cuadro 5.2: Descripcion de las secuencias repetitivas programadas en la placa deBER.

5.3.2. Bloques funcionales de la placa de BER

La placa de BER esta concebida para “acomodar” al principal bloque funcionalde misma, el medidor de tasa de BER DS2172. En la seccion anterior se analizaron enprofundidad sus prestaciones; ahora que ya tenemos un conocimiento mas preciso de lasmismas y sabemos los tipos de secuencias que podemos generar, es el momento de describirel funcionamiento global de la placa y ver como el resto de bloques da soporte a las tareasde intercambio de datos entre el programa de control y el DS2172.

En figura 5.3 se presenta el diagrama de bloques de la placa de BER. En ella podemosdistinguir los siguientes elementos:

1. Puerto paralelo de control

2. Buffer de control

3. Buffer de datos

Page 142: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 130

Figura 5.3: Diagrama de bloques de la placa de BER

4. Medidor de BER

5. Conector de transmision/recepcion

El puerto paralelo y el bloque de entrada/salida son los puntos de acceso a la placadesde el exterior. El primero permite la comunicacion de datos entre el PC donde residela aplicacion de control y los recursos hardware de la placa de BER, representados prin-cipalmente por el medidor de BER, o lo que es lo mismo, el circuito integrado de DallasDS2172. El bloque de entrada/salida es el punto de acceso a las tramas de test generadaspor el medidor de BER, y tambien por donde entran las secuencias recibidas en las pruebasde tasa de errores.

Los dos bloques que actuan como buffers canalizan el flujo de senales de control yde informacion entre el medidor de BER y el PC que lo controla.

5.3.2.1. Puerto paralelo de control

Al igual que en la placa DDS, el interface de control de la tarjeta es un conectorplano de 26 pines en el que se acomodan las senales del puerto paralelo. El conexionadocon el exterior se realiza por medio de un cable plano hasta un conector DB-25 (el ultimohilo de masa se queda sin conectar), que se encuentra montado en el chasis que contieneal sistema completo. Desde ahı hasta el puerto del PC ya es cuestion de que el usuariocompre un cable paralelo corriente.

En la tabla 5.3 se recogen los hilos del puerto paralelo que se utilizan en la placaası como su funcion.

Page 143: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 131

Pin Nombre Funcion en la placa BER

1 LATCH0 Strobe de carga del bus de datos en placa BER2 D0 LSB del Bus de datos

3 D1 Bus de datos

4 D2 ”5 D3 ”6 D4 ”7 D5 ”8 D6 ”9 D7 MSB del Bus de datos

10 OD6 Bit del nibble de lectura de estado desde placa BER11 OD7 MSB del nibble de estado (invertido hardware)12 OD5 Bit del nibble de estado

13 OD4 LSB del nibble de estado

16 LATCH2 LSB de Seleccion de Registro en placas DDS y BER17 LATCH3 MSB de Seleccion de Registro en placas DDS y BER

18 a 26 GND Masa

Cuadro 5.3: Interface entre la placa BER y el puerto paralelo del PC.

5.3.2.2. Buffer de control

Este bloque es el encargado de demultiplexar los comandos que llegan desde el PCpor el bus de datos del puerto paralelo y convertirlos en senales validas de control hardware.

Figura 5.4: Buffer de control de la placa de BER

Tal y como se ve en la figura 5.4, esta constituido por los siguientes componentes:

U10, 74HC139. Es un demultiplexor dos a cuatro que genera las senales de “enable”de activacion de los drivers que retienen la informacion enviada desde el PC a travesdel bus de datos del puerto paralelo (D0 a D7). Los hilos de seleccion son los ter-minales LATCH2 y LATCH3 del puerto de control del PC, y su validacion tambienllega directamente desde el puerto paralelo a traves de la senal de control LATCH0.

Page 144: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 132

Su funcionamiento es identico a su componente homologo de la placa DDS, salvopor la senal de control que lo activa, en aquel caso LATCH1. En este caso, la lıneaCHIP0 se emplea para demultiplexar las senales de control hardware de la placa,y por otro lado CHIP1 se utiliza para cargar el bus del puerto paralelo en el businterno de datos.

U5, 74HC574. Es uno de los dos buffers del circuito, y su funcion es la de fijar todoslos comandos de control recibidos por el bus de datos. Sus hilos de salida reflejanel valor logico presente en las entradas justo en el flanco de subida de su senal deenable CHIP0, que es proporcionada por U10.

Aunque este circuito es un buffer triestado, esta posibilidad no se utiliza en este casoal realizar funciones de transceptor de control. Por eso el hilo OC esta directamenteconectado a masa. Podemos decir que este integrado gobierna el funcionamiento delresto de recursos hardware de la placa de BER.

Es importante que el programa de control realize la secuencia de operaciones cor-rectas con el fin de que los datos se carguen en el registro adecuado. En el caso concretode un comando de control, esta secuencia debe ser la siguiente:

1. Colocar el dato de control a cargar en el bus de datos.

2. Seleccionar el driver en el que se quiere escribir el valor mediante los hilos de seleccionLATCH2 y LATCH3 (concretamente CHIP0).

3. Activar el hilo de strobe correspondiente poniendolo a nivel logico bajo. En estecaso LATCH0 para la placa de BER. Esto produce que se active el hilo de enableespecıfico del driver direccionado, como ya se ha dicho en el ejemplo, CHIP0.

4. Desactivar el hilo LATCH0 anterior. Esto provoca que el hilo enable del buffer sedesactive subiendo a nivel logico alto, y como consecuencia de ello, el dato se fije ala salida del mismo.

5.3.2.3. Buffer de datos

Este bloque es el equivalente al anterior en lo que se refiere a datos de configuracion.Su funcion es la de demultiplexar los datos de configuracion que se envıan por el busdel PC, actuando de puente entre este bus y el bus de datos interno de la placa deBER. Es necesario precisar que el bus interno es bidireccional porque esta directamenteconectado al puerto de control del DS2172. Ya se hablo en la seccion A.1 de las distintasmodalidades de funcionamiento del puerto paralelo del PC y, aunque en los PC modernosel hardware permite transmisiones bidireccionales por el bus de datos, se querıa mantenerla compatibilidad con el bus original, y por eso se diseno el hardware pensando en enviardatos hacia el PC utilizando los hilos de estado.

Con esta premisa se ha disenado el buffer de datos, de forma que, dependiendo de ladireccion de la informacion, se habilitara uno u otro de los transceptores de que consta elbloque, tal y como se refleja en la figura 5.5. A continuacion se comenta el funcionamientode cada uno de ellos:

U3, 74HC574. Es el buffer que da paso a los datos desde el puerto paralelo. Suactivacion se realiza mediante la seleccion de la direccion CHIP1 en el bloque de

Page 145: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 133

Figura 5.5: Buffer de datos de la placa de BER

control y su funcionamiento es analogo a U5 del mismo bloque. En este caso, sinembargo, si que se debe prestar atencion a la direccion de la informacion puesto quecuando se quiere enviar algun dato hacia el PC se deben de poner las salidas de U3en alta impedancia para no interferir en el bus interno AD0−AD7.

U4, 74LS241. Es el transceptor encargado de multiplexar el bus interno hacia loshilos de estado del puerto paralelo, cumpliendo con la funcion de envıo de datosen la direccion de salida. En la figura se senala como se utilizan en el sentido delectura cuatro hilos de estado, OD7 a OD4, del puerto paralelo. El bus interno es deocho bits; por ello es necesario multiplexarlo y realizar la lectura en dos operacionesseguidas.

El integrado tiene dos secciones de cuatro bits cada una, con habilitacion indepen-diente, aunque curiosamente las senales de enable son invertidas. Da la sensacion deque el disenador penso en una utilizacion de este estilo.

Todas las operaciones estan gobernadas mediante hilos del bloque de control, por lo quetoda transferencia de datos hacia el PC estara precedida de los correspondientes envıos decomandos de control hacia la placa de BER.

5.3.2.4. Medidor de BER DS2172

Es el bloque principal y ya conocemos sus caracterısticas mas importantes, puesesta constituido ıntegramente por el circuito DS2172. En este apartado comentamos lafigura 5.6, donde podemos observar el conexionado particular del mismo en nuestra apli-cacion.

El puerto de control AD0 a AD7 esta conectado al bus de datos interno de la placa.Existe un grupo de hilos de control que gobiernan la temporizacion de los intercambiosde datos tanto de entrada como de salida. Todos estos hilos llegan desde el bloque “bufferde control” comentado hace unos parrafos en el apartado 5.3.2.2. Se admiten dos tiposde temporizaciones para los mismos terminales de control dependiendo del estado logico

Page 146: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 134

Figura 5.6: El DS2172 y su conexionado en la placa de BER

del pin BTS, Bus Type Select: Si esta senal esta a nivel alto, el bus funciona segun latemporizacion estandar de Motorola, mientras que si su valor logico es bajo, el tipo detemporizacion que se emplea es la de Intel. Dependiendo de ello, el funcionamiento de lospines 15, 17 y 18 difiere.

En nuestro diseno se ha escogido arbitrariamente la temporizacion del tipo Intel, yaque no existıa ningun motivo coercitivo que nos obligara a escoger un tipo determinado enconcreto. Realizada esta eleccion, la funcion de los terminales de control se puede resumirdel siguiente modo:

Pin 16 Chip Select, CS. Activo a nivel bajo sirve para indicarle al DS2172 quedebe prestar atencion al bus, bien para leer o escribir en el.

Pin 17 Address Latch Enable, ALE. Es el terminal que sirve para demultiplexarlas direcciones del bus de datos interno. Los datos de direccion se cargan en elintegrado en el flanco de bajada de este terminal, siempre y cuando este habilitadoel hilo de Chip Select.

Pin 15 Read, RD. Hilo de lectura de datos desde el registro previamente selec-cionado. El chip pone el dato en el bus en el flanco de bajada del terminal. En estecaso habra que tener la precaucion de poner el buffer de datos a alta impedanciapreviamente.

Pin 18 Write, WR. Hilo de escritura activo a nivel bajo. El integrado carga en elregistro previamente seleccionado, el dato presente en el bus justamente en el flancode subida de esta senal.

Existen otros tres pines externos de control que no utilizamos puesto que tienen suhomologo en un bit de los registros de control, y resulta muy facil acceder a ellos mediante

Page 147: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 135

software. Para inhabilitar los terminales se han conectado a masa. De todas maneras, losenumeramos anadiendo un comentario explicativo de su funcion.

Terminal RL, Receive Load. Un flanco de subida en este pin carga los ultimos32 bits recibidos en los registros PRR, registros de recepcion de secuencia patron.Su valor logico esta combinado mediante puerta OR con el valor del bit PCR.3 delregistro de control PCR.

Terminal LC, Load Count. Una transicion de bajo a alto carga los contadores debits recibidos y errores detectados en los registros accesibles al usuario BCR y BECR,y resetea la cuenta de los registros internos. Se combina mediante puerta OR con elvalor del bit PCR.4 del registro de control de patron.

Terminal TL, Transmit Load. Es el terminal dual a RL, esta vez referido al gener-ador de secuencia patron: El valor de los registros de configuracion de patron PSRse carga en el registro de desplazamiento que genera la secuencia a transmitir en elflanco de subida de este terminal. Su valor tambien esta combinado con el bit PCR.7mediante un operador OR logico.

Otro terminal que no se utiliza, esta vez no de control sino de estado, es el terminalRLOS, que es un indicador hardware de sincronizacion. Como la misma indicacion sepuede leer del bit SR.4 del registro de estado, en el montaje este pin se queda sin conexion.Nosotros utilizaremos en nuestra aplicacion la lectura de ese registro para determinar elcorrecto “enganche” del medidor a la secuencia recibida.

Aparte de los terminales de alimentacion nos queda el bloque de pines de trans-mision-recepcion, que se comentan en el siguiente apartado.

5.3.2.5. Conector de transmision-recepcion

La conexion al exterior de los terminales de transmision y recepcion del modulo deBER se realiza mediante el conector dibujado en el esquema de la figura 5.7. Es el conectorde diez terminales plano que aparece en la parte lateral inferior del chasis que contienetodo el montaje. Su fotografıa se incluye en el apendice A.

Figura 5.7: Entrada y salida de senales en la placa de BER

Page 148: PFC Modulador Digital Programable modulAD mediBER

5.3 Diseno hardware de la placa BER 136

Es importante precisar la funcion concreta de cada uno de los terminales para podertrabajar adecuadamente con la placa de BER; a continuacion los enumeramos y damosuna descripcion de los mismos.

TCLK Transmission Clock. Reloj de transmision con un margen de frecuencias vali-das desde 0 hasta 52 MHz. No tiene porque tener un factor de forma del 50 %, nitampoco necesita ser isocrono.

Es usual en medidas de test practicas que las secuencias de prueba esten sincronizadascon el resto del sistema. Pensando en esta razon no se incluyo un oscilador internoque aplicado a este pin permitiera al diseno funcionar independientemente.

Ahora pensamos que no hubiese estado de mas incluirlo, aunque solo hubiera sidoun zocalo para insertar el cristal a la frecuencia necesaria. Solo se penso en que paracualquier aplicacion que se utilizara, se necesitarıa ese sincronismo que obligarıa ala generacion del reloj de transmision en el circuito a probar.

Ello nos plantea la necesidad de suministrar la senal de reloj de transmision desde elexterior en cualquier tipo de prueba. Con todo, no creemos que sea una desventajamuy significativa. Siempre se puede utilizar cualquier fuente de senal TTL que actuede reloj de transmision.

TDAT Transmit Data. Hilo de transmision donde aparece la secuencia generada enforma de trama de datos serie NRZ (unipolar no retorno a cero). Los datos tienensus transiciones en el flanco de subida de TCLK.

TDIS Transmit Disable. A nivel alto deshabilita el reloj de transmision, por lo quela secuencia de salida en el pin TDAT se detiene. A nivel bajo permite que la senalde reloj de bit que llega por TCLK alcance la circuiterıa de transmision y ası puedacontinuar la secuencia de salida.

Este terminal es util para aplicaciones donde se necesite que la secuencia de test setransmita en modo de rafagas (burst).

Continuamos con la parte de recepcion.

RCLK Receive Clock. Reloj de recepcion con el mismo margen operativo que el detransmision. Es totalmente independiente del reloj de transmision pero tiene susmismas caracterısticas en lo que se refiere a factor de forma y sincronismo.

En este caso sı que no ocurre como en el parte de transmision. Aquı sı que es forzosoel suministro de la senal de reloj desde el exterior.

RDAT Receive Data. Hilo de recepcion donde se muestrean los datos recibidos en elflanco de subida de RCLK. Los datos han de recibirse en formato NRZ como en elcaso de su homologo de transmision.

RDIS Receive Disable. A nivel alto impide que los datos recibidos en RDAT semuestreen. A nivel bajo permite que la senal de reloj de bit recibida entre en lacircuiterıa interna permitiendo que funcione el bloque de recepcion.

Es el terminal dual de TDIS, util tambien en aplicaciones en modo burst.

Page 149: PFC Modulador Digital Programable modulAD mediBER

5.4 Software de control 137

Figura 5.8: Regulador de alimentacion de la placa de BER

5.3.2.6. Alimentacion

El modulo de alimentacion esta constituido simplemente por un regulador 78LS05que baja la tension de alimentacion exterior de 12 voltios a la tension nominal TTL de 5.Por destacar alguna caracterıstica en particular, se incluye una inductancia de proteccionEMI.

5.4. Software de control

La aplicacion de control de la placa de BER esta constituida por dos ficheros fuente.Al igual que en la placa DDS, se han separado por un lado las tareas relacionadas directa-mente con el hardware particular del diseno, y por otro lo que tiene que ver con el entornografico de usuario y la medida de tasas de bits erroneos.

Figura 5.9: Entorno grafico de la aplicacion de control mediBER

Del fichero principal ber.c comentaremos unicamente la funcion bucle, que es unafuncion lanzada por el temporizador automatico de Labwindows cada intervalo de 1 se-

Page 150: PFC Modulador Digital Programable modulAD mediBER

5.4 Software de control 138

gundo, y es la encargada de realizar todos los calculos a la hora de ejecutar una pruebade medida de tasa de error de bit. Para ello utiliza los servicios que prestan las funcionesde bajo nivel contenidas en el otro fichero fuente ber hard.c. Tambien se encarga de lapresentacion de los resultados en pantalla.

El fichero auxiliar de funciones hardware ber hard.c es el encargado de canalizar lasinstrucciones de control por el puerto paralelo hacia los registros de la placa de BER,cargando los datos precisos en funcion de los comandos enviados desde el modulo princi-pal. En este caso, podemos comentar el funcionamiento de las instrucciones particularesde lectura y escritura de datos en la placa de BER lee par bert y escribe par bert,ası como la funcion aplicacion bert, que es la encargada de informar al modulo prin-cipal del estado de sincronismo de la placa. El resto de las funciones resultan un pocotediosas puesto que se trata unicamente de funciones reiterativas, cuyo trabajo consiste enir enviando el grupo de valores concretos a los registros determinados dependiendo de lafuncion en particular de que se trate, y la verdad, su exposicion no aporta mucho, puestoque son codigos que aparecen en las hojas del fabricante.

En el apendice C se presentan los listados completos de la aplicacion mediBER.

5.4.1. Modulo principal ber.c

Este es, sobre todo, el modulo de la presentacion grafica de usuario. Aquı es dondese soportan de forma sencilla todas las funciones activadas con el raton desde la ventanade la aplicacion. De lo depurado de este modulo depende lo aparente de la presentacion.Aquı se ha intentado presentar un frontal de un equipo virtual de medida de BER, perotambien intentando sacar el maximo de provecho a las prestaciones que nos ofrece elmontaje practico. Su aspecto se presenta en la figura 5.9.

Tambien se han trabajado los calculos que mantienen una presentacion actualizadadel maximo numero de parametros de interes mientras se realizan las medidas de BER.La funcion responsable de estos calculos es la funcion bucle.

5.4.1.1. Funcion principal bucle

Esta funcion se considera como la principal de la aplicacion porque es la encargadade realizar los calculos de tasa de BER en caso de estar activadas las medidas. La verdades que si no se activa la prueba de BER, la funcion no hace gran cosa, y se limita a buscaren el puerto paralelo del PC la conexion correcta de la placa, informando al usuario encaso contrario y deshabilitando los controles principales de la ventana de la aplicacion.

El nombre de la funcion viene motivado porque esta asociada a una temporizacionautomatica en Labwindows que la ejecuta automaticamente cada segundo.

Si suponemos que se esta realizando una prueba de BER, bien porque realmenteestemos interesados en realizarla, o como puede darse el caso, si lo que queremos es que elcircuito se ponga a transmitir datos pseudoaleatorios, es entonces cuando la funcion buclerealiza su trabajo mas importante.

Lo primero que hace la funcion es leer el registro de estado y los registros contadoresde bits recibidos y de errores detectados por el medidor de BER. Para ello llama a la funcionaplicacion bert que comentaremos en el apartado siguiente. Como esta actualizacion serealiza periodicamente, podemos conocer con una demora de un segundo el estado entiempo real del medidor de tasas de error DS2172. El resultado de esta consulta sera:

Informacion actualizada sobre el estado de sincronismo del circuito.

Page 151: PFC Modulador Digital Programable modulAD mediBER

5.4 Software de control 139

Actualizacion de los valores que se necesitan para calcular la tasa de BER instantaneadel segundo transcurrido desde la ultima ejecucion de esta funcion.

A renglon seguido y disponiendo de la tasa de BER instantanea se determina si elsegundo que acaba de finalizar ha sido un segundo severamente erroneo, ses instantaneo,o simplemente un segundo con errores, es instantaneo. Estos valores se almacenan en unaespecie de buffer dinamico donde se guardan los resultados de los ultimos diez segundos amodo de memoria FIFO, con lo que siempre se tiene actualizado el contenido de los diezsegundos mas recientes. El objetivo es detectar el paso de disponibilidad a no disponibili-dad, y eso ocurre segun la recomendacion G.821 cuando se producen diez o mas segundosseguidos con alarma o con una tasa de error peor de 10−3. Al contrario sucede cuandose dan diez segundos seguidos sin alarmas y con una tasa de error mejor de 10−3. Estosenunciados dados por la UIT se vieron ya en el capıtulo 3.

Despues de realizarse el analisis global de los ultimos diez segundos, se determinael paso a situacion de disponibilidad, o por el contrario a la de no disponibilidad.En caso de que se produzcan transiciones de una situacion a la opuesta, se deben deanadir/descontar segun proceda, los valores de bits recibidos y errores detectados corre-spondientes a estos diez segundos.

Estando en situacion de disponibilidad se mantiene ademas otro buffer, en este casocon los valores correspondiente a los sesenta segundos ultimos excluyendo aquellos enlos que se produjeron errores severos: Vemos en este caso que no tienen por que ser losultimos sesenta los segundos que esten almacenados. Los valores de bits recibidos y erroresdetectados se almacenan en ese caso para determinar el porcentaje de minutos degradados,donde lo que se debe de calcular es la tasa de error en bloques de sesenta segundos entiempo de disponibilidad excluyendo los segundos severamente erroneos, ver la seccion 3.1.

Obviamente no pueden dejarse de actualizar los valores de bits recibidos y bitserroneos totales durante el tiempo de disponibilidad del test, ya que son los parametrosprincipales que nos determinaran la tasa de BER final de la prueba.

Tambien se lleva el control sobre el tiempo de duracion del test y el tiempo dedisponibilidad, imprescindibles el primero para saber cuando debe de terminar la prueba,y el segundo necesario en el calculo de las tasas globales de BER.

El trabajo de esta funcion termina manteniendo actualizados los indicadores corre-spondientes de la ventana principal de la aplicacion.

5.4.2. Modulo de funciones hardware ber hard.c

Las funciones mas importantes de este modulo utilizan los servicios de la funcionde mas bajo nivel en la aplicacion, la funcion carga pp. Es una funcion comun a las dosaplicaciones, y en ella se adapta el protocolo y los niveles del puerto paralelo al hardwareparticular con que se han desarrollado las interfaces de las dos placas. Su funcion esescribir en la direccion que se le determine el valor pasado como entrada. Para ello generala temporizacion adecuada en las lıneas de control y datos del puerto paralelo.

En su trabajo, esta funcion utiliza la librerıa externa dlportbc.lib que permite elacceso directo a los puertos de entrada-salida del PC sorteando la barrera de proteccionque impone Windows NT para acceder al hardware. La instrucciones mas importantes uti-lizadas de esta librerıa son DlPortReadPortUchar(direccion io) y DlPortWritePor-tUchar(direccion io, byte que se escribe). A partir de estas dos se ha creado la fun-cion base carga pp.

Page 152: PFC Modulador Digital Programable modulAD mediBER

5.4 Software de control 140

5.4.2.1. Funcion lee par bert

Esta funcion es la encargada de leer datos desde la placa de BER. Dicho ası pareceque debe de ser una funcion simple de muy bajo nivel; sin embargo, dado que la construc-cion hardware de dicha placa es bastante peculiar, resulta un poco complicada pues se hantenido en cuenta todas las variantes operativas. Recordemos que la placa tiene un bus dedatos interno paralelo bidireccional, separado del puerto paralelo por un buffer de datos.

Se dan por tanto dos posibilidades de funcionamiento dependiendo de la variable deentrada dir:

1. Lectura del dato que se acaba de escribir en la placa desde el puerto paralelo. Es decir,se puede acceder, porque nos interese en un momento determinado, al bus internode la placa para comprobar o leer el dato que acabamos de escribir en el utilizandouna funcion de escritura. Es el caso de una funcion que se ejecuta periodicamentepara comprobar la correcta conexion de la tarjeta al puerto.

2. Lectura de datos puestos en el bus interno de la placa al leer desde los registrosinternos del circuito DS2172. Esta es la utilizacion corriente de la funcion.

En este segundo caso, la funcion realiza automaticamente una lectura secuencial silo que se quiere es acceder a un conjunto grande de registros del generador de BER. Elgobierno de esta caracterıstica lo proporcionan las variables de entrada reg ini y nro reg.Probablemente ya se habra intuido la funcion de cada uno de ellas:

reg ini es la direccion hardware del primer registro del cual se desea leer el contenido.

nro reg es un ındice que controla el numero de registros que se leen en las direccionessiguientes a la indicada por la variable reg ini.

Si la opcion de operacion que se selecciono fue la de lectura simple del bus interno(la opcion primera), no tiene sentido el contenido de estas dos variables.

La funcion almacena el resultado en el array global de caracteres reservado al efectocontrol bert[nro registro]. El proposito es disponer de un “reflejo” en la memoria dela aplicacion que contenga los contenidos de los registros hardware. Aquı acceden lasfunciones de alto nivel cuando necesitan conocer estos contenidos.

Recordemos tambien que la lectura de los datos desde el circuito BER, se realiza eneste caso nibble a nibble, dado que tenemos 4 hilos de lectura de datos hacia el PC. Elhardware del buffer de datos se encarga de multiplexar el bus interno de 8 bits hacia estos4 hilos del puerto paralelo, y es entonces esta funcion la que se encarga de ir enviando a laplaca BER los comandos de control necesarios para canalizar el flujo de informacion haciael PC.

5.4.2.2. Funcion escribe par bert

En este caso no se dan las dos posibilidades anteriores, puesto que para escribirdirectamente sobre el bus interno se utiliza la funcion carga pp en su utilidad basica. Eltrabajo de la funcion que nos ocupa, por tanto, es el dual del realizado generalmente porla funcion lee par bert, y cuya descripcion acabamos de terminar.

Nos referimos a la carga de datos desde las aplicaciones de alto nivel a los registroshardware internos del circuito DS2172. Para ello se utiliza la memoria reservada al efecto

Page 153: PFC Modulador Digital Programable modulAD mediBER

5.4 Software de control 141

en forma de array global control bert[nro registro]. Si una aplicacion quiere programaralgun parametro determinado del medidor de BER, lo que hace es escribir el dato en estamemoria y llamar a la funcion escribe par bert que se encarga del resto.

Tendremos entonces los parametros de entrada reg ini y nro reg, que le indicana la funcion desde donde empezar a copiar y cuantas veces tiene que reiterar el bucle decopiado.

Faltarıa por recordar que durante las escrituras y lecturas en el circuito DS2172,estas dos funciones han de ejecutar la secuencia de activacion de senales de control segunel protocolo de Intel seleccionado arbitrariamente al construir la placa de BER.

5.4.2.3. Funcion aplicacion bert

Mediante esta funcion se informa a la aplicacion principal del estado operativo delcircuito DS2172. ¿Que queremos decir con esto? Esto quiere decir que la funcion se encargade leer el registro de estado y la mascara de interrupciones del integrado (aunque no seemplee en nuestra aplicacion es necesario limpiarla periodicamente), para detectar el estadode operacion en que se encuentra e informar a la aplicacion de usuario. La funcion analizalos valores obtenidos y como resultado decide si el medidor de BER esta sincronizado ono. El medidor de BER estara sincronizado cuando la secuencia que esta transmitiendo yla que recibe coinciden.

El registro de estado se almacena en un parametro de entrada a la funcion pasadopor referencia que se llama t datos *ptd. El tipo t datos es la estructura siguiente:

struct datos

char todo_1, todo_0, busca_sincro, error_dec, con_ovf, con_err_ovf, sincro;

double bits_rx, bits_err;

;

Aquı se almacena tambien la cuenta de bits recibidos y numero de bits erroneos. Vemosque se ha reservado un lugar especial a cada uno de los bits del registro de estado:

todo 1: Activo cuando la secuencia que se recibe es siempre 1.

todo 0: Activo cuando la secuencia que se recibe es siempre 0.

busca sincro: Se activa cada vez que el integrado pierde el sincronismo.

error dec: Se activa cuando se detectan errores estando sincronizado.

con ovf: Indica desbordamiento en el contador de bits recibidos.

con err ovf: Indica desbordamiento en el contador de errores.

sincro: Estado del sincronizador. Se activa cuando se reciben las secuencias continuasde 1 o 0.

A consecuencia de esta “desviacion” de lo que uno puede entender como estar sin-cronizado, fue preciso anadirle a esta funcion otro parametro mas de entrada, secuencia,que no es ni mas ni menos que el codigo de secuencia seleccionada en la aplicacion decontrol. De este modo se puede decidir de manera fiable sobre el estado de sincronismodel circuito. En este sentido, la verdad es que la funcion se acerca bastante a la aplicacionde usuario.

La funcion considera que el circuito esta sincronizado en los siguientes casos:

Page 154: PFC Modulador Digital Programable modulAD mediBER

5.5 Resultados practicos 142

1. El integrado informa que esta sincronizado y no se estan recibiendo ceros continuosni unos continuos.

2. Se reciben ceros constantemente y se ha seleccionado como secuencia de prueba lade “todo ceros”.

3. Se reciben unos constantemente y se ha seleccionado como secuencia de prueba lade “todo unos”.

Ademas de informar a la aplicacion de usuario del estado de sincronismo, la funcionaccede a los contadores de bits recibidos y errores detectados para actualizar su contenidoen la memoria de la aplicacion. Tambien resetea los contadores evitando ası su desbor-damiento. Estos valores son clave en caso de existir sincronizacion, puesto que son los quese utilizan para calcular la tasa de error en la aplicacion de usuario. Los valores adquiridosse guardan en este caso en las variables bits rx y bits err del parametro t datos *ptd deentrada, donde quedan accesibles a la aplicacion principal.

5.5. Resultados practicos

Para finalizar con el capıtulo, en esta seccion se presenta un ejemplo donde se mues-tran los resultados practicos de funcionamiento individual de la placa de BER. Recordemosque el sistema puede trabajar de forma independiente con la ya comentada restriccion de lanecesidad de fuentes externas de reloj. Para emular este caso, las medidas se han realizadosimulando una prueba real.

Figura 5.10: Conexion de la placa de BER para la simulacion de una medidapractica de tasa de error

Para preparar la prueba se ha puenteado el terminal de salida de datos con el derecepcion, (es decir, se ha realizado un bucle local hardware), y como reloj de transmisiony recepcion se ha utilizado el reloj de bit generado en la placa DDS. Esta situacion seasemeja en gran medida al conexionado necesario para el uso normal del montaje, puestoque para trabajar conjuntamente con la placa DDS se precisa el concurso del reloj de bitgenerado en la misma. Es la parte de recepcion la que se ha simulado con el bucle local alno disponerse de demodulador digital con el que poder “recibir” la senal de FI (frecuenciaintermedia) creada por la placa DDS.

En la figura 5.11, podemos observar las capturas obtenidas con el osciloscopio paralos dos modos de trabajo de la placa de BER.

Page 155: PFC Modulador Digital Programable modulAD mediBER

5.5 Resultados practicos 143

(a)

(b)

Figura 5.11: Diagramas de senal para diversos tipos de secuencias generadas enla placa de BER(a) Ejemplo de secuencia pseudoaleatoria(b) Ejemplo de secuencia repetitiva.

Page 156: PFC Modulador Digital Programable modulAD mediBER

5.6 Mejoras futuras 144

Para poder guardar los resultados de la prueba que se este realizando, la aplicacionpermite generar un fichero de texto con los resultados. Los datos que incluye este ficherose van a ver a continuacion, y podemos decir que lo que contienen principalmente es loque se puede ver en la pantalla principal. Un ejemplo de fichero de resultados serıa el quese genero al final del test en la figura 5.9:

RESULTADOS DE LA PRUEBA DE MEDIDA DE TASA DE BER

Fecha del test (mes-dıa-a~no): 09-05-2000

Hora del test: 21:26:47

Tipo de secuencia utilizada: 2^21 - 1

Tiempo de duracion programada del test: 5 min

Insercion de errores automaticos: Ninguno

Secuencia de usuario programada: 8CEF0FF0

Errores insertados manualmente: 1

Tiempo de duracion real del test: 0d 0h 5m 0s

Tiempo de disponibilidad durante test: 0d 0h 5m 0s

Numero total de bits recibidos: 4048702109

Numero total de bits erroneos: 1316

Numero de segundos erroneos (ES): 6.60

% de segundos erroneos (ES): 2.20 %

Numero de segundos severamente erroneos (SES): 0

% de segundos severamente erroneos (SES): 0.00 %

Numero de minutos degradados (DM): 1

% de minutos degradados (DM): 20.00 %

Tasa de bits erroneos (BER): 3.2504e-07

5.6. Mejoras futuras

Como siempre se suele decir, una aplicacion nunca esta totalmente terminada, puesseguro que se puede mejorar en un sentido u otro. En este caso podrıamos acometer estasmejoras tanto a nivel hardware como de programa de control, puesto que las aplicacionesy posibilidades del sistema son muy amplias.

En cualquier caso, para competir con los dispositivos comerciales en el mercado sedeberıa aumentar la flexibilidad del sistema, pues aunque puede parecer que las presta-ciones son bastante amplias, los equipos comerciales tienen alguna prestacion anadida queles hacen ganar en utilidad.

Por comentar algunas, se podrıan enumerar las siguientes:

Generador de reloj interno. Esto hace que el equipo se pueda utilizar por sı solo, envez de necesitar una fuente de reloj externa.

Incluir el divisor de reloj y mejorarlo. Nos referimos al generador de reloj de bit queen nuestro diseno se ha implementado dentro de la placa DDS. A su vez, mejorarlopara que permita no solo la generacion de secuencias en modo continuo, sino que,aprovechando los hilos de control de los bloques de transmision y recepcion delDS2172, tambien se puedan generar secuencias aleatorias en modo rafaga.

Page 157: PFC Modulador Digital Programable modulAD mediBER

5.6 Mejoras futuras 145

Esta pequena modificacion del sistema permitirıa, por ejemplo, la realizacion demedidas de BER en un unico slot de tiempo de una trama digital de 2.048 Mbps dela jerarquıa primaria europea, (se las denomina tramas E1 en la literatura tecnica).

Por ultimo, como posible mejora del programa de control mediBER, podrıa pro-ponerse la configuracion exterior mediante fichero y la grabacion automatica de laultima configuracion antes de abandonar el programa. En este caso, no se perderıanlos datos de configuracion de la ultima prueba realizada.

Page 158: PFC Modulador Digital Programable modulAD mediBER

Apendice A

El puerto paralelo del PC

Dado que el metodo de control utilizado para gobernar todo el sistema es el puertoparalelo del PC, se realiza a continuacion una breve introduccion al mismo, con el objetivode conocer su funcionamiento y los registros de que consta, pues seran importantes a lahora de confeccionar las aplicaciones de control.

A.1. Generalidades

El puerto paralelo del PC se conoce normalmente con el nombre de Centronics 1.Aunque la idea para la que se concibio originalmente fue la de comunicacion con la im-presora, las evoluciones posteriores del citado bus han ampliado su rango de aplicacion,y actualmente el puerto paralelo es un puerto ampliamente usado como interfaz de todotipo de perifericos como scaners de sobremesa, dispositivos de backup, grabadoras de CDexternas, etc.

El puerto esta compuesto de 4 lıneas de control, 5 lıneas de estado y 8 lıneas de datos.Se encuentra normalmente en la parte trasera del PC con un tipo de conector hembra D25.Aunque tambien puede existir otro conector D25 macho, este sera un puerto serie RS-232y por tanto, es totalmente incompatible con el primero. La tendencia actual es la de usarconectores D9 macho para los puertos serie, por lo que resulta difıcil la confusion.

Como consecuencia de la evolucion en el puerto paralelo se hizo necesaria una es-tandarizacion del mismo, y ası se publico la norma IEEE 1284 del ano 1994, donde sedefinen 5 modos de operacion, que son los siguientes:

1. Modo compatible

2. Modo nibble (un nibble es medio byte, 4 bits)

3. Modo byte.

4. Modo mejorado, EPP (Enhanced Paralell Port)

5. Modo extendido, ECP (Extended Capabilities Port)

El objetivo era desarrollar drivers y dispositivos nuevos que fueran compatibles entreellos y tambien hacia atras con el Puerto Paralelo Estandar (Standart Paralell Port). Losmodos compatible, nibble y byte utilizan el hardware estandar disponible en las tarjetas de

1Centronics era el nombre de un fabricante de impresoras

146

Page 159: PFC Modulador Digital Programable modulAD mediBER

A.1 Generalidades 147

puerto paralelo original, mientras que los modos EPP y ECP requieren hardware especıficoque pueda correr a velocidades mas rapidas, siendo tambien compatibles hacia atras conel Puerto Paralelo Estandar SPP.

El modo compatible o “modo Centronics”, como se conoce normalmente, se diseno paraenviar datos en direccion de salida a una velocidad tıpica de 50 Kbytes por segundo, pu-diendo llegar hasta los 150 Kbytes. Para recibir datos, se debe cambiar a modo nibble omodo byte. El modo nibble puede leer un nibble (4 bits) en la direccion inversa, es decirdesde el periferico hacia el ordenador. El modo byte utiliza la caracterıstica que solo seencuentra en las tarjetas mas modernas en las que el puerto paralelo es bidireccional, demanera que se puede leer directamente un byte en la direccion inversa.

(a) (b)

Figura A.1: Conexionado externo para lectura de datos en el puerto paralelo delPC(a) Conexion externa para lectura de datos en modo nibble(b) Conexion externa para lectura de datos en modo compatible.

Los otros dos modos mas avanzados, EPP y ECP, utilizan hardware adicional paragenerar y gestionar el protocolo de intercambio de comandos entre el PC y los perifericosconectados. Normalmente para enviar un byte a una impresora u otro dispositivo en elmodo compatible, el software debe:

1. Escribir el dato en el puerto.

2. Comprobar si la impresora esta ocupada. Si la impresora esta ocupada, esta noaceptara ningun dato y por tanto, cualquier dato escrito en el puerto se perderıa.

3. Activar el hilo de Strobe (hilo 1) a nivel bajo. Esto le indica a la impresora que hayun dato correcto en las lıneas de datos. (hilos 2-9).

4. Poner la lınea de Strobe en alto despues de esperar aproximadamente 5 microsegun-dos tras haber puesto la lınea de Strobe a bajo. Esto limita la velocidad a la que elpuerto puede funcionar.

Los puertos EPP y ECP solventan esta limitacion dejando al hardware chequear yver si la impresora esta ocupada, generar el strobe y realizar el resto de operaciones de

Page 160: PFC Modulador Digital Programable modulAD mediBER

A.2 Propiedades de la interfaz fısica 148

intercambio de protocolo adecuado, incrementando de ese modo la velocidad de transfer-encia. Estos puertos pueden funcionar a unas velocidades entre 1 y 2 Mbytes por segundo.El puerto ECP tambien tiene la ventaja de utilizar canales DMA y buffers de tipo FIFO,con lo cual los datos se pueden enviar y recibir sin utilizar instrucciones de entrada/salida.

A.2. Propiedades de la interfaz fısica

En la tabla A.1 se representan los hilos del conector tipo D25 y del conector de34 pines Centronics. El conector D25 es el conector mas comun en el puerto paralelo delordenador, mientras que el conector Centronics es el que tienen todas las impresoras. Elestandar IEEE 1284 especifica tres tipos de conectores para utilizar en el puerto paralelo.El primero, 1284 tipo A, es el conector D25 de la trasera de la mayorıa de los ordenadores.El segundo es el 1284 tipo B y es el conector Centronics que se encuentra en la mayorıade las impresoras.

El IEEE 1284 tipo C, es un conector de 36 contactos como el Centronics, peromas pequeno. Se dice de este conector que tiene mejor enganche, mejores caracterısticaselectricas y mas facilidad de montaje. Tiene dos pines mas que se pueden utilizar para versi el otro dispositivo conectado tiene alimentacion. Este nuevo conector se recomienda paranuevos disenos, y sera cuestion de esperar un tiempo para observar su grado de aceptacionpor parte de los fabricantes.

DB 25 Centronics Senal SPP Direccion Registro Inv. Hardware 2

1 1 #Strobe 3 Ent/Sal Control Si2 2 Datos 0 Salida Datos3 3 Datos 1 Salida Datos4 4 Datos 2 Salida Datos5 5 Datos 3 Salida Datos6 6 Datos 4 Salida Datos7 7 Datos 5 Salida Datos8 8 Datos 6 Salida Datos9 9 Datos 7 Salida Datos10 10 #Ack Entrada Estado11 11 Busy Entrada Estado Si12 12 Paper Out Entrada Estado13 13 Select Entrada Estado14 14 #Auto Line Feed Ent/Sal Control Si15 32 #Error Entrada Estado16 31 #Initialize Ent/Sal Control17 36 #Select Printer Ent/Sal Control Si

18-25 19-30 Ground Gnd

Cuadro A.1: Hilos del puerto paralelo del PC

Page 161: PFC Modulador Digital Programable modulAD mediBER

A.3 Direcciones del puerto paralelo 149

A.3. Direcciones del puerto paralelo

El puerto paralelo utiliza normalmente tres direcciones. La direccion base 3BCh seintrodujo originalmente para puertos paralelo incorporados en las primeras tarjetas devıdeo. Posteriormente desaparecio cuando se separaron los circuitos hardware. Actual-mente ha vuelto a aparecer como opcion en los puertos paralelo integrados en las placasmadre de los PC, en las que se puede cambiar su configuracion a traves de la BIOS.

Normalmente LPT1 esta asignado a la direccion base 378h, mientras que LPT2esta asignado a la 278h. Sin embargo este puede no ser siempre el caso. Cuando el or-denador arranca, la BIOS (Basic Input/Output System) determina el numero de puertosdisponibles y les asigna los nombres LPT1, LPT2 . . . La BIOS busca en primer lugar en ladireccion 3BCh. Si ahı encuentra un puerto paralelo le asignara el nombre LPT1, y despuesbusca en la posicion 378h. Si tambien ahı encuentra otro puerto paralelo le asignara elsiguiente nombre en la secuencia. Este nombre sera LPT1 si no se encontro nada en 3BCh,o LPT2 si ya se encontro un puerto en la primera posicion. Por ultimo, la BIOS buscaotro puerto paralelo en la direccion 278h siguiendo el mismo procedimiento anterior. Porlo tanto, es posible tener un LPT2 que este situado en la posicion de memoria 378h y noen la 278h como se podrıa esperar en un primer momento.

Todavıa se puede dar una situacion aun mas confusa, puesto que hay placas conpuertos paralelo con direcciones seleccionables mediante puentes que permiten configurar-los como LPT1, LPT2, o LPT3. Entonces, ¿cual es la direccion de LPT1? Normalmente,LPT1 es la 378h, y LPT2 esta en la direccion 278h. En cualquier caso, si se quiere saber enque direccion de entrada-salida tiene situados la BIOS los puertos paralelo LPT1, LPT2,etc, existe una tabla donde se almacena su direccion, esta vez en posiciones especıficas dela memoria. Estos datos se recogen en la tabla A.2.

Direccion Inicial Funcion

0000:0408 Direccion base de LPT10000:040A Direccion base de LPT20000:040C Direccion base de LPT30000:040E Direccion base de LPT4 4

Cuadro A.2: Posiciones de la BIOS que almacenan las direcciones de I/O de LPTs

A.4. Registros software

En la tabla A.3 se representa el puerto o registro de datos. La direccion base se utilizapara obtener datos de las lıneas de datos del puerto paralelo (hilos 2-9). Este registro esnormalmente un registro de solo escritura. Si se lee el registro, se debera obtener el ultimodato enviado. Sin embargo, los nuevos disenos hardware consiguen que este puerto seabidireccional, pudiendose recibir datos en direccion de entrada al PC.

2 Inversion realizada por el hardware3 # Indica senal activa a nivel bajo4 La direccion 0000:040E del area de datos de las BIOS puede ser usada como area de datos de Bios

extendida en las nuevas Bios

Page 162: PFC Modulador Digital Programable modulAD mediBER

A.4 Registros software 150

El puerto de estado (direccion base +1), es un puerto de solo lectura. Cualquierdato que se escriba en este puerto sera ignorado. El puerto de estado consta de 5 lıneasde entrada (hilos 10, 11, 12, 13 y 15), un bit de IRQ del registro de estado, y dos bitsreservados. Observese que el bit 7 (Busy) tiene inversion hardware. Esto quiere decir quesi se lee un cero, entonces existe un nivel logico alto de +5v en el pin 11. El bit #IRQ esactivo a nivel bajo. Por tanto, si se lee un 1, entonces no ha ocurrido una interrupcion.

Offset Nombre Direccion Bit # Propiedades

Base + 0 Puerto de Datos Escritura 5 Bit 7 Datos 7Bit 6 Datos 6Bit 5 Datos 5Bit 4 Datos 4Bit 3 Datos 3Bit 2 Datos 2Bit 1 Datos 1Bit 0 Datos 0

Cuadro A.3: Puerto de datos

Offset Nombre Direccion Bit # Propiedades

Base + 1 Puerto de Estado Lectura Bit 7 BusyBit 6 #AckBit 5 Paper OutBit 4 Select InBit 3 ErrorBit 2 IRQ (Inv. Hard.)Bit 1 ReservadoBit 0 Reservado

Cuadro A.4: Puerto de estado

El puerto de control (direccion base + 2) es un puerto pensado para ser utilizadocomo de solo escritura. Sin embargo, sı que se puede utilizar como entrada. El hardwarede salida de estos pines utiliza logica en “open colector”, y la mayorıa de las tarjetas conpuertos paralelo llevan integradas las resistencias de pull-up. No obstante, es una buenamedida anadir resistencias externas para asegurarnos del buen funcionamiento del puerto.

Los puertos paralelo bidireccionales utilizan el pin 5 del puerto de control parahabilitar-inhabilitar los drivers de salida. Un posible esquema se muestra en la figura A.2.Cuando este bit se pone a uno, los pines 2 a 9 cambian a estado de alta impedancia.Una vez en este estado, se pueden leer datos de estas lıneas y recuperarlas en el registro

5 Si el puerto es bidireccional, entonces se pueden realizar operaciones de lectura y escritura en el puertode datos

Page 163: PFC Modulador Digital Programable modulAD mediBER

A.4 Registros software 151

Offset Nombre Direccion Bit # Propiedades

Base + 2 Puerto de Control Lec/Escr Bit 7 Sin usoBit 6 Sin usoBit 5 Ena. bidir. portBit 4 Ena. IRQ via ACKBit 3 #Select PrinterBit 2 #InitializeBit 1 #Auto LinefeedBit 0 #Strobe

Cuadro A.5: Puerto de control

de datos (direccion base). En estas condiciones, cualquier dato escrito en el puerto dedatos sera almacenado, pero no estara disponible en los pines de salida. Para inhabilitarel modo bidireccional, se conecta el bit 5 del puerto de control a cero. Esta caracterısticaesta unicamente disponible en los puertos bidireccionales.

Sin embargo, no todos los puertos paralelo se comportan de la misma manera. Otrospuertos pueden requerir la activacion del bit 6 del puerto de control para habilitar elmodo bidireccional y el bit 5 para inhibirlo. Diferentes fabricantes implementan el puertoparalelo de forma diferente. Si se quiere profundizar mas sobre el funcionamiento del puertoparalelo del PC, existen varias paginas en internet con bastante informacion al respecto[?].

Figura A.2: Hardware interno del PC en puertos bidireccionales

Page 164: PFC Modulador Digital Programable modulAD mediBER

A.5 Utilizacion particular en la aplicacion 152

A.5. Utilizacion particular en la aplicacion

Precisamente para no tener problemas de compatibilidad en la interface de nuestraaplicacion, se decidio utilizar el puerto paralelo en el modo estandar. En este modo, lasocho lıneas del bus de datos se emplean en modo escritura para colocar los datos de salidadel PC, el puerto de estado en modo lectura para la adquisicion de datos desde el exterior,y los terminales del puerto de control en modo de salida para demultiplexar los datos quese escriban en el bus. En la tabla A.6 se resumen las conexiones del puerto paralelo ennuestro sistema.

Pin DB-25 Senal SPP Original Aplicacion Sentido Registro Inv. Hardware 6

2 Datos 0 Datos 0 Salida Datos3 Datos 1 Datos 1 Salida Datos4 Datos 2 Datos 2 Salida Datos5 Datos 3 Datos 3 Salida Datos6 Datos 4 Datos 4 Salida Datos7 Datos 5 Datos 5 Salida Datos8 Datos 6 Datos 6 Salida Datos9 Datos 7 Datos 7 Salida Datos11 Busy OD7 Entrada Estado Si10 #Ack OD6 Entrada Estado12 Paper Out OD5 Entrada Estado13 Select OD4 Entrada Estado15 #Error OD3 Entrada Estado17 #Select Printer LATCH3 Salida Control Si16 #Inicialize LATCH2 Salida Control14 #Auto Line Feed LATCH1 Salida Control Si1 #Strobe 7 LATCH0 Salida Control Si

18-25 Ground Gnd Gnd

Cuadro A.6: Puerto paralelo en la aplicacion

Los ocho hilos de datos constituyen el bus de salida desde el PC. En ellos se colocandatos validos que se cargaran en los diferentes registros de las placas de la aplicacion. Loshilos del registro de estado aquı los denominaremos como OD7 a OD3, y se utilizan parala lectura de datos desde las tarjetas del montaje. Los hilos OD7 a OD4 se emplean enla tarjeta de BER para leer los bytes nibble a nibble (de cuatro en cuatro bits). El hiloOD3 se utiliza con la placa de modulacion DDS, leyendose desde esa tarjeta los datos deentrada bit a bit. Esta seleccion no se ha hecho de forma caprichosa, sino que, como seha podido comprobar, ha venido impuesta por la construccion hardware de los integradosutilizados en la practica.

6 Invertida por el hardware7 Senal activa a nivel bajo

Page 165: PFC Modulador Digital Programable modulAD mediBER

A.5 Utilizacion particular en la aplicacion 153

Para terminar, los hilos de control son cuatro, LATH3 a LATH0, y se emplean enla carga y demultiplexacion de los hilos de datos. LATCH3 y LATCH2 son los hilos deseleccion de registro dentro de cada tarjeta. LATCH1 carga el contenido del bus de datosen el registro seleccionado de la placa DDS, y LATCH0 realiza la misma funcion pero eneste caso con la tarjeta de BER. Estos dos ultimos hilos realizan la funcion de terminalesde seleccion de tarjeta. En la figura A.3 se representa esquematicamente la conexion delpuerto paralelo en nuestra aplicacion.

Figura A.3: Utilizacion particular del puerto paralelo en nuestra aplicacion

Page 166: PFC Modulador Digital Programable modulAD mediBER

Apendice B

Fotografıas del montaje

Hasta aquı hemos hablado de la composicion interna de las placas de modulacionDDS y de la placa BER de generacion de secuencias pseudoaleatorias. Nos falta mostrarel soporte necesario que hace que todo el conjunto sea manejable.

Ambos circuitos impresos se han montado conjuntamente en un chasis de aluminioque se puede ver en la figura B.1 donde se han mecanizado todos los conectores de accesoa los circuitos.

La figura B.2 es una vista interior. La placa DDS va montada sobre la placa de BER,pero en la fotografıa se ha colocado fuera para poder observar el aspecto de ambas.

Tambien se ha indicado en las figuras B.3 y B.4 la funcion de los diferentes conectoresaccesibles al usuario.

154

Page 167: PFC Modulador Digital Programable modulAD mediBER

155

Figura B.1: Vista general del montaje que contiene las placas DDS y BER

Figura B.2: Vista interior donde se pueden distinguir las dos placas

Page 168: PFC Modulador Digital Programable modulAD mediBER

156

Figura B.3: Lateral del chasis donde se pueden observar el conector de salida deIF y los interfaces de datos de las dos placas

Pin Funcion Pin Funcion

1 Sin conexion 6 Entrada externa de habilitacionde transmision

2 Entrada serie de datos 7 Sin conexion3 Masa 8 Salida de reloj de bit interno4 Entrada de OL externo 9 Masa5 Masa 10 Salida de Reset

Cuadro B.1: Conector de interface de la placa DDS

Pin Funcion Pin Funcion

1 Entrada de datos Rx 6 Sin conexion2 Salida de datos Tx 7 Entrada de reloj de recepcion3 Entrada de senal de inhabilitacion 8 Entrada de reloj de transmision

de recepcion4 Sin conexion 9 Masa5 Entrada de senal de inhabilitacion 10 Sin conexion

de transmision

Cuadro B.2: Conector de interface de la placa BER

Page 169: PFC Modulador Digital Programable modulAD mediBER

157

Figura B.4: Lateral del chasis que contiene los conectores de control y alimentacion

Pin DB-25 Senal SPP Original Aplicacion Sentido Registro Inv. Hardware 1

2 Datos 0 Datos 0 Salida Datos3 Datos 1 Datos 1 Salida Datos4 Datos 2 Datos 2 Salida Datos5 Datos 3 Datos 3 Salida Datos6 Datos 4 Datos 4 Salida Datos7 Datos 5 Datos 5 Salida Datos8 Datos 6 Datos 6 Salida Datos9 Datos 7 Datos 7 Salida Datos11 Busy OD7 Entrada Estado Si10 #Ack OD6 Entrada Estado12 Paper Out OD5 Entrada Estado13 Select OD4 Entrada Estado15 #Error OD3 Entrada Estado17 #Select Printer LATCH3 Salida Control Si16 #Inicialize LATCH2 Salida Control14 #Auto Line Feed LATCH1 Salida Control Si1 #Strobe 2 LATCH0 Salida Control Si

18-25 Ground Gnd Gnd

Cuadro B.3: Pines del conector al puerto paralelo

Pin Funcion

Tip +12 voltios DCRing Masa

Cuadro B.4: Conector de alimentacion

Page 170: PFC Modulador Digital Programable modulAD mediBER

Apendice C

Listados fuente

En este apartado se incluyen los listados fuentes de las dos aplicacion de controldesarrolladas, modulAD para la placa de modulacion DDS y mediBER para la placa deBER, junto con los ficheros de comandos de Matlab utilizados en la simulacion de losdistintos bloques del modulador DDS AD9853.

C.1. Aplicacion modulAD

Ficheros mod.c y mod hard.c

/****************************************************************************

MODULO: Aplicacion principal de control de placa del MODULADOR AD9853

FICHERO: mod.c VERSION: 1.0

-----------------------------------------------------------------------------

AUTOR: Juan Luis [email protected]

FECHA: Abril-2000

-----------------------------------------------------------------------------

DESCRIPCION:

****************************************************************************/

#include <cvirte.h> // Needed if linking in external compiler; harmless

//otherwise

#include <userint.h>

#include <formatio.h>

#include <ansi_c.h>

#include <utility.h>

#include "mod_def.h" // Defines para todo el proyecto

#include "mod.h" // Controles del panel

#include "dlportio.h" // Interfaz para acceder al hardware desde windows

#include "mod_hard.h" // Contiene las funciones hardware para programar

// la placa del modulador AD9853 mediante el puerto

// paralelo

//DEFINICIONES DE TIPOS

//DECLARACION DE FUNCIONES

void inicializa(int inic);

//VARIABLES GLOBALES

// Del modulo de funciones hardware

extern double esc, esc_old;

// Propias

// Gestion de paneles

static int panel_conf, panel_fir, panel_frec, panel_principal, panel_scr, panel_vel, err;

char puerto_control;

// caracteres reservados para el envıo de parametros a los registros del modem

158

Page 171: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 159

unsigned char control_modem[74];

unsigned char inicio;

// registros del puerto paralelo

unsigned long pp_datos; //Normalmente solo escritura

unsigned long pp_estado; //lectura

unsigned long pp_control; //lectura y escritura con lineas fısicas en "open colector"

// Bytes utilizados para la comunicacion con el modulador. Se especifican como

// global al tenerlos que utilizar para la programacion del generador de

// reloj de bit, ası como para controlar el modulador

unsigned char byte_bajo, byte_alto;

// Comprobacion de la existencia fısica de la placa

char hay_placa_mod, primer_bucle;

int main (int argc, char *argv[])

/* Needed if linking in external compiler; harmless otherwise */

if (InitCVIRTE (0, argv, 0) == 0)

return -1; /* out of memory */

// Inicializacion de las variables de control del modem

byte_bajo = 0x0;

byte_alto = 0xE8;

// Carga de paneles previa a la inicializacion de variables

if ((panel_principal = LoadPanel (0, "mod.uir", PANEL_MOD)) < 0)

return -1;

if ((panel_conf = LoadPanel (0, "mod.uir", PANEL_CONF)) < 0)

return -1;

if ((panel_frec = LoadPanel (0, "mod.uir", PANEL_FREC)) < 0)

return -1;

if ((panel_vel = LoadPanel (0, "mod.uir", PANEL_VEL)) < 0)

return -1;

if ((panel_scr = LoadPanel (0, "mod.uir", PANEL_SCR)) < 0)

return -1;

if ((panel_fir = LoadPanel (0, "mod.uir", PANEL_FIR)) < 0)

return -1;

// Consideramos que la placa esta correctamente conectada en principio

hay_placa_mod = SI;

primer_bucle = SI;

// Inicializacion

inicio = SI;

// Utilizamos el puerto paralelo LPT1

puerto_control = 1;

inicializa(SI);

inicio = NO;

// Arranque de la presentacion

DisplayPanel (panel_principal);

RunUserInterface ();

// Puerto paralelo a alta impedancia si es bidireccional

inicio=DlPortReadPortUchar(pp_control);

inicio = inicio | 0x20;

DlPortWritePortUchar(pp_control, inicio);

return 0;

/****************************************************************************

DESCRIPCION DE LAS FUNCIONES

****************************************************************************/

/****************************************************************************

FUNCION: inicializa

DESCRIPCION: Realiza la secuencia de inicializacion de la aplicacion

Page 172: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 160

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES:

OBSERVACIONES:

****************************************************************************/

void inicializa(int inic)

unsigned short byte;

// Seleccion del puerto paralelo de control

if (puerto_control==1) //pp_datos==LPT1;

err = ReadFromPhysicalMemory (0x00000408, &pp_datos, 1);

err = ReadFromPhysicalMemory (0x00000409, &byte, 1);

byte= byte << 8;

pp_datos = pp_datos | byte;

else if (puerto_control==2) //pp_datos==LPT2;

err = ReadFromPhysicalMemory (0x0000040A, &pp_datos, 1);

err = ReadFromPhysicalMemory (0x0000040B, &byte, 1);

byte= byte << 8;

pp_datos = pp_datos | byte;

else if (puerto_control==3) //pp_datos==LPT3;

err = ReadFromPhysicalMemory (0x0000040C, &pp_datos, 1);

err = ReadFromPhysicalMemory (0x0000040D, &byte, 1);

byte= byte << 8;

pp_datos = pp_datos | byte;

else if (puerto_control==4) //pp_datos==LPT4;

err = ReadFromPhysicalMemory (0x0000040E, &pp_datos, 1);

err = ReadFromPhysicalMemory (0x0000040F, &byte, 1);

byte= byte << 8;

pp_datos = pp_datos | byte;

pp_estado=pp_datos+1;

pp_control=pp_datos+2;

// Inicializacion del puerto paralelo

// Modificacion para funcionamiento con puertos bidireccionales

byte=0x0;

byte=DlPortReadPortUchar(pp_control);

byte = byte & 0xDF;

DlPortWritePortUchar(pp_control, byte);

byte=0x0;

DlPortWritePortUchar(pp_datos, byte);

byte=DlPortReadPortUchar(pp_estado);

byte=DlPortReadPortUchar(pp_control);

//byte=byte & 0xF0;

byte=byte & 0xD0;

byte=byte | 0x8;

DlPortWritePortUchar(pp_control, byte);

// Inicializacion de variables

inicia_hard();

// Inicializacion de parametro de escalado en modulador

esc = 1;

// Programacion del harware.

// Se sigue la secuencia de inicializacion indicada en el manual del integrado

// AD9853 pag. 14

desactiva_txe();

reset_9853();

// Entorno y envıo de comandos de programacion al modem

PulsaMod (panel_principal, PANEL_MOD_PULSA_MOD, EVENT_COMMIT, 0, 0, 0);

TipoScrambler (panel_conf, PANEL_CONF_TIPO_SCRAMBLER, EVENT_COMMIT, 0, 0, 0);

SwitchSpectrum (panel_conf, PANEL_CONF_SWITCH_SPECTRUM, EVENT_COMMIT, 0, 0, 0);

if (inic) SwitchDac (panel_conf, PANEL_CONF_SWITCH_DAC, EVENT_COMMIT, 0, 0, 0);

// Esta incluye a las dos siguientes que se han anulado

Page 173: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 161

ValorFrecRef (panel_conf, PANEL_CONF_VALOR_FREC_REF, EVENT_COMMIT, 0, 0, 0);

// ValorFrecMarca (panel_frec, PANEL_CONF_VALOR_FREC_MARCA, EVENT_COMMIT, 0, 0, 0);

// ValorFrec (panel_frec, PANEL_FREC_VALOR_FREC, EVENT_COMMIT, 0, 0, 0);

// La siguiente funcion anulada esta incluıda en PulsaMod

// PulsaCodDif (panel_scr, PANEL_SCR_PULSA_COD_DIF, EVENT_COMMIT, 0, 0, 0);

PulsaScr (panel_scr, PANEL_SCR_PULSA_SCR, EVENT_COMMIT, 0, 0, 0);

ValorDiv (panel_vel, PANEL_VEL_VALOR_DIV, EVENT_COMMIT, 0, 0, 0);

// El efecto de la siguiente en la inicializacion se consigue con la anterior

// PulDiv2 (panel_vel, PANEL_VEL_PUL_DIV_2, EVENT_COMMIT, 0, 0, 0);

ValorFirA0(panel_fir, PANEL_FIR_VALOR_FIR_A0, EVENT_COMMIT, 0, 0, 0);

ValorFirA1(panel_fir, PANEL_FIR_VALOR_FIR_A1, EVENT_COMMIT, 0, 0, 0);

ValorFirA2(panel_fir, PANEL_FIR_VALOR_FIR_A2, EVENT_COMMIT, 0, 0, 0);

ValorFirA3(panel_fir, PANEL_FIR_VALOR_FIR_A3, EVENT_COMMIT, 0, 0, 0);

ValorFirA4(panel_fir, PANEL_FIR_VALOR_FIR_A4, EVENT_COMMIT, 0, 0, 0);

ValorFirA5(panel_fir, PANEL_FIR_VALOR_FIR_A5, EVENT_COMMIT, 0, 0, 0);

ValorFirA6(panel_fir, PANEL_FIR_VALOR_FIR_A6, EVENT_COMMIT, 0, 0, 0);

ValorFirA7(panel_fir, PANEL_FIR_VALOR_FIR_A7, EVENT_COMMIT, 0, 0, 0);

ValorFirA8(panel_fir, PANEL_FIR_VALOR_FIR_A8, EVENT_COMMIT, 0, 0, 0);

ValorFirA9(panel_fir, PANEL_FIR_VALOR_FIR_A9, EVENT_COMMIT, 0, 0, 0);

ValorFirA10(panel_fir, PANEL_FIR_VALOR_FIR_A10, EVENT_COMMIT, 0, 0, 0);

ValorFirA11(panel_fir, PANEL_FIR_VALOR_FIR_A11, EVENT_COMMIT, 0, 0, 0);

ValorFirA12(panel_fir, PANEL_FIR_VALOR_FIR_A12, EVENT_COMMIT, 0, 0, 0);

ValorFirA13(panel_fir, PANEL_FIR_VALOR_FIR_A13, EVENT_COMMIT, 0, 0, 0);

ValorFirA14(panel_fir, PANEL_FIR_VALOR_FIR_A14, EVENT_COMMIT, 0, 0, 0);

ValorFirA15(panel_fir, PANEL_FIR_VALOR_FIR_A15, EVENT_COMMIT, 0, 0, 0);

ValorFirA16(panel_fir, PANEL_FIR_VALOR_FIR_A16, EVENT_COMMIT, 0, 0, 0);

ValorFirA17(panel_fir, PANEL_FIR_VALOR_FIR_A17, EVENT_COMMIT, 0, 0, 0);

ValorFirA18(panel_fir, PANEL_FIR_VALOR_FIR_A18, EVENT_COMMIT, 0, 0, 0);

ValorFirA19(panel_fir, PANEL_FIR_VALOR_FIR_A19, EVENT_COMMIT, 0, 0, 0);

ValorFirA20(panel_fir, PANEL_FIR_VALOR_FIR_A20, EVENT_COMMIT, 0, 0, 0);

reset_9853();

prog_hard(CONF, 1);

reset_9853();

prog_hard(RS_k, 0x49); // Incluye CONF

prog_hard(GCB, 1);

// Se activa el funcionamiento

activa_txe();

/****************************************************************************

FUNCIONES CVICALLBACK

****************************************************************************/

/****************************************************************************

FUNCION: PulsaFrec

DESCRIPCION: Muestra el panel donde se programa la frecuencia de salida del

modulador

PARAMETROS DE ENTRADA: Los usuales en una funcion callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaFrec (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char panel_visible;

switch (event)

case EVENT_COMMIT:

if (panel_visible)

HidePanel(panel_frec);

panel_visible = NO;

else

DisplayPanel (panel_frec);

panel_visible = SI;

break;

Page 174: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 162

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaFec

DESCRIPCION: Muestra el panel donde se programan la habilitacion o no del

aleatorizador y del codificador diferencial del modulador

PARAMETROS DE ENTRADA: Los usuales en una funcion callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaFec (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char panel_visible;

switch (event)

case EVENT_COMMIT:

if (panel_visible)

HidePanel(panel_scr);

panel_visible = NO;

else

DisplayPanel (panel_scr);

panel_visible = SI;

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaVel

DESCRIPCION: Muestra el panel donde se programa el reloj de bit

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaVel (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char panel_visible;

switch (event)

case EVENT_COMMIT:

if (panel_visible)

HidePanel(panel_vel);

panel_visible = NO;

else

DisplayPanel (panel_vel);

panel_visible = SI;

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

Page 175: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 163

FUNCION: PulsaFir

DESCRIPCION: Ense~na la pantalla donde se programan los coeficientes del

filtro FIR integrado dentro del modulador

PARAMETROS DE ENTRADA: Es una funcion callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaFir (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char panel_visible;

switch (event)

case EVENT_COMMIT:

if (panel_visible)

HidePanel(panel_fir);

panel_visible = NO;

else

DisplayPanel (panel_fir);

panel_visible = SI;

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaConf

DESCRIPCION: Activa el panel donde se cambian otros parametros de

configuracion.

PARAMETROS DE ENTRADA: Los de las funciones callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaConf (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char panel_visible;

switch (event)

case EVENT_COMMIT:

if (panel_visible)

HidePanel(panel_conf);

panel_visible = NO;

else

DisplayPanel (panel_conf);

panel_visible = SI;

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Otros parametros de Configuracion",

"Provoca la visualizacion de otra pantalla donde cambiar \n"

" la configuracion de otros parametros del modem.");

break;

return 0;

/****************************************************************************

FUNCION: Salida

DESCRIPCION: Cierra la aplicacion

PARAMETROS DE ENTRADA: Funcion callback

Page 176: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 164

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK Salida (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

QuitUserInterface (0);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Boton \"SALIDA\"",

" Salida del programa.");

break;

return 0;

/****************************************************************************

FUNCION: PulsaMod

DESCRIPCION: Cambia el tipo de modulacion con el que se modulan los datos de

entrada. Los tipos de modulacion implementados en el modulador AD9853 son

FSK, QPSK y 16QAM.

PARAMETROS DE ENTRADA: Tıpicos de funciones callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaMod (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static int div_var, div_fijo, tipo_mod, factor_div, overfl;

static char txt_modo[7], modulacion, cod_dif;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_principal, PANEL_MOD_PULSA_MOD, &tipo_mod);

err = GetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, &div_var);

err = GetCtrlVal (panel_vel, PANEL_VEL_PUL_DIV_2, &div_fijo);

// Calculo del factor de division total

if (div_fijo==SI) factor_div=div_var * 2;

else factor_div=div_var;

overfl=NO;

switch (tipo_mod)

case 0: //FSK

strcpy(txt_modo, "FSK");

modulacion = FSK;

// control_modem[MODO_MOD] = 0x80;

control_modem[MODO_MOD] = control_modem[MODO_MOD] & 0x3F;

control_modem[MODO_MOD] = control_modem[MODO_MOD] | 0x80;

err = SetCtrlAttribute (panel_vel, PANEL_VEL_VALOR_DIV,

ATTR_MAX_VALUE, 2047);

break;

case 1: //QPSK

strcpy(txt_modo, "QPSK");

modulacion = QPSK;

control_modem[MODO_MOD] = control_modem[MODO_MOD] & 0x3F;

// Control de que no nos pasamos de factor de division

if (factor_div > 651 )

if (div_fijo) err = SetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, 325);

else err = SetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, 651);

err = GetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, &div_var);

overfl=SI;

err = SetCtrlAttribute (panel_vel, PANEL_VEL_VALOR_DIV,

Page 177: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 165

ATTR_MAX_VALUE, 651);

break;

case 3: //16QAM

strcpy(txt_modo, "16QAM");

modulacion = _16QAM;

control_modem[MODO_MOD] = control_modem[MODO_MOD] & 0x3F;

control_modem[MODO_MOD] = control_modem[MODO_MOD] | 0x40;

// Control de que no nos pasamos de factor de division

if (factor_div > 325 )

if (div_fijo) err = SetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, 162);

else err = SetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, 325);

err = GetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, &div_var);

overfl=SI;

err = SetCtrlAttribute (panel_vel, PANEL_VEL_VALOR_DIV,

ATTR_MAX_VALUE, 325);

break;

// Se ha de actualizar el registro dependiendo de la codificacion diferencial

PulsaCodDif (panel_scr, PANEL_SCR_PULSA_COD_DIF, EVENT_COMMIT, 0, 0, 0);

if (overfl)

switch (tipo_mod)

case 1:

MessagePopup ("Error al cambiar el tipo de modulacion",

"Se supero el valor maximo de division en QPSK.\n"

"Ajustado el divisor variable al maximo valor permitido.");

break;

case 3:

MessagePopup ("Error al cambiar el tipo de modulacion",

"Se supero el valor maximo de division en 16QAM.\n"

"Ajustado el divisor variable al maximo valor permitido.");

break;

default:

break;

// Si se dio error con el factor de division, se cambia el valor del divisor

// ahora se ejecuta en el hardware

ValorDiv (panel_vel, PANEL_VEL_VALOR_DIV, EVENT_COMMIT, 0, 0, 0);

// Programacion del hardware

prog_hard(MODO_MOD, 1);

// Entorno grafico

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_MOD_VAL, txt_modo);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: TipoScrambler

DESCRIPCION: Permite la seleccion del tipo de aleatorizador utilizado,

programando a continuacion el registro adecuado

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK TipoScrambler (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

char tipo_scr;

switch (event)

Page 178: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 166

case EVENT_COMMIT:

err = GetCtrlVal (panel_conf, PANEL_CONF_TIPO_SCRAMBLER, &tipo_scr);

switch (tipo_scr)

case 0:

control_modem[RS_t] = control_modem[RS_t] & 0xFD;

break;

case 1:

control_modem[RS_t] = control_modem[RS_t] | 0x02;

break;

// Programacion del hardware

prog_hard(RS_t, 1);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: SwitchSpectrum

DESCRIPCION: Actualiza la variable de seleccion del espectro de salida,

programando el registro implicado.

PARAMETROS DE ENTRADA: Los tıpicos de una callback.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK SwitchSpectrum (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char espectro;

switch (event)

case EVENT_COMMIT:

// Seleccion del espectro de salida

err = GetCtrlVal (panel_conf, PANEL_CONF_SWITCH_SPECTRUM, &espectro);

if (espectro == NORMAL) control_modem[CONF] = control_modem[CONF] | 0x80;

else control_modem[CONF] = control_modem[CONF] & 0x7F;

// Programacion del hardware

prog_hard(CONF, 1);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Espectro de salida",

"Seleccion del espectro: Normal Icos - Qsen; Invertido Icos + Qsen.");

break;

return 0;

/****************************************************************************

FUNCION: SwitchDac

DESCRIPCION: Permite activar o poner en modo shutdown el AD9853

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES: Ahorra energıa cuando no se necesita la se~nal de salida

****************************************************************************/

int CVICALLBACK SwitchDac (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char rf_sleep;

switch (event)

case EVENT_COMMIT:

// Modo de funcionamiento del DAC de salida

Page 179: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 167

err = GetCtrlVal (panel_conf, PANEL_CONF_SWITCH_DAC, &rf_sleep);

if (rf_sleep)

control_modem[CONF] = control_modem[CONF] & 0x87;

control_modem[CONF] = control_modem[CONF] | 0x58;

// Programacion del hardware

prog_hard(CONF, 1);

else

control_modem[CONF] = control_modem[CONF] & 0x87;

control_modem[CONF] = control_modem[CONF] | 0x20;

// Programacion del hardware

inicio = SI;

inicializa(NO); //El "NO" evita la entrada en bucle

inicio = NO;

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: ValorFrecRef

DESCRIPCION: Actualiza la presentacion de la velocidad de datos y de la

frecuencia de referencia como consecuencia de una modificacion de esta

ultima.

PARAMETROS DE ENTRADA: Los corrientes de una funcion callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK ValorFrecRef (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static double frec_ref;

switch (event)

case EVENT_COMMIT:

// Obtenemos la nueva frecuencia de referencia

err = GetCtrlVal (panel_conf, PANEL_CONF_VALOR_FREC_REF, &frec_ref);

// Reprogramacion de los registros de frecuencia segun la nueva frecuencia de ref.

ValorFrecMarca (panel_frec, PANEL_FREC_VALOR_FREC_MARCA, EVENT_COMMIT, 0, 0, 0);

ValorFrec (panel_frec, PANEL_FREC_VALOR_FREC, EVENT_COMMIT, 0, 0, 0);

ValorDiv (panel_vel, PANEL_VEL_VALOR_DIV, EVENT_COMMIT, 0, 0, 0);

// Entorno grafico en el panel informativo

err = SetCtrlVal (panel_vel, PANEL_VEL_VALOR_FREC_REF, frec_ref);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Frecuencia de Referencia",

"Este valor se debe actualizar adecuadamente cada vez que se cambie\n"

"el cristal de referencia de la placa del modem, o se utilize una frecuencia\n"

" de referencia externa distinta.");

break;

return 0;

/****************************************************************************

FUNCION: ValorFrecMarca

DESCRIPCION: Calcula el valor a programar en el registro de frecuencia

secundario utilizado en FSK, y carga el registro con el contenido

Page 180: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 168

adecuado.

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK ValorFrecMarca (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static double frec_marca, frec_ref;

switch (event)

case EVENT_COMMIT:

// Obtenemos la nueva frecuencia de referencia

err = GetCtrlVal (panel_frec, PANEL_FREC_VALOR_FREC_MARCA, &frec_marca);

err = GetCtrlVal (panel_conf, PANEL_CONF_VALOR_FREC_REF, &frec_ref);

// Carga del hardware

frec_32 (frec_marca, NRO_BITS, F1_0, frec_ref);

prog_hard(F1_0, 4);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: ValorFrec

DESCRIPCION: Calcula el valor a programar en el registro de frecuencia

y carga el registro con el contenido adecuado.

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK ValorFrec (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static double frec_sal, frec_ref;

static char txt_frec_sal[50];

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_frec, PANEL_FREC_VALOR_FREC, &frec_sal);

err = GetCtrlVal (panel_conf, PANEL_CONF_VALOR_FREC_REF, &frec_ref);

// Entorno grafico

Fmt (txt_frec_sal, "%s<%f[w14p4]", frec_sal);

if (hay_placa_mod) err = SetCtrlVal (panel_principal,

PANEL_MOD_TEXT_FREC_VAL, txt_frec_sal);

// Carga del hardware

frec_32 (frec_sal, NRO_BITS, F0_0, frec_ref);

prog_hard(F0_0, 4);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaCodDif

DESCRIPCION: Permite habilitar / deshabilitar el codificador diferencial

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaCodDif (int panel, int control, int event,

Page 181: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 169

void *callbackData, int eventData1, int eventData2)

static char txt_cod[4], cod_dif;

static int tipo_mod;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_scr, PANEL_SCR_PULSA_COD_DIF, &cod_dif);

err = GetCtrlVal (panel_principal, PANEL_MOD_PULSA_MOD, &tipo_mod);

switch (cod_dif)

case 0:

strcpy(txt_cod, "OFF");

switch (tipo_mod)

case 0: break; //FSK

default: control_modem[MODO_MOD] = control_modem[MODO_MOD] & 0xC0; break; //QPSK

break;

case 1:

strcpy(txt_cod, "ON");

switch (tipo_mod)

case 0: break; //FSK

default: control_modem[MODO_MOD] = control_modem[MODO_MOD] | 0x20; break; // DQPSK

break;

// Programacion del hardware

prog_hard(MODO_MOD, 1);

// Entorno grafico

if (hay_placa_mod) err = SetCtrlVal (panel_principal,

PANEL_MOD_TEXT_COD_VAL, txt_cod);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaScr

DESCRIPCION: Permite habilitar / deshabilitar el aleatorizador (scrambler),

programando a continuacion el registro del chip implicado

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero 0, todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaScr (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char txt_scr[4], scr;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_scr, PANEL_SCR_PULSA_SCR, &scr);

switch (scr)

case 0:

strcpy(txt_scr, "OFF");

control_modem[RS_t] = control_modem[RS_t] | 0x04;

break;

case 1:

strcpy(txt_scr, "ON");

control_modem[RS_t] = control_modem[RS_t] & 0xFB;

break;

if (hay_placa_mod) err = SetCtrlVal (panel_principal,

PANEL_MOD_TEXT_SCR_VAL, txt_scr);

// Programacion del hardware

prog_hard(RS_t, 1);

Page 182: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 170

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: ValorDiv

DESCRIPCION: Permite cambiar el valor del divisor principal para generar la

frecuencia de bit. A continuacion carga en la placa del modulador los

datos adecuados.

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK ValorDiv (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static double frec_ref, dato_clock;

static int div_var, div_fijo, tipo_mod, factor_I1I2;

static char txt_vel_datos[50], modulacion;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, &div_var);

// Demas parametros necesarios para configurar el modem a las nuevas condiciones

err = GetCtrlVal (panel_conf, PANEL_CONF_VALOR_FREC_REF, &frec_ref);

err = GetCtrlVal (panel_vel, PANEL_VEL_PUL_DIV_2, &div_fijo);

err = GetCtrlVal (panel_principal, PANEL_MOD_PULSA_MOD, &tipo_mod);

switch (tipo_mod)

case 0: modulacion = FSK; break;

case 1: modulacion = QPSK; break;

case 3: modulacion = _16QAM; break;

default: modulacion = FSK;

// Al cambiar el reloj de bit, cambia el factor de interpolacion

err = interpolador (&div_var, div_fijo, modulacion);

SetCtrlVal (panel_vel, PANEL_VEL_VALOR_DIV, div_var);

switch (err)

/* -1 Numero resultante es primo "para los interpoladores" y por tanto

corresponde a un factor de interpolacion total no valido

-2 El tipo de modulacion es FSK. En este caso la funcion no tiene

ningun efecto.

-3 El tipo de modulacion es QPSK y el valor de division total es

mayor de 651.

-4 El tipo de modulacion es 16QAM y el valor de division total es

mayor de 325. */

case -1:

MessagePopup ("Error al cambiar la velocidad de transmision",

"El comando de division es un valor no permitido.\n"

"Ajustado el factor de division total por defecto.");

break;

case -3:

MessagePopup ("Error al cambiar la velocidad de transmision",

"Se supero el valor maximo de division permitido en QPSK.\n"

"Ajustado el divisor variable al valor maximo permitido.");

break;

case -4:

MessagePopup ("Error al cambiar la velocidad de transmision",

"Se supero el valor maximo de division permitido en 16QAM.\n"

"Ajustado el divisor variable al valor maximo permitido.");

break;

Page 183: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 171

// Programacion del generador de reloj de bit

dato_clock = gen_bit_clk (div_var, div_fijo, frec_ref);

// Al cambiar la interpolacion, tambien lo hace el factor de escalado,

// con lo que se vuelven a programar los coeficientes FIR

ValorFirA0(panel_fir, PANEL_FIR_VALOR_FIR_A0, EVENT_COMMIT, 0, 0, 0);

ValorFirA1(panel_fir, PANEL_FIR_VALOR_FIR_A1, EVENT_COMMIT, 0, 0, 0);

ValorFirA2(panel_fir, PANEL_FIR_VALOR_FIR_A2, EVENT_COMMIT, 0, 0, 0);

ValorFirA3(panel_fir, PANEL_FIR_VALOR_FIR_A3, EVENT_COMMIT, 0, 0, 0);

ValorFirA4(panel_fir, PANEL_FIR_VALOR_FIR_A4, EVENT_COMMIT, 0, 0, 0);

ValorFirA5(panel_fir, PANEL_FIR_VALOR_FIR_A5, EVENT_COMMIT, 0, 0, 0);

ValorFirA6(panel_fir, PANEL_FIR_VALOR_FIR_A6, EVENT_COMMIT, 0, 0, 0);

ValorFirA7(panel_fir, PANEL_FIR_VALOR_FIR_A7, EVENT_COMMIT, 0, 0, 0);

ValorFirA8(panel_fir, PANEL_FIR_VALOR_FIR_A8, EVENT_COMMIT, 0, 0, 0);

ValorFirA9(panel_fir, PANEL_FIR_VALOR_FIR_A9, EVENT_COMMIT, 0, 0, 0);

ValorFirA10(panel_fir, PANEL_FIR_VALOR_FIR_A10, EVENT_COMMIT, 0, 0, 0);

ValorFirA11(panel_fir, PANEL_FIR_VALOR_FIR_A11, EVENT_COMMIT, 0, 0, 0);

ValorFirA12(panel_fir, PANEL_FIR_VALOR_FIR_A12, EVENT_COMMIT, 0, 0, 0);

ValorFirA13(panel_fir, PANEL_FIR_VALOR_FIR_A13, EVENT_COMMIT, 0, 0, 0);

ValorFirA14(panel_fir, PANEL_FIR_VALOR_FIR_A14, EVENT_COMMIT, 0, 0, 0);

ValorFirA15(panel_fir, PANEL_FIR_VALOR_FIR_A15, EVENT_COMMIT, 0, 0, 0);

ValorFirA16(panel_fir, PANEL_FIR_VALOR_FIR_A16, EVENT_COMMIT, 0, 0, 0);

ValorFirA17(panel_fir, PANEL_FIR_VALOR_FIR_A17, EVENT_COMMIT, 0, 0, 0);

ValorFirA18(panel_fir, PANEL_FIR_VALOR_FIR_A18, EVENT_COMMIT, 0, 0, 0);

ValorFirA19(panel_fir, PANEL_FIR_VALOR_FIR_A19, EVENT_COMMIT, 0, 0, 0);

ValorFirA20(panel_fir, PANEL_FIR_VALOR_FIR_A20, EVENT_COMMIT, 0, 0, 0);

// Programacion del hardware

prog_hard(INT1_RATE, 4);

prog_hard(CONF, 1);

// Entorno grafico

if (hay_placa_mod)

err = SetCtrlVal (panel_vel, PANEL_VEL_VALOR_VEL_DAT, dato_clock);

Fmt (txt_vel_datos, "%s<%f[w14p4]", dato_clock);

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_VEL_VAL, txt_vel_datos);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulDiv2

DESCRIPCION: Pone de manifiesto el efecto producido al activar/desactivar

mediante el puente hardware JP2 el divisor adicional por 2 en el

generador de reloj de bit.

PARAMETROS DE ENTRADA: Es una funcion callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulDiv2 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static double frec_ref, dato_clock;

static int div_var, div_fijo, tipo_mod;

static char txt_vel_datos[50], modulacion;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_vel, PANEL_VEL_PUL_DIV_2, &div_fijo);

// Demas parametros necesarios para configurar el modem a las nuevas condiciones

if (div_fijo == 1)

SetCtrlVal (panel_vel, PANEL_VEL_MENSG_2, "JP2 pines 3-4");

Page 184: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 172

SetCtrlAttribute (panel_vel, PANEL_VEL_PUL_DIV_2, ATTR_LABEL_TEXT,

"x 2");

else //div_fijo == 0

SetCtrlVal (panel_vel, PANEL_VEL_MENSG_2, "JP2 pines 1-2");

SetCtrlAttribute (panel_vel, PANEL_VEL_PUL_DIV_2, ATTR_LABEL_TEXT,

"x 1");

ValorDiv (panel_vel, PANEL_VEL_VALOR_DIV, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaFrecOk

DESCRIPCION: Oculta el panel de la sintonıa de frecuencia

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, ok

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaFrecOk (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

PulsaFrec (panel_principal, PANEL_MOD_PULSA_FREC, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaOk

DESCRIPCION: Oculta el panel de configuracion

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaOk (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

PulsaConf (panel_principal, PANEL_MOD_PULSA_CONF, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaFirOk

DESCRIPCION: Oculta el panel de programacion de los coeficientes del filtro FIR

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

Page 185: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 173

int CVICALLBACK PulsaFirOk (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

PulsaFir (panel_principal, PANEL_MOD_PULSA_FIR, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaVelOk

DESCRIPCION: Oculta el panel de programacion del generador de reloj de bit

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaVelOk (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

PulsaVel (panel_principal, PANEL_MOD_PULSA_VEL, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: PulsaScrOk

DESCRIPCION: Oculta el panel desde el que se habilitan/deshabilitan el

scrambler y el codificador diferencial

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaScrOk (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

PulsaFec (panel_principal, PANEL_MOD_PULSA_FEC, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: ValorFirAx

DESCRIPCION: Modifican el coeficiente x del filtro FIR de que consta el

modulador AD9853

PARAMETROS DE ENTRADA: Los tıpicos de las funciones Callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES:

OBSERVACIONES: Se "escala" el dato introducido en el panel frontal segun

los valores que esten programados en los dos interpoladores del integrado

****************************************************************************/

int CVICALLBACK ValorFirA0 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

Page 186: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 174

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A0, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A00_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A00_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A00_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA1 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A1, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A01_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A01_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A01_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA2 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A2, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A02_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A02_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A02_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

Page 187: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 175

int CVICALLBACK ValorFirA3 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A3, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A03_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A03_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A03_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA4 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A4, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A04_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A04_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A04_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA5 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A5, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A05_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A05_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A05_L, 2);

break;

case EVENT_RIGHT_CLICK:

Page 188: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 176

break;

return 0;

int CVICALLBACK ValorFirA6 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A6, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A06_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A06_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A06_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA7 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A7, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A07_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A07_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A07_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA8 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A8, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A08_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A08_H] = dos_bytes & 0xC0;

Page 189: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 177

// Programacion del hardware

prog_hard(FIR_A08_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA9 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A9, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A09_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A09_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A09_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA10 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A10, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A10_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A10_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A10_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA11 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A11, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

Page 190: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 178

dos_bytes = dos_bytes * esc;

control_modem[FIR_A11_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A11_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A11_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA12 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A12, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A12_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A12_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A12_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA13 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A13, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A13_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A13_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A13_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA14 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

Page 191: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 179

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A14, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A14_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A14_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A14_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA15 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A15, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A15_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A15_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A15_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA16 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A16, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A16_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A16_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A16_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA17 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

Page 192: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 180

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A17, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A17_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A17_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A17_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA18 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A18, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A18_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A18_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A18_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

int CVICALLBACK ValorFirA19 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A19, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A19_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A19_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A19_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

Page 193: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 181

int CVICALLBACK ValorFirA20 (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static short dos_bytes;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal (panel_fir, PANEL_FIR_VALOR_FIR_A20, &dos_bytes);

// Escalado del valor

dos_bytes = dos_bytes / esc_old;

dos_bytes = dos_bytes * esc;

control_modem[FIR_A20_L] = dos_bytes & 0xFF;

dos_bytes = dos_bytes >> 2;

control_modem[FIR_A20_H] = dos_bytes & 0xC0;

// Programacion del hardware

prog_hard(FIR_A20_L, 2);

break;

case EVENT_RIGHT_CLICK:

break;

return 0;

/****************************************************************************

FUNCION: Bucle

DESCRIPCION: Realiza el chequeo necesario para determinar la existencia

de la placa DDS, actuando en consecuencia sobre la interface de usuario

PARAMETROS DE ENTRADA: Funcion callback.

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: 0 OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK Bucle (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_TIMER_TICK:

hay_placa_mod = busca_equipo_mod();

if (!hay_placa_mod)

if (primer_bucle)

primer_bucle = NO; // Control de ejecucion del bucle

// Display en la pantalla de mensajes

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_FREC_2, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_FREC, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_MOD, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_VEL, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_VEL_2, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_MOD_VAL, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_FREC_VAL, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_VEL_VAL, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_SCR, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_SCR_VAL, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_COD_VAL, "");

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_COD, "");

// Mensaje de error

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_FALLO,

"Fallo del puerto de control. Imposible controlar el modulador");

// Inhabilitacion de los controles

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_MOD, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_FREC, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_FEC, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_VEL, ATTR_DIMMED, 1);

Page 194: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 182

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_FIR, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_CONF, ATTR_DIMMED, 1);

// Color de fondo del display

err = SetCtrlAttribute (panel_principal, PANEL_MOD_DISPLAY,

ATTR_FRAME_COLOR, 0x00FFFFFF);

else

if (primer_bucle == NO)

primer_bucle = SI; // Control de ejecucion del bucle

// Color de fondo del display

err = SetCtrlAttribute (panel_principal, PANEL_MOD_DISPLAY,

ATTR_FRAME_COLOR, 0x0033CC99);

// Habilitacion de los controles

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_MOD, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_FREC, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_FEC, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_VEL, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_FIR, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_principal, PANEL_MOD_PULSA_CONF, ATTR_DIMMED, 0);

// Se limpia el mensaje de error

err = SetCtrlVal (panel_principal, PANEL_MOD_TEXT_FALLO, "");

// Display

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_FREC_2);

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_FREC);

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_MOD);

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_VEL);

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_VEL_2);

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_SCR);

err = DefaultCtrl (panel_principal, PANEL_MOD_TEXT_COD);

// Inicializacion para recuperar el marco anterior

inicio = SI;

puerto_control = 1;

inicializa(SI);

inicio = NO;

break;

return 0;

Page 195: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 183

/****************************************************************************

MODULO: Recopilacion de funciones hardware para la aplicacion de control

del modulador a partir del integrado AD9853

FICHERO: mod_hard.c VERSION: 1.0

-----------------------------------------------------------------------------

AUTOR: Juan Luis Tebar FECHA: 27 de Abril del 2000

-----------------------------------------------------------------------------

DESCRIPCION:

****************************************************************************/

#include <userint.h>

#include <ansi_c.h>

#include <utility.h>

#include "DLPORTIO.h"

#include "mod_def.h" // Defines de todo el proyecto

#include "mod_hard_.h"

#include "primo_63.h" // Contiene tablas del fabricante

// Variables importadas

// caracteres reservados para el envıo de parametros a los registros del modem

extern unsigned char control_modem[74];

extern unsigned char inicio;

// Bytes utilizados para la comunicacion con el modulador. Se especifican como

// global al tenerlos que utilizar para la programacion del generador de

// reloj de bit, ademas de para controlar el modulador

extern unsigned char byte_bajo, byte_alto;

// registros del puerto paralelo

extern unsigned long pp_datos; //Normalmente solo escritura

extern unsigned long pp_estado; //lectura

extern unsigned long pp_control; //lectura y escritura, lıneas fısicas "open colector"

// Variables globales propias

double esc, esc_old;

// Codificacion de las funciones

/****************************************************************************

FUNCION: carga_pp

DESCRIPCION: Realiza la escritura de un byte en un registro de los circuitos

controlados mediante el puerto paralelo

PARAMETROS DE ENTRADA: dato: es el byte que se escribe

pcb: se refiere a la tarjeta destino: LATCH0 placa ber, LATCH1 placa mod

reg_pcb: registro concreto dentro de cada placa: CHIP0, ... , CHIP3

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES: El puerto paralelo seleccionado para el envıo depende del valor

de la variable global "puerto_control".

La escritura se realiza de forma que el valor a escribir este en el

puerto antes de activar la carga, con el objetivo de no perturbar

aquellas salidas que afecten muy directamente al funcionamiento hardware

de los circuitos.

****************************************************************************/

int carga_pp (unsigned char dato, char pcb, char reg_pcb)

static unsigned char byte;

//Escritura del dato en el puerto paralelo

DlPortWritePortUchar(pp_datos, dato);

//Seleccion del registro dentro de la placa

byte=DlPortReadPortUchar(pp_control);

byte=byte & 0xF0;

switch (reg_pcb)

case CHIP0:

byte=byte | 0x8; // Seleccion de CHIP0

DlPortWritePortUchar(pp_control, byte);

break;

case CHIP1:

byte=byte | 0xC; // Seleccion de CHIP1

Page 196: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 184

DlPortWritePortUchar(pp_control, byte);

break;

case CHIP2:

byte=byte | 0x0; // Seleccion de CHIP2 (Ya estaba seleccionado)

DlPortWritePortUchar(pp_control, byte);

break;

case CHIP3:

byte=byte | 0x4; // Seleccion de CHIP3

DlPortWritePortUchar(pp_control, byte);

break;

default: break;

// Activacion de la linea chip_select en el registro en cuestion

if (pcb==LATCH0)

byte=byte & 0xFC;

byte=byte | 0x1; // Seleccion de LATCH0

DlPortWritePortUchar(pp_control, byte);

if (pcb==LATCH1)

byte=byte & 0xFC;

byte=byte | 0x2; // Seleccion de LATCH1

DlPortWritePortUchar(pp_control, byte);

// Dejamos el registro de control con los cuatro bits a 1

// ESTE ES EL MOMENTO EN QUE VERDADERAMENTE SE GRABA EL DATO DENTRO

// DE LOS REGISTROS, PUES SE CARGAN EN EL FLANCO DE SUBIDA

byte=byte & 0xFC; // valor final de reposo

DlPortWritePortUchar(pp_control, byte);

// Queda direccionado un registro inexistente

byte=byte & 0xF0;

byte=byte | 0x4; // Seleccion de CHIP3

DlPortWritePortUchar(pp_control, byte);

return 0;

/****************************************************************************

FUNCION: carga_reg_ser

DESCRIPCION:Realiza la secuencia de seleccion de registro dentro del integrado

AD9853 para posteriormente escribir o leer datos del mismo.

PARAMETROS DE ENTRADA:

reg: Registro al que se desea acceder a continuacion.

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error, esclavo no contesta; 0 todo bien

OBSERVACIONES: En esta funcion se ejecuta la parte comun de los ciclos de

lectura y escritura del chip AD9853 tal y como se describe en la pagina

13 de las hojas de datos del fabricante

****************************************************************************/

int carga_reg_ser(char reg)

unsigned char un_byte, byte_s;

int n;

// Start.

// linea de reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a bajo

byte_alto = byte_alto & 0xBF; //Datos a uno

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

byte_alto = byte_alto | 0x40; //Datos a cero (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

Page 197: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 185

// Device Address 00000100, escritura

un_byte = 0x4;

for (n=0; n<8; n++)

// datos, empezando por el bit mas significativo

if ((un_byte & 0x80)== NO) byte_alto = byte_alto | 0x40;// cero

else byte_alto = byte_alto & 0xBF; // uno

carga_pp(byte_alto, LATCH1, CHIP1);

un_byte = un_byte << 1; // Desplazamiento a la izquierda

// linea de reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// Recepcion del acknowledge desde el modem esclavo

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// lectura de la linea de datos

byte_s=DlPortReadPortUchar(pp_estado);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

if (byte_s & 0x8) return -1; // esclavo no envio acknowledge

// Envıo del codigo de direccion del registro

un_byte = reg;

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

for (n=0; n<8; n++)

// datos, empezando por el bit mas significativo

if ((un_byte & 0x80)== NO) byte_alto = byte_alto | 0x40;// cero

else byte_alto = byte_alto & 0xBF; // uno

carga_pp(byte_alto, LATCH1, CHIP1);

un_byte = un_byte << 1; //* 0x2; // Desplazamiento a la izquierda

// linea de reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// Recepcion del acknowledge desde el modem esclavo

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// lectura de la linea de datos

byte_s=DlPortReadPortUchar(pp_estado);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

if (byte_s & 0x8) return -1; // esclavo no envio acknowledge

return 0;

/****************************************************************************

FUNCION: lee_ser

Page 198: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 186

DESCRIPCION: Realiza la secuencia de leer datos a partir del registro

seleccionado previamente con la funcion carga_reg_ser, una cantidad de

registros igual al numero de entrada

PARAMETROS DE ENTRADA:

reg_ini: registro del que se va a obtener el primer byte leıdo.

nro_reg: Numero de registros a leer a partir del cargado como direccion

en la ejecucion obligatoria anterior de la funcion carga_reg_ser.

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES: Los valores leıdos se cargan en el array de caracteres global

control_modem[], con ındice igual al del registro leıdo.

****************************************************************************/

int lee_ser(char reg_ini, char nro_reg)

unsigned char un_byte, byte_s;

int n;

char m;

// Start.

// linea de reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a bajo

byte_alto = byte_alto & 0xBF; //Datos a uno

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

byte_alto = byte_alto | 0x40; //Datos a cero (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// Device Address 00000101, lectura

un_byte = 0x5;

for (n=0; n<8; n++)

// datos, empezando por el bit mas significativo

if ((un_byte & 0x80)== NO) byte_alto = byte_alto | 0x40;// cero

else byte_alto = byte_alto & 0xBF; // uno

carga_pp(byte_alto, LATCH1, CHIP1);

un_byte = un_byte << 1; //* 0x2; // Desplazamiento a la izquierda

// linea de reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// Recepcion del acknowledge desde el modem esclavo

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// lectura de la linea de datos

byte_s=DlPortReadPortUchar(pp_estado);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

if (byte_s & 0x8) return -1; // esclavo no envio acknowledge

// Inicio del bucle de lectura que se repite tantas veces como registros

// se van a leer, y viene indicado en el parametro de entrada nro_reg

un_byte = 0x0;

for (m = reg_ini; m < (reg_ini + nro_reg); m++)

// Puesto que seguimos leyendo datos desde el slave, la lınea debe de

// seguir en alta impedancia

// lectura de un byte

Page 199: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 187

for (n=0; n<8; n++)

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// lectura de la linea de datos, empezando por el bit mas significativo

byte_s=DlPortReadPortUchar(pp_estado);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// formateo de los bits recibidos

un_byte = (byte_s & 0x8)? un_byte | 0x1 : un_byte & 0xFE;

// evitamos el ultimo desplazamiento

if (n == 7) break;

un_byte = un_byte << 1; //* 0x2;

control_modem[m] = un_byte;

un_byte = 0x0;

// anulacion del ultimo acknowledge

if (m == (reg_ini + nro_reg - 1)) break;

// Generacion del acknowledge desde el control

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a bajo

byte_alto = byte_alto | 0x40; //Datos a cero (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// No acknowledge desde el master para provocar que el modem salga del

// modo lectura

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a alto

byte_alto = byte_alto & 0xBF; //Datos a uno (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// Stop

// linea de datos a bajo

byte_alto = byte_alto | 0x40; //Datos a cero (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a alto, condicion de STOP

byte_alto = byte_alto & 0xBF; //Datos a uno (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

Page 200: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 188

return 0;

/****************************************************************************

FUNCION: escribe_ser

DESCRIPCION: Realiza la secuencia de escribir datos en los registros del

modulador AD9853 a partir del registro seleccionado previamente con la

funcion carga_reg_ser.

PARAMETROS DE ENTRADA:

reg_ini: registro donde se va a escribir el primer byte.

nro_reg: Numero de registros a escribir a partir del cargado como

direccion en la ejecucion obligatoria anterior de la funcion carga_reg_ser.

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES: Los valores a escribir son los contenidos en el array de

caracteres global control_modem[], con ındice igual al del registro

escrito.

****************************************************************************/

int escribe_ser(char reg_ini, char nro_reg)

unsigned char un_byte, byte_s;

int n;

char m;

// Inicio del bucle de escritura que se repite tantas veces como registros

// se van a escribir, y viene indicado en el parametro de entrada nro_reg

for (m = reg_ini; m < (reg_ini + nro_reg); m++)

un_byte = control_modem[m];

//Desactivacion de tri-state

byte_alto = byte_alto & 0xDF;

carga_pp(byte_alto, LATCH1, CHIP1);

for (n=0; n<8; n++)

// datos, empezando por el bit mas significativo

if ((un_byte & 0x80)== NO) byte_alto = byte_alto | 0x40;// cero

else byte_alto = byte_alto & 0xBF; // uno

carga_pp(byte_alto, LATCH1, CHIP1);

un_byte = un_byte * 0x2; // Desplazamiento a la derecha

// linea de reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// Recepcion del acknowledge desde el modem esclavo

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// lectura de la linea de datos

byte_s=DlPortReadPortUchar(pp_estado);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

if (byte_s & 0x8) return -1; // esclavo no envio acknowledge

//Desactivacion de tri-state

byte_alto = byte_alto & 0xDF;

carga_pp(byte_alto, LATCH1, CHIP1);

// Stop

// linea de datos a bajo

byte_alto = byte_alto | 0x40; //Datos a cero (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a alto

Page 201: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 189

byte_alto = byte_alto | 0x80;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a alto, condicion de STOP

byte_alto = byte_alto & 0xBF; //Datos a uno (invierte el hardware)

carga_pp(byte_alto, LATCH1, CHIP1);

// reloj a bajo

byte_alto = byte_alto & 0x7F;

carga_pp(byte_alto, LATCH1, CHIP1);

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

return 0;

/****************************************************************************

FUNCION: activa_txe

DESCRIPCION: Realiza la secuencia de activacion (puesta a uno) de la lınea TXE

del modulador AD9853. Se debe ejecutar una vez terminados de programar los

registros del integrado para habilitar el funcionamiento del mismo

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES:

****************************************************************************/

int activa_txe (void)

byte_alto = byte_alto | 0x10;

carga_pp(byte_alto, LATCH1, CHIP1);

return 0;

/****************************************************************************

FUNCION: desactiva_txe

DESCRIPCION: Realiza la desactivacion (puesta a cero) de la linea TXE de control

del modulador AD9853. Es condicion para programar los registros del chip

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES:

****************************************************************************/

int desactiva_txe (void)

byte_alto = byte_alto & 0xEF;

carga_pp(byte_alto, LATCH1, CHIP1);

return 0;

/****************************************************************************

FUNCION: reset_9853

DESCRIPCION: Realiza la secuencia de activar-desactivar la linea de reset

del modulador, como punto de partida para programar todos sus registros

a las condiciones de trabajo que se deseen

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES:

****************************************************************************/

int reset_9853(void)

byte_alto = byte_alto & 0xF7;

carga_pp(byte_alto, LATCH1, CHIP1);

Delay(0); // Regula la duracion del pulso

byte_alto = byte_alto | 0x8;

carga_pp(byte_alto, LATCH1, CHIP1);

return 0;

/****************************************************************************

FUNCION: prog_hard

DESCRIPCION: Funcion base para la programacion de los registros del integrado

Page 202: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 190

PARAMETROS DE ENTRADA: reg_ini, primer registro a partir del cual se cargaran

datos en el chip.

char nro_reg, indica la cantidad de registros que se van a programar

a partir del primero, que se inicializa mediante la variable anterior.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES:

OBSERVACIONES: Se incluye una construccion "if" para diferenciar la carga

durante la primera inicializacion, y los sucesivos cambios en la

programacion del chip.

****************************************************************************/

int prog_hard(char reg_ini, char nro_reg)

// Programacion del hardware

if (inicio)

carga_reg_ser(reg_ini);

escribe_ser(reg_ini, nro_reg);

else

desactiva_txe();

carga_reg_ser(reg_ini);

escribe_ser(reg_ini, nro_reg);

activa_txe();

return 0;

/****************************************************************************

FUNCION: inicia_hard

DESCRIPCION: Inicializacion de valores que no se modifican a lo largo de la

aplicacion por ningun otra funcion, pero que son necesarios de cargar

a los registros del AD9853.

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES:

OBSERVACIONES:

****************************************************************************/

void inicia_hard()

// Inicializacion de la memoria de configuracion

control_modem[RS_k]=0xFF;

control_modem[RS_t]=0x02; //RS OFF, Scrambler de 15 bits ON

control_modem[RAND_L]=0xFF; //Valores de inicio del scrambler todo unos

control_modem[RAND_H]=0xFF;

control_modem[LONG_PRE]=0x08; //Preambulo de 4 bits

control_modem[PRE_0]=0xAA; //10101010

control_modem[PRE_1]=0xAA; //10101010

control_modem[PRE_2]=0xAA; //10101010

control_modem[PRE_3]=0xAA; //10101010

control_modem[PRE_4]=0xAA; //10101010

control_modem[PRE_5]=0xAA; //10101010

control_modem[PRE_6]=0xAA; //10101010

control_modem[PRE_7]=0xAA; //10101010

control_modem[PRE_8]=0xAA; //10101010

control_modem[PRE_9]=0xAA; //10101010

control_modem[PRE_A]=0xAA; //10101010

control_modem[PRE_B]=0x0A; //00001010

control_modem[CONF]=0x27; // Campo clave determinante del modo de funcionamiento

control_modem[GCB]=0xAA;

/****************************************************************************

FUNCION: frec_32

DESCRIPCION: Realiza el calculo del valor a cargar en el registro de

frecuencia

PARAMETROS DE ENTRADA:

val_frec: Es el valor en Hz de la frecuencia a programar

n_bits: Numero de bits del registro donde se cargara el valor.

reg: Registro donde cargar el valor calculado. Se necesita la direccion

Page 203: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 191

"primera" del registro, es decir, la que corresponde a los bits menos

significativos: 0x16 para F0 y 0x1A para F1;

frec_ref: Valor en Hz de la frecuencia de reloj de referencia de la placa

PARAMETROS DE SALIDA: El valor calculado se graba en el array global

control_modem, que se utiliza como memoria intermedia entre las funciones

que calculan los valores y la funcion programa_hard, que es la que

realmente carga los datos en el integrado AD9853.

RESULTADO Y ERRORES: Ninguno

OBSERVACIONES: Esta funcion esta dise~nada para utilizarse en las direcciones

de los registros de frecuencia del chip. Si se ejecuta sobre otro registro

el resultado es imprevisible, ya que se carga el valor calculado sobre

ese registro.

Las direcciones de los registros de frecuencia del integrado AD9853 son:

F0: Direcciones 0x16 (lsb) hasta 0x19 (msb)

F1: Direcciones 0x1A (lsb) hasta 0x1D (msb)

****************************************************************************/

void frec_32(double val_frec, int n_bits, char reg, double frec_ref)

static unsigned int valor;

static char byte, m, n;

// Calculo del valor a programar en el registro

valor=(unsigned int)(val_frec * (pow (2.0, (double)n_bits))/(6.0 * frec_ref));

// Actualizacion de la memoria intermedia

m = reg;

for (n=0; n<4; n++, m++)

byte = valor & 0xFF;

control_modem[m] = byte;

valor = valor >> 8; //Desplazamiento a la derecha un byte

/****************************************************************************

FUNCION: gen_bit_clk

DESCRIPCION: Realiza la programacion del divisor que crea el reloj de bit

a partir de la frecuencia de referencia existente en la placa del modulador

PARAMETROS DE ENTRADA: .

div_1: numero a programar en los divisores del oscilador de referencia

div_2: util para calcular la velocidad de bit, ya que con el se incluye

el efecto de activar mediante el puente hardware JP3 3-4 la division

adicional por dos que introduce U7A.

frec_ref: double conteniendo la frecuencia de referencia utilizada

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: double con el valor final de reloj de bit programado.

OBSERVACIONES:

****************************************************************************/

double gen_bit_clk (int div_1, int div_2, double frec_ref)

static unsigned short dos_bytes;

static unsigned char un_byte;

static int factor_div, n;

static double clk_bit;

// Calculo del valor del reloj de bit

if (div_2==SI) n=2;

else n=1; //div_2==0

factor_div = div_1 * n;

clk_bit = frec_ref / (double)factor_div;

// Formateo para correcto funcionamiento del hardware

dos_bytes = (unsigned short)div_1;

dos_bytes = (dos_bytes ^ 0x7FF ) + 0x1; //Complemento a 2

// Primero se carga el byte menos significativo

byte_bajo= (unsigned char)(dos_bytes & 0xFF);

carga_pp(byte_bajo, LATCH1, CHIP0);

Delay(0.002);

Page 204: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 192

// Despues los ultimos 3 bits mas significativos

un_byte = (unsigned char)(dos_bytes >> 8) & 0x7;

byte_alto = byte_alto & 0xF8;

byte_alto = byte_alto | un_byte;

carga_pp(byte_alto, LATCH1, CHIP1);

return clk_bit;

/****************************************************************************

FUNCION: busca_esc

DESCRIPCION: Realiza una tarea de busqueda de los parametros de escalado de

la ganancia de cada etapa de interpolacion en funcion del valor de

programacion (sobremuestreo) de las mismas.

PARAMETROS DE ENTRADA: int I1, int I2, valor de la interpolacion realizada

en cada una de las etapas.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Devuelve el valor resultante de ganancia parcial

correspondiente a los dos valores calculados.

Se actualiza el valor de las variables globales control_modem[INT1_SCALE]

y control_modem[INT2_SCALE], que sirven para programar la ganancia de los

interpoladores.

OBSERVACIONES: La carga del valor al que se actualizan las dos variables

globales dentro de los registros del AD9853 es responsabilidad de la

aplicacion de usuario

****************************************************************************/

double busca_esc(int I1, int I2)

static double gain_tot, gain_1;

static char int1, int2;

gain_tot = tabla_I1[I1].nom_gain * tabla_I2[I2].nom_gain;

if (gain_tot == 1.0)

int1 = tabla_I1[I1].nominal;

int2 = tabla_I2[I2].nominal;

else

gain_tot = tabla_I1[I1].alt_gain * tabla_I2[I2].nom_gain;

gain_1 = tabla_I1[I1].nom_gain * tabla_I2[I2].alt_gain;

if ((gain_tot < 1.0) && (gain_1 < 1.0))

gain_tot = tabla_I1[I1].nom_gain * tabla_I2[I2].nom_gain;

int1 = tabla_I1[I1].nominal;

int2 = tabla_I2[I2].nominal;

else if ((gain_tot > 1.0) && (gain_1 > 1.0))

if (gain_tot < gain_1)

int1 = tabla_I1[I1].alt;

int2 = tabla_I2[I2].nominal;

else

int1 = tabla_I1[I1].nominal;

int2 = tabla_I2[I2].alt;

gain_tot = gain_1;

else

if (gain_tot > 1.0)

int1 = tabla_I1[I1].alt;

int2 = tabla_I2[I2].nominal;

else

int1 = tabla_I1[I1].nominal;

int2 = tabla_I2[I2].alt;

gain_tot = gain_1;

Page 205: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 193

control_modem[INT1_SCALE] = int1 << 3;

control_modem[INT2_SCALE] = int2 << 2;

return gain_tot;

/****************************************************************************

FUNCION: interpolador

DESCRIPCION: Calcula el valor de interpolacion de cada etapa para

sobremuestreo de los datos hasta acomodarlos a la frecuencia de reloj

del sistema dentro del AD9853

PARAMETROS DE ENTRADA: int div_1, int div_2, valores seleccionados en los

divisores.

int modulacion, tipo de modulacion seleccionada

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES:

0 No se produjo error

-1 Numero resultante es primo "para los interpoladores" y por tanto

corresponde a un factor de interpolacion total no valido

-2 El tipo de modulacion es FSK. En este caso la funcion no tiene

ningun efecto.

-3 El tipo de modulacion es QPSK y el valor de division total es

mayor de 651.

-4 El tipo de modulacion es 16QAM y el valor de division total es

mayor de 325.

El valor calculado de factor de interpolacion de cada etapa se queda

almacenado en las variables globales control_modem[INT1_RATE] y

control_modem[INT2_RATE]. La carga de estos dos valores dentro de los

registros del AD9853 es responsabilidad de la aplicacion de usuario

OBSERVACIONES: Se actualizan las variables globales esc y esc_old de

escalado de la cadena de filtro de datos, utiles para reescalar los

coefificentes de la etapa FIR y compensar de este modo el camino

completo para que la ganancia total sea 1.

****************************************************************************/

int interpolador (int *div_1, int div_2, int modulacion)

static int factor_I1I2, factor_I1, factor_I2;

static int n, hecho, correccion;

static short dos_bytes;

if (modulacion == FSK) return -2; //La funcion no tiene efecto

hecho=NO;

correccion=NO;

do

// Calculo del factor de interpolacion global

if (div_2==SI) factor_I1I2 = *div_1 * 2;

else factor_I1I2 = *div_1; // Division total realizada en generador de reloj de bit

if (modulacion == QPSK)

factor_I1I2 = factor_I1I2 * 3; //QPSK

if (factor_I1I2 > 1953)

if (div_2==SI) *div_1=325;

else *div_1=651;

correccion=33;

else

factor_I1I2 = factor_I1I2 * 6; //16QAM

if (factor_I1I2 > 1953)

if (div_2==SI) *div_1=162;

else *div_1=325;

correccion=66;

// Comprobacion de que el valor no es "primo" para los interpoladores

Page 206: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 194

for (n=0; n<229; n++)

if ((primo_63[n] < factor_I1I2)&&( factor_I1I2 < primo_63[n+1]))

hecho=SI;

break;

else if ((primo_63[n] == factor_I1I2)||(primo_63[n+1] == factor_I1I2))

correccion=SI;

*div_1= *div_1 - 1;

break;

else if (factor_I1I2>647)

correccion=SI;

*div_1= *div_1 - 1;

break;

while (!hecho);

// Calculo de los factores especıficos

factor_I1 = sqrt(factor_I1I2) + 1;

if (factor_I1 > 31) factor_I1 = 31;

for (;;factor_I1--)

factor_I2 = factor_I1I2 / factor_I1;

if ((factor_I1 * factor_I2 == factor_I1I2) || (factor_I2 > 63)) break;

factor_I2++;

if ((factor_I1 * factor_I2 == factor_I1I2) || (factor_I2 > 63)) break;

if (factor_I2 > 63) factor_I2 = 63;

// Aunque no este bien calculado, el valor se actualiza siempre

control_modem[INT1_RATE] = factor_I1 << 2;

control_modem[INT2_RATE] = factor_I2 << 1;

// Calculo de los dos factores de escala. El valor se almacena en la memoria de

// configuracion

esc_old = 1 / esc;

esc = busca_esc(factor_I1, factor_I2);

// Falta escalar los 40 coeficientes del filtro FIR

esc = 1 / esc;

// if (factor_I1 * factor_I2 != factor_I1I2) return -1;

if (correccion) return -1;

else if (correccion==33) return -3;

else if (correccion==66) return -4;

else return 0;

/****************************************************************************

FUNCION: busca_equipo_mod

DESCRIPCION: Funcion que se ejecuta unicamente para comprobar la correcta

conexion de la placa de medicion de BER

PARAMETROS DE ENTRADA:

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: int 1 si la placa funciona correctamente, 0 si no se

encuentra (porque no esta alimentada, o no conectada al puerto paralelo)

OBSERVACIONES:

****************************************************************************/

int busca_equipo_mod(void)

static unsigned char byte_s, cero, uno;

//Reescritura del byte_bajo

//carga_pp(byte_bajo, LATCH1, CHIP0);

//Escribimos cero

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

byte_alto = byte_alto | 0x40; // cero

carga_pp(byte_alto, LATCH1, CHIP1);

Page 207: PFC Modulador Digital Programable modulAD mediBER

C.1 Aplicacion modulAD 195

// lectura de la linea de datos

byte_s=DlPortReadPortUchar(pp_estado);

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

if (byte_s & 0x8) cero = MAL;

else cero = BIEN;

// Escribimos uno

byte_alto = byte_alto & 0xDF; //Desactivacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

byte_alto = byte_alto & 0xBF; // uno

carga_pp(byte_alto, LATCH1, CHIP1);

// lectura de la linea de datos

byte_s=DlPortReadPortUchar(pp_estado);

// linea de datos a alta impedancia

byte_alto = byte_alto | 0x20; //Activacion de tri-state

carga_pp(byte_alto, LATCH1, CHIP1);

if (byte_s & 0x8) uno = BIEN;

else uno = MAL;

if ((cero == MAL) || (uno == MAL)) return NO;

else return SI;

Page 208: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 196

C.2. Aplicacion mediBER

Ficheros ber.c y ber hard.c

/****************************************************************************

INTERFAZ: Fichero fuente principal de la aplicacion.

FICHERO: ber.c VERSION: 1.0

-----------------------------------------------------------------------------

AUTOR: Juan Luis Tebar FECHA: 22 Marzo del 2000

-----------------------------------------------------------------------------

DESCRIPCION: Programa de control de la place de generacion de secuencias

pseudoaleatorias y medida de tasa de BER. El control se realiza a traves

del puerto paralelo del PC.

****************************************************************************/

#include <ansi_c.h>

#include <formatio.h>

#include <cvirte.h>

#include <userint.h>

#include <utility.h>

#include "dlportio.h"

// Interfaz para acceder al hardware desde windows

#include "ber_def.h"

#include "ber.h"

#include "ber_hard.h"

//DECLARACION DE FUNCIONES

void inicializa(void);

//VARIABLES GLOBALES

static int panel_ber, panel_sec, err;

char puerto_control;

double tiempo_fin_test, tiempo_test;

// Envıo de parametros a los registros del chip DS2172

unsigned char control_bert[29];

// Bytes utilizados para la comunicacion con la placa de BERT.

unsigned char byte_control, byte_datos;

// registros del puerto paralelo

unsigned long pp_datos; //Normalmente solo escritura

unsigned long pp_estado; //lectura

unsigned long pp_control; //lectura y escritura

// Variables de ajuste dentro del bucle periodico. Se hacen globales para poder

// controlar el punto de ejecucion al seleccionar algunas opciones de operacion

char hay_test, cambio_sec, primer_seg;

// Variables pasadas a globales para la generacion del fichero de report

int err_ins;

double es, ses, dm, ber, esr, sesr, dmr, n_canales;

double bits_rx_total, bits_err_total, vel_datos;

// Paso de la secuencia de usuario al modulo hardware

unsigned long sec_usuario;

// Comprobacion de la existencia fısica de la placa

char hay_placa_ber, primer_bucle;

int main (int argc, char *argv[])

// Inicio estandar de Labwindows y carga de los paneles de la aplicacion

if (InitCVIRTE (0, argv, 0) == 0)

return -1; /* out of memory */

if ((panel_ber = LoadPanel (0, "ber.uir", BER)) < 0)

return -1;

if ((panel_sec = LoadPanel (0, "ber.uir", SEC)) < 0)

return -1;

Page 209: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 197

// Utilizamos el puerto paralelo LPT1

puerto_control = 1;

inicializa();

// Consideramos que la placa esta correctamente conectada en principio

hay_placa_ber = SI;

primer_bucle = SI;

// Inicio y actualizacion de las variables del entorno grafico

hay_test = NO;

cambio_sec = NO;

TipoSecuencia(panel_ber, BER_TIPO_SECUENCIA, EVENT_COMMIT, 0, 0, 0);

DuracionTest(panel_ber, BER_DURACION_TEST, EVENT_COMMIT, 0, 0, 0);

ErrorAuto(panel_ber, BER_ERROR_AUTO, EVENT_COMMIT, 0, 0, 0);

StringSec(panel_ber, BER_TIPO_SECUENCIA, EVENT_COMMIT, 0, 0, 0);

// Arranque del entorno

DisplayPanel (panel_ber);

RunUserInterface ();

return 0;

/****************************************************************************

DESCRIPCION DE LAS FUNCIONES

****************************************************************************/

/****************************************************************************

FUNCION: inicializa

DESCRIPCION: Realiza la secuencia de inicializacion de la aplicacion

PARAMETROS DE ENTRADA: No

PARAMETROS DE SALIDA: No

RESULTADO Y ERRORES: Ninguno

OBSERVACIONES:

****************************************************************************/

void inicializa(void)

unsigned char byte, n;

// Seleccion del puerto paralelo de control

if (puerto_control==1) pp_datos=LPT1;

else pp_datos=LPT2;

pp_estado=pp_datos+1;

pp_control=pp_datos+2;

// Inicializacion del puerto paralelo

byte=0x0;

DlPortWritePortUchar(pp_datos, byte);

byte=DlPortReadPortUchar(pp_estado);

byte=DlPortReadPortUchar(pp_control);

byte=byte & 0xF0;

byte=byte | 0x8;

DlPortWritePortUchar(pp_control, byte);

// Arranque inicial del bert. Para que se cargen los parametros por defecto

inicia_hard_bert();

/****************************************************************************

DESCRIPCION DE FUNCIONES CVICALLBACK

****************************************************************************/

/****************************************************************************

FUNCION: TipoSecuencia

DESCRIPCION: Selector de la secuencia utilizada al realizar el test de BER

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES: Si se cambia de secuencia mientras el test esta arrancado,

este se vuelve a reiniciar.

****************************************************************************/

Page 210: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 198

int CVICALLBACK TipoSecuencia (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static int secuencia, habia_test;

if (hay_test) habia_test=SI;

else habia_test=NO;

switch (event)

case EVENT_COMMIT:

// Cambio de variable para mensajes

cambio_sec = SI;

// Se detiene el test para reprogramar

StopTest(panel_ber, BER_STOP_TEST, EVENT_COMMIT, 0, 0, 0);

// Actualizacion de la configuracion del bert

err = GetCtrlVal(panel_ber, BER_TIPO_SECUENCIA, &secuencia);

prog_sec(secuencia, sec_usuario);

// Si el test estaba corriendo se reinicia

if (habia_test) IniciaTest(panel_ber, BER_RUN_TEST, EVENT_COMMIT, 0, 0, 0);

// Cambio de variable para mensajes

cambio_sec = NO;

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Selector de \"Secuencia patron\"",

"Permite la seleccion de la secuencia pseudoaleatoria o repetitiva\n"

"con la que se trabajara al realizar el tests.");

break;

return 0;

/****************************************************************************

FUNCION: DuracionTest

DESCRIPCION: Seleccion de la duracion del test

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES: Actualizacion de la variable global que gobierna la duracion

de los test "tiempo_fin_test"

****************************************************************************/

int CVICALLBACK DuracionTest (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static int min_test;

switch (event)

case EVENT_COMMIT:

// Lectura del valor seleccionado.

err = GetCtrlVal(panel_ber, BER_DURACION_TEST, &min_test);

// Actualizacion de la variable global (representa el tiempo en

// segundos)

tiempo_fin_test = 60.0 * min_test;

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Selector de \"Duracion del test\"",

"Seleccion del tiempo durante el que se realiza la prueba\n"

"de BER de entre unos perıodos determinados.");

break;

return 0;

/****************************************************************************

FUNCION: ErrorAuto

DESCRIPCION: Activa en el DS2172 la insercion automatica de errores para

obtener una tasa de BER determinada

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

Page 211: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 199

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK ErrorAuto (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static unsigned char valor_err_auto;

switch (event)

case EVENT_COMMIT:

// Lectura del valor seleccionado.

err = GetCtrlVal(panel_ber, BER_ERROR_AUTO, &valor_err_auto);

error_auto(valor_err_auto);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Selector de \"Errores automaticos\"",

"Produccion automatica de errores hasta "

"conseguir la tasa de BER indicada.");

break;

return 0;

/****************************************************************************

FUNCION: SecUser

DESCRIPCION: Hace visible u oculta el panel donde se programa la secuencia

repetitiva de usuario.

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK SecUser (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char panel_visible;

switch (event)

case EVENT_COMMIT:

if (panel_visible)

HidePanel(panel_sec);

panel_visible = NO;

else

DisplayPanel (panel_sec);

panel_visible = SI;

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"Secuencia usuario\"",

"Hace visible u oculta el panel de seleccion de la secuencia "

"repetitiva de usuario.");

break;

return 0;

/****************************************************************************

FUNCION: InsertaError

DESCRIPCION: Provoca la insercion o transmision intencionada de un unico

error en la secuencia de salida.

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK InsertaError (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

Page 212: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 200

switch (event)

case EVENT_COMMIT:

if (hay_test)

inserta_error();

err_ins++; //Contador para informes

SetCtrlVal (panel_ber, BER_EVENTOS,

"\nError insertado por el usuario");

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"Insertar error\"",

"Insercion manual de un error en la secuencia de salida.");

break;

return 0;

/****************************************************************************

FUNCION: GrabaRes

DESCRIPCION: Genera un fichero de texto a modo de informe con los resultados

que actualente presentan los indicadores de la aplicacion.

PARAMETROS DE ENTRADA: Funcion callback

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES: El fichero generado se crea en modo escritura, de modo que si

existe un fichero anterior con el mismo nombre se perdera este ultimo.

****************************************************************************/

int CVICALLBACK GrabaRes (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char nombre_file[MAX_PATHNAME_LEN], proj_dir[MAX_PATHNAME_LEN];

static int pfile;

static char aux[MAX_LONG_STRING];

static int index;

switch (event)

case EVENT_COMMIT:

GetProjectDir (proj_dir);

if (FileSelectPopup (proj_dir, "*.txt", "*.txt",

"Nombre del Fichero de Informe",

VAL_OK_BUTTON, 0, 1, 1, 0, nombre_file) > 0)

// Abrimos el fichero donde se grabaran los resultados del test

pfile = OpenFile(nombre_file, VAL_READ_WRITE, VAL_TRUNCATE, VAL_ASCII);

// Texto del fichero de resultados del test

FmtFile (pfile, "%s",

"\tRESULTADOS DE LA PRUEBA DE MEDIDA DE TASA DE BER\n\n\n");

FmtFile (pfile, "%s<%s%s%s",

"Fecha del test (mes-dıa-a~no):\t\t\t", DateStr (), "\n");

FmtFile (pfile, "%s<%s%s%s",

"Hora del test:\t\t\t\t\t", TimeStr (), "\n\n");

// Valores programados

err = GetCtrlIndex (panel_ber, BER_TIPO_SECUENCIA, &index);

err = GetLabelFromIndex (panel_ber, BER_TIPO_SECUENCIA, index, aux);

FmtFile (pfile, "%s<%s%s%s",

"Tipo de secuencia utilizada:\t\t\t", aux, "\n");

err = GetCtrlIndex (panel_ber, BER_DURACION_TEST, &index);

err = GetLabelFromIndex (panel_ber, BER_DURACION_TEST, index, aux);

FmtFile (pfile, "%s<%s%s%s",

"Tiempo de duracion programada del test:\t\t", aux, "\n");

err = GetCtrlIndex (panel_ber, BER_ERROR_AUTO, &index);

err = GetLabelFromIndex (panel_ber, BER_ERROR_AUTO, index, aux);

FmtFile (pfile, "%s<%s%s%s",

"Insercion de errores automaticos:\t\t", aux, "\n\n");

Page 213: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 201

// Datos de interes

err = GetCtrlVal (panel_sec, SEC_STRING_SEC, aux);

FmtFile (pfile, "%s<%s%s%s",

"Secuencia de usuario programada:\t\t", aux, "\n");

Fmt (aux, "%s<%d", err_ins);

FmtFile (pfile, "%s<%s%s%s",

"Errores insertados manualmente:\t\t\t", aux, "\n\n");

// Valores resultantes

err = GetCtrlVal (panel_ber, BER_IND_TIEMPO_TEST, aux);

FmtFile (pfile, "%s<%s%s%s",

"Tiempo de duracion real del test:\t\t", aux, "\n");

err = GetCtrlVal (panel_ber, BER_IND_TIEMPO_DISPON, aux);

FmtFile (pfile, "%s<%s%s%s",

"Tiempo de disponibilidad durante test:\t\t", aux, "\n");

// Fmt (aux, "%s<%f[p1]", vel_datos);

// FmtFile (pfile, "%s<%s%s%s%s",

// "Velocidad estimada de transmision de datos:\t", aux, " bps", "\n");

Fmt (aux, "%s<%f[p0]", bits_rx_total);

FmtFile (pfile, "%s<%s%s%s",

"Numero total de bits recibidos:\t\t\t", aux, "\n");

Fmt (aux, "%s<%f[p0]", bits_err_total);

FmtFile (pfile, "%s<%s%s%s",

"Numero total de bits erroneos:\t\t\t", aux, "\n\n");

Fmt (aux, "%s<%f[p2]", es);

FmtFile (pfile, "%s<%s%s%s",

"Numero de segundos erroneos (ES):\t\t", aux, "\n");

Fmt (aux, "%s<%f[b4p2r]%s", esr, " %");

FmtFile (pfile, "%s<%s%s%s",

"% de segundos erroneos (ES):\t\t\t", aux, "\n");

Fmt (aux, "%s<%f[p0]", ses);

FmtFile (pfile, "%s<%s%s%s",

"Numero de segundos severamente erroneos (SES):\t", aux, "\n");

Fmt (aux, "%s<%f[b4p2r]%s", sesr, " %");

FmtFile (pfile, "%s<%s%s%s",

"% de segundos severamente erroneos (SES):\t", aux, "\n");

Fmt (aux, "%s<%f[p0]", dm);

FmtFile (pfile, "%s<%s%s%s",

"Numero de minutos degradados (DM):\t\t", aux, "\n");

Fmt (aux, "%s<%f[b4p2r]%s", dmr, " %");

FmtFile (pfile, "%s<%s%s%s",

"% de minutos degradados (DM):\t\t\t", aux, "\n\n");

Fmt (aux, "%s<%f[b4p4e2]", ber);

FmtFile (pfile, "%s<%s%s%s",

"Tasa de bits erroneos (BER):\t\t\t", aux, "\n");

err = CloseFile (pfile);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"Grabar resultados\"",

"Generacion de un fichero de texto con los resultados del test.");

break;

return 0;

Page 214: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 202

/****************************************************************************

FUNCION: IniciaTest

DESCRIPCION: Activacion de las medidas.

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK IniciaTest (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

// Actualizacion de variables del entorno

hay_test = SI;

primer_seg = SI;

// Inicio del contador de errores manuales para report

err_ins = 0;

// Detalles del entorno grafico

if (cambio_sec == NO)

ResetTextBox (panel_ber, BER_EVENTOS, "");

SetCtrlVal (panel_ber, BER_EVENTOS,

"Test iniciado por el usuario\n");

if (cambio_sec == SI)

ResetTextBox (panel_ber, BER_EVENTOS, "");

SetCtrlVal (panel_ber, BER_EVENTOS,

"Test iniciado por cambio en la secuencia utilizada\n");

DefaultCtrl (panel_ber, BER_IND_TIEMPO_TEST);

DefaultCtrl (panel_ber, BER_IND_TIEMPO_DISPON);

DefaultCtrl (panel_ber, BER_IND_NRO_BITS);

DefaultCtrl (panel_ber, BER_IND_NRO_BITS_ERR);

DefaultCtrl (panel_ber, BER_IND_ES);

DefaultCtrl (panel_ber, BER_IND_SES);

DefaultCtrl (panel_ber, BER_IND_DM);

DefaultCtrl (panel_ber, BER_IND_BER);

// Cambios hardware para activar el test

inicia_test();

// Se resetea el temporizador

ResetTimer (panel_ber, BER_TIMER);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"Iniciar Test\"",

"Activacion de la secuencia de salida e inicio de las medidas.");

break;

return 0;

/****************************************************************************

FUNCION: StopTest

DESCRIPCION: Finalizacion de las medidas.

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK StopTest (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

// Cambios hardware para detener el test

stop_test();

Page 215: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 203

// Control de los mensajes

if (hay_test)

if (tiempo_test < tiempo_fin_test)

if (cambio_sec == NO) SetCtrlVal (panel_ber, BER_EVENTOS,

"\nTest detenido por el usuario");

// Actualizacion de variables del entorno

hay_test = NO;

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"Detener Test\"",

"Desactivacion de la secuencia de salida y fin de las medidas.");

break;

return 0;

/****************************************************************************

FUNCION: Salida

DESCRIPCION: Finaliza la aplicacion

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK Salida (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

QuitUserInterface (0);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"Salida Programa\"",

"Fin de aplicacion y cierre del entorno grafico.");

break;

return 0;

/****************************************************************************

FUNCION: StringSec

DESCRIPCION: Entrada de la secuencia arbitraria de ususario

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK StringSec (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static char sec[9], mensaje[80], *fin;

static double valor;

static int secuencia;

switch (event)

case EVENT_COMMIT:

err = GetCtrlVal(panel_sec, SEC_STRING_SEC, sec);

sec_usuario = strtoul (sec, &fin, 16);

if (*fin != NULL)

sprintf(mensaje,

"El valor %s no se puede convertir a numero hexadecimal", fin);

MessagePopup ("¡ Error al convertir la secuencia !", mensaje);

DefaultCtrl (panel_sec, SEC_STRING_SEC);

err = GetCtrlVal(panel_ber, BER_TIPO_SECUENCIA, &secuencia);

if (secuencia == 34) TipoSecuencia(panel_ber,

Page 216: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 204

BER_TIPO_SECUENCIA, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Selector de \"Secuencia de usuario\"",

"Permite la introduccion de la secuencia repetitiva que se "

"usa al seleccionar \nel \"Patron de usuario\" en el selector "

"de secuencia patron.");

break;

return 0;

/****************************************************************************

FUNCION: PulsaSecOk

DESCRIPCION: Cierra el panel de seleccion de la secuencia de usuario

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES:

****************************************************************************/

int CVICALLBACK PulsaSecOk (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

switch (event)

case EVENT_COMMIT:

SecUser (panel_ber, BER_PUL_SEC_USER, EVENT_COMMIT, 0, 0, 0);

break;

case EVENT_RIGHT_CLICK:

MessagePopup ("Pulsador \"CERRAR\"",

"Cierre del panel de seleccion de la secuencia de usuario.");

break;

return 0;

/****************************************************************************

FUNCION: Bucle

DESCRIPCION: Funcion principal de la aplicacion. Se ejecuta automaticamente

cada segundo, y en ella se realizan varias tareas importantes como la

medicion de bits y errores recibidos para calcular todos los indicadores

del test, ası como la vigilancia para determinar si la placa de hardware

esta correctamente controlada

PARAMETROS DE ENTRADA: Los tıpicos de las funciones callback de Labwindows

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0 todo OK

OBSERVACIONES: Si se determina que la placa no se puede controlar, se detiene

el test y se inhabilitan los controles del entorno grafico.

Los resultados calculados de tasa de BER y demas inicadores se

almacenan en variables globales para poder ser recuperadas al generar el

fichero de informe.

****************************************************************************/

int CVICALLBACK Bucle (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

static double seg, min_t, min, horas_t, horas, dias;

static double tiempo_dis;

static double seg_dis, min_t_dis, min_dis, horas_t_dis, horas_dis, dias_dis;

static char txt_tiempo_test[40], txt_tiempo_dis[40],

txt_bits_rx[40], txt_bits_err[40];

static char txt_es[40], txt_ses[40], txt_dm[40], txt_ber[40];

//Se hacen globales para poder generar el fichero de report

// static double es, ses, dm, ber, esr, sesr, dmr;

static int secuencia;

static t_datos datos_estado;

static double bits_rx_dis[10], bits_err_dis[10], bits_rx_dm[60], bits_err_dm[60];

Page 217: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 205

//Se hacen globales para generar el fichero de report

// static double bits_rx_total, bits_err_total;

static double ber_i, bits_rx_acumul, bits_err_acumul, es_acumul, es_mx[10];

static char es_i, ses_i, ses_acumul, ses_mx[10], n, index_dm;

static char alarma, disponibilidad, cambio_periodo, periodo_anterior;

static double ber_60, bits_rx_60, bits_err_60;

// Adaptacion de la aplicacion a velocidades de transmision mayores de 64 kbps

static double es_i_0;

if (event == EVENT_TIMER_TICK)

hay_placa_ber = busca_equipo_ber();

if (hay_placa_ber)

if (primer_bucle == NO)

primer_bucle = SI; // Control de ejecucion del bucle

// Display en la pantalla de mensajes

SetCtrlVal (panel_ber, BER_EVENTOS,

"\nRecuperado el control de la placa de BER\n\n");

// Habilitacion de los controles

err = SetCtrlAttribute (panel_ber, BER_TIPO_SECUENCIA, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_DURACION_TEST, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_ERROR_AUTO, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_RUN_TEST, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_STOP_TEST, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_PUL_INSERT_ERR, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_PUL_SEC_USER, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_LED_SINCRO, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_LED_UNOS, ATTR_DIMMED, 0);

err = SetCtrlAttribute (panel_ber, BER_LED_CEROS, ATTR_DIMMED, 0);

switch (hay_test)

case SI:

tiempo_test++;

GetCtrlVal(panel_ber, BER_TIPO_SECUENCIA, &secuencia);

// Deshecho de la primera lectura de informacion desde el chip

if (primer_seg)

primer_seg = NO;

cambio_periodo = NO;

// Limpiamos los registros del integrado

aplicacion_bert(&datos_estado, secuencia);

// Inicializamos las variables de estadıstica

tiempo_test = tiempo_dis = 0.0;

datos_estado.bits_rx = 0.0;

datos_estado.bits_err = 0.0;

es = ses = dm = ber = bits_rx_total = bits_err_total = 0.0;

ber_i = ber_60 = 0.0;

disponibilidad = SI;

// Indica estado de disponibilidad del segundo anterior

periodo_anterior = DISPONIBLE;

for (n=0; n<10; n++)

ses_mx[n] = 0;

es_mx[n] = 0;

bits_rx_dis[n] = 0.0;

bits_err_dis[n] = 0.0;

// Inicializacion del almacenamiento de datos para determinacion

//de la proporcion de minutos degradados

index_dm = 0;

n_canales = 1; // Evita fallo al inicio del test

break;

// Resto del tiempo del test

// Lectura de registros del hardware

Page 218: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 206

alarma = !aplicacion_bert(&datos_estado, secuencia);

// Calculo del parametros instantaneos

ber_i = datos_estado.bits_err / datos_estado.bits_rx;

ses_i = (alarma || (ber_i > 0.001))? 1 : 0;

es_i = (datos_estado.bits_err > 0.0)? 1 : 0;

// Se pondera para velocidades de transmision altas

es_i_0 = datos_estado.bits_err / n_canales;

es_i_0 = (es_i_0 > 1.0 )? 1.0 : es_i_0;

// Almacenamiento de datos para posterior procesado en estadısticas

for (n=8, ses_acumul=0, es_acumul=0, bits_rx_acumul=0.0,

bits_err_acumul=0.0 ; n>=0; n--)

ses_mx[n+1] = ses_mx[n];

ses_acumul = ses_acumul + ses_mx[n];

es_mx[n+1] = es_mx[n];

es_acumul = es_acumul + es_mx[n];

bits_rx_dis[n+1] = bits_rx_dis[n];

bits_rx_acumul = bits_rx_acumul + bits_rx_dis[n];

bits_err_dis[n+1] = bits_err_dis[n];

bits_err_acumul = bits_err_acumul + bits_err_dis[n];

ses_mx[0] = ses_i;

ses_acumul = ses_acumul + ses_mx[0];

es_mx[0] = es_i_0; //es_i;

es_acumul = es_acumul + es_mx[0];

bits_rx_dis[0] = datos_estado.bits_rx;

bits_rx_acumul = bits_rx_acumul + bits_rx_dis[0];

bits_err_dis[0] = datos_estado.bits_err;

bits_err_acumul = bits_err_acumul + bits_err_dis[0];

// Determinacion de la disponibilidad del enlace

if (disponibilidad) disponibilidad = (ses_acumul >= 10)? NO : SI;

else disponibilidad = (ses_acumul == 0)? SI : NO;

if (disponibilidad)

switch (periodo_anterior)

case DISPONIBLE:

tiempo_dis++;

es = es + es_i_0; //(double)es_i;

ses = ses + (double)ses_i;

// Calculo del ber

bits_rx_total = bits_rx_total + datos_estado.bits_rx;

bits_err_total = bits_err_total + datos_estado.bits_err;

ber = bits_err_total / bits_rx_total;

// Almacenamiento para tasa de DM

if (!ses_i)

bits_rx_dm[index_dm] = datos_estado.bits_rx;

bits_err_dm[index_dm] = datos_estado.bits_err;

index_dm++;

if (index_dm == 59)

index_dm = 0;

for ( n=0, bits_rx_60=0.0, bits_err_60=0.0; n<60;

n++)

bits_rx_60 = bits_rx_60 + bits_rx_dm[n];

bits_err_60 = bits_err_60 + bits_err_dm[n];

ber_60 = bits_err_60 / bits_rx_60;

if (ber_60 > 0.000001) dm = dm + 1.0;

break;

case NO_DISPONIBLE:

// Los 10 segundos anteriores se suman a las estadısticas

tiempo_dis = tiempo_dis + 10.0;

es = es + es_acumul;

ses = ses + (double)ses_acumul; //ses_acumul debe ser cero

// Calculo del ber

bits_rx_total = bits_rx_total + bits_rx_acumul;

Page 219: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 207

bits_err_total = bits_err_total + bits_err_acumul;

ber = bits_err_total / bits_rx_total;

// Datos para la tasa de DM, contando los 10 seg anteriores

for ( n=0; n<10; n++)

bits_rx_dm[index_dm] = bits_rx_dis[n];

bits_err_dm[index_dm] = bits_err_dis[n];

index_dm++;

if (index_dm == 59)

index_dm = 0;

for ( n=0, bits_rx_60=0.0, bits_err_60=0.0; n<60; n++)

bits_rx_60 = bits_rx_60 + bits_rx_dm[n];

bits_err_60 = bits_err_60 + bits_err_dm[n];

ber_60 = bits_err_60 / bits_rx_60;

if (ber_60 > 0.000001) dm = dm + 1.0;

break;

periodo_anterior = DISPONIBLE;

// Display en la pantalla de mensajes

SetCtrlVal (panel_ber, BER_EVENTOS, " * ");

else // No hay disponibilidad

switch (periodo_anterior)

case DISPONIBLE:

// Los 10 segundos anteriores se eliminan de las estadısticas

tiempo_dis = tiempo_dis - 9.0;

es = es + es_i_0 - es_acumul;//(double)es_i;

ses = ses + (double)ses_i - (double)ses_acumul;

// Calculo del ber

bits_rx_total = bits_rx_total + datos_estado.bits_rx

- bits_rx_acumul;

bits_err_total = bits_err_total + datos_estado.bits_err

- bits_err_acumul;

ber = bits_err_total / bits_rx_total;

break;

case NO_DISPONIBLE:

// Todo sigue igual

break;

periodo_anterior = NO_DISPONIBLE;

// Display en la pantalla de mensajes

SetCtrlVal (panel_ber, BER_EVENTOS, "\nEsperando disponibilidad");

// Colores de leds

alarma ? SetCtrlVal (panel_ber, BER_LED_SINCRO, OFF)

: SetCtrlVal (panel_ber, BER_LED_SINCRO, ON);

datos_estado.todo_1 ? SetCtrlVal (panel_ber, BER_LED_UNOS, ON)

: SetCtrlVal (panel_ber, BER_LED_UNOS, OFF);

datos_estado.todo_0 ? SetCtrlVal (panel_ber, BER_LED_CEROS, ON)

: SetCtrlVal (panel_ber, BER_LED_CEROS, OFF);

// Calculo del tiempo de test en dias, horas, minutos y segundos

seg = fmod (tiempo_test, 60.0);

min_t = (tiempo_test - seg ) / 60.0;

min = fmod (min_t, 60.0);

horas_t = (min_t - min) / 60.0;

horas = fmod (horas_t , 24.0);

dias = (horas_t - horas) / 24.0;

// Presentacion de tiempo de duracion del test

DefaultCtrl (panel_ber, BER_IND_TIEMPO_TEST);

Fmt (txt_tiempo_test, "%s<%f[w1p0]%s%f[w2p0]%s%f[w2p0]%s%f[w2p0]%s",

dias, "d ", horas, "h ", min, "m ", seg, "s");

err = SetCtrlVal (panel_ber, BER_IND_TIEMPO_TEST, txt_tiempo_test);

// Si se alcanza el tiempo final, el test se para

Page 220: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 208

if (tiempo_test >= tiempo_fin_test)

StopTest(panel_ber, BER_STOP_TEST, EVENT_COMMIT, 0, 0, 0);

SetCtrlVal (panel_ber, BER_EVENTOS, "\nTest finalizado");

// Lo mismo para el tiempo de disponibilidad

seg_dis = fmod (tiempo_dis, 60.0);

min_t_dis = (tiempo_dis - seg_dis ) / 60.0;

min_dis = fmod (min_t_dis, 60.0);

horas_t_dis = (min_t_dis - min_dis) / 60.0;

horas_dis = fmod (horas_t_dis , 24.0);

dias_dis = (horas_t_dis - horas_dis) / 24.0;

// Presentacion de tiempo de disponibilidad durante el test

DefaultCtrl (panel_ber, BER_IND_TIEMPO_DISPON);

Fmt (txt_tiempo_dis, "%s<%f[w1p0]%s%f[w2p0]%s%f[w2p0]%s%f[w2p0]%s",

dias_dis, "d ", horas_dis, "h ", min_dis, "m ", seg_dis, "s");

err = SetCtrlVal (panel_ber, BER_IND_TIEMPO_DISPON, txt_tiempo_dis);

// TASA ESR, SESR y DMR

esr = (es * 100) / tiempo_dis;

sesr =(ses * 100) / tiempo_dis;

dmr =(dm * 100) / (tiempo_dis / 60.0);

// Calculo de la velocidad de transmision

vel_datos = bits_rx_total / tiempo_dis;

n_canales = vel_datos / 64000.0;

// Entorno grafico

DefaultCtrl (panel_ber, BER_IND_NRO_BITS);

Fmt (txt_bits_rx, "%s<%f[b4p6e2]", bits_rx_total);

err = SetCtrlVal (panel_ber, BER_IND_NRO_BITS, txt_bits_rx);

DefaultCtrl (panel_ber, BER_IND_NRO_BITS_ERR);

Fmt (txt_bits_err, "%s<%f[b4p6e2]", bits_err_total);

err = SetCtrlVal (panel_ber, BER_IND_NRO_BITS_ERR, txt_bits_err);

DefaultCtrl (panel_ber, BER_IND_ES);

Fmt (txt_es, "%s<%f[p1e1]%s%f[b4p2r]%s", es, " ", esr, "%");

err = SetCtrlVal (panel_ber, BER_IND_ES, txt_es);

DefaultCtrl (panel_ber, BER_IND_SES);

Fmt (txt_ses, "%s<%f[p1e1]%s%f[b4p3r]%s", ses, " ", sesr, "%");

err = SetCtrlVal (panel_ber, BER_IND_SES, txt_ses);

DefaultCtrl (panel_ber, BER_IND_DM);

Fmt (txt_dm, "%s<%f[p1e1]%s%f[b4p2r]%s", dm, " ", dmr, "%");

err = SetCtrlVal (panel_ber, BER_IND_DM, txt_dm);

DefaultCtrl (panel_ber, BER_IND_BER);

Fmt (txt_ber, "%s<%f[b4p4e2]", ber);

err = SetCtrlVal (panel_ber, BER_IND_BER, txt_ber);

break;

case NO: // No hay test

// Colores de leds

SetCtrlVal (panel_ber, BER_LED_SINCRO, OFF);

SetCtrlVal (panel_ber, BER_LED_UNOS, OFF);

SetCtrlVal (panel_ber, BER_LED_CEROS, OFF);

break;

else // !hay_placa_ber

if (primer_bucle)

primer_bucle = NO; // Control de ejecucion del bucle

// Display en la pantalla de mensajes

ResetTextBox (panel_ber, BER_EVENTOS, "");

SetCtrlVal (panel_ber, BER_EVENTOS,

"Fallo del puerto de control.\nImposible controlar la placa de BER\n");

Page 221: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 209

// Inhabilitacion de los controles

err = SetCtrlAttribute (panel_ber, BER_TIPO_SECUENCIA, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_DURACION_TEST, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_ERROR_AUTO, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_RUN_TEST, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_STOP_TEST, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_PUL_INSERT_ERR, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_PUL_SEC_USER, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_LED_SINCRO, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_LED_UNOS, ATTR_DIMMED, 1);

err = SetCtrlAttribute (panel_ber, BER_LED_CEROS, ATTR_DIMMED, 1);

return 0;

Page 222: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 210

/****************************************************************************

MODULO: Recopilacion de funciones hardware para la aplicacion de control

del generador de secuencias pseudoaleatorias a partir del DS2172

FICHERO: ber_hard.c VERSION: 1.0

-----------------------------------------------------------------------------

AUTOR: Juan Luis Tebar Garcıa [email protected]

FECHA: 27 de Abril del 2000

-----------------------------------------------------------------------------

DESCRIPCION:

****************************************************************************/

#include <userint.h>

#include <ansi_c.h>

#include <utility.h>

#include "dlportio.h"

#include "ber_def.h"

// Defines de todo el proyecto

#include "ber_hard.h"

// Variables importadas del modulo principal

// Caracteres reservados para el envıo de parametros a los registros del chip DS2172

extern unsigned char control_bert[29];

// Bytes utilizados para la comunicacion con el modulador. Se especifican como

// global al tenerlos que utilizar para la programacion del generador de

// reloj de bit, ademas de para controlar el modulador

extern unsigned char byte_control, byte_datos;

// registros del puerto paralelo

extern unsigned long pp_datos; //Normalmente solo escritura

extern unsigned long pp_estado; //lectura

extern unsigned long pp_control; //lectura y escritura

// Codificacion de las funciones

/****************************************************************************

FUNCION: carga_pp

DESCRIPCION: Realiza la escritura de un byte en un registro de los circuitos

controlados mediante el puerto paralelo

PARAMETROS DE ENTRADA: dato: es el byte que se escribe

pcb: se refiere a la tarjeta destino: LATCH0 placa ber, LATCH1 placa mod

reg_pcb: registro concreto dentro de cada placa: CHIP0, ... , CHIP3

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES: El puerto paralelo seleccionado para el envıo depende del valor

de la variable global "puerto_control".

La escritura se realiza de forma que el valor a escribir este en el

puerto antes de activar la carga, con el objetivo de no perturbar

aquellas salidas que afecten muy directamente al funcionamiento hardware

de los circuitos.

****************************************************************************/

int carga_pp (unsigned char dato, char pcb, char reg_pcb)

static unsigned char byte;

//Escritura del dato en el puerto paralelo

DlPortWritePortUchar(pp_datos, dato);

//Seleccion del registro dentro de la placa

byte=DlPortReadPortUchar(pp_control);

byte=byte & 0xF0;

switch (reg_pcb)

case CHIP0:

byte=byte | 0x8; // Seleccion de CHIP0

DlPortWritePortUchar(pp_control, byte);

break;

case CHIP1:

byte=byte | 0xC; // Seleccion de CHIP1

DlPortWritePortUchar(pp_control, byte);

break;

case CHIP2:

Page 223: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 211

byte=byte | 0x0; // Seleccion de CHIP2 (Ya estaba seleccionado)

DlPortWritePortUchar(pp_control, byte);

break;

case CHIP3:

byte=byte | 0x4; // Seleccion de CHIP3

DlPortWritePortUchar(pp_control, byte);

break;

default: break;

// Activacion de la linea chip_select en el registro en cuestion

if (pcb==LATCH0)

byte=byte & 0xFC;

byte=byte | 0x1; // Seleccion de LATCH0

DlPortWritePortUchar(pp_control, byte);

if (pcb==LATCH1)

byte=byte & 0xFC;

byte=byte | 0x2; // Seleccion de LATCH1

DlPortWritePortUchar(pp_control, byte);

// Dejamos el registro de control con los cuatro bits a 1

// ESTE ES EL MOMENTO EN QUE VERDADERAMENTE SE GRABA EL DATO DENTRO

// DE LOS REGISTROS, PUES SE CARGAN EN EL FLANCO DE SUBIDA

byte=byte & 0xFC; // valor final de reposo

DlPortWritePortUchar(pp_control, byte);

// Queda direccionado un registro inexistente

byte=byte & 0xF0;

byte=byte | 0x4; // Seleccion de CHIP3

DlPortWritePortUchar(pp_control, byte);

return 0;

/****************************************************************************

FUNCION: lee_par_bert

DESCRIPCION: Realiza la secuencia de leer datos a traves del puerto paralelo,

a partir del registro seleccionado. Las instrucciones estan adaptadas

al hardware de la placa de ber.

Los datos se leen a traves del puerto de estado.

PARAMETROS DE ENTRADA:

dir: sirve para indicar la "direccion" desde donde se leen los datos, si

desde el bus de datos (sentido desde el pc de control), o desde el

punto de vista de la respuesta del DS2172.

BUS, 1 - se lee el dato puesto en el bus desde el pc de control

DS2172, 0 - se lee el dato puesto en el bus por el integrado DS2172.

reg_ini: registro del que se va a obtener el primer byte leıdo.

nro_reg: Numero de registros a leer a partir del valor reg_ini.

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES:

OBSERVACIONES: Los parametros de entrada reg_ini y nro_reg solo tienen valor

en el caso de estarse leyendo registros del integrado. Si lo que se lee

es el valor del bus, unicamente se leera un valor, y este es justo el que

hay en el bus de datos.

El byte(s) leıdo se almacena siempre en la variable global byte_datos,

y ademas, si la lectura se realiza sobre los registros del DS2172, sobre

el array, tambien global, donde se guardan los valores de los contenidos

de los registros control_bert[reg_ini], y superiores si la lectura se

realiza sobre varios registros. En este caso, al final de la funcion, la

variable byte_datos contendra el ultimo valor leıdo

****************************************************************************/

int lee_par_bert(char dir, char reg_ini, char nro_reg)

unsigned char byte_m, byte_l, m;

switch (dir)

case DS2172: //datos desde DS2172

Page 224: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 212

// Estado inicial. Bus en Tri-state y se anulan #CS, #WR, #RD, y ALE

byte_control = byte_control | 0x17;

byte_control = byte_control & 0xF7;

carga_pp (byte_control, LATCH0, CHIP0);

// Inicio del bucle de lectura, que se repite tantas veces como registros

// se van a leer, y viene indicado en el parametro de entrada nro_reg

for (m = (unsigned)reg_ini; m < (reg_ini + nro_reg); m++)

// Activacion de ALE

byte_control = byte_control | 0x08;

carga_pp (byte_control, LATCH0, CHIP0);

// Bus transceiver activado. (carga de la direccion a leer)

byte_control = byte_control & 0xEF; //Tristate a cero

carga_pp (byte_control, LATCH0, CHIP0);

// Carga de la direccion en el DS2172

carga_pp (m, LATCH0, CHIP1);

// Activacion del #CS

byte_control = byte_control & 0xFE;

carga_pp (byte_control, LATCH0, CHIP0);

// Carga de la direccion. ALE a bajo

byte_control = byte_control & 0xF7;

carga_pp (byte_control, LATCH0, CHIP0);

// Bus transceiver desactivado.

byte_control = byte_control | 0x10; //Tristate a uno

carga_pp (byte_control, LATCH0, CHIP0);

// Activacion de la linea #RD

//(aquı es cuando se pone el dato en el bus)

byte_control = byte_control & 0xFB;

carga_pp (byte_control, LATCH0, CHIP0);

// Lectura del dato del bus

//Lectura del nibble mas significativo

byte_control = byte_control | 0x20;

carga_pp (byte_control, LATCH0, CHIP0);

byte_m = DlPortReadPortUchar(pp_estado);

byte_m = byte_m ^ 0x80;

//Lectura del nibble menos significativo

byte_control = byte_control & 0xDF;

carga_pp (byte_control, LATCH0, CHIP0);

byte_l = DlPortReadPortUchar(pp_estado);

byte_l = byte_l ^ 0x80;

//Arreglos para presentar el resultado

byte_l = byte_l >> 4;

byte_m = byte_m & 0xF0;

byte_m = byte_m | byte_l;

byte_datos = byte_m;

control_bert[m] = byte_m;

// Desactivacion de la linea #RD

byte_control = byte_control | 0x04;

carga_pp (byte_control, LATCH0, CHIP0);

// Desactivacion de #CS

byte_control = byte_control | 0x1;

carga_pp (byte_control, LATCH0, CHIP0);

break;

case BUS: //datos desde el bus de datos

Page 225: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 213

//Triestate en la parte del DS2172 y habilitacion de salida en U4

byte_control = byte_control | 0x27;

byte_control = byte_control & 0xEF;

carga_pp (byte_control, LATCH0, CHIP0);

//Lectura del nibble mas significativo

byte_control = byte_control | 0x20;

carga_pp (byte_control, LATCH0, CHIP0);

byte_m = DlPortReadPortUchar(pp_estado);

byte_m = byte_m ^ 0x80;

//Lectura del nibble menos significativo

byte_control = byte_control & 0xDF;

carga_pp (byte_control, LATCH0, CHIP0);

byte_l = DlPortReadPortUchar(pp_estado);

byte_l = byte_l ^ 0x80;

//Arreglos para presentar el resultado

byte_l = byte_l >> 4;

byte_m = byte_m & 0xF0;

byte_m = byte_m | byte_l;

byte_datos = byte_m;

return 0;

/****************************************************************************

FUNCION: escribe_par_bert

DESCRIPCION: Realiza la secuencia de escribir datos a partir del registro

seleccionado, una cantidad de registros igual al numero de entrada

PARAMETROS DE ENTRADA:

reg_ini: registro donde se va a escribir el primer byte.

nro_reg: Numero de registros a escribir a partir del valor reg_ini.

PARAMETROS DE SALIDA: No hay

RESULTADO Y ERRORES: Entero -1 error; 0 todo bien

OBSERVACIONES: Los valores a escribir son los contenidos en el array de

caracteres global control_bert[], con ındice igual al del registro

escrito.

****************************************************************************/

int escribe_par_bert(char reg_ini, char nro_reg)

unsigned char un_byte, m;

int n;

// Estado inicial. Se anulan #CS, #WR, #RD, y ALE

byte_control = byte_control | 0x7;

byte_control = byte_control & 0xF7;

carga_pp (byte_control, LATCH0, CHIP0);

// Bus transceiver activado. (vamos a escribir en el DS2172)

byte_control = byte_control & 0xEF; //Tristate a cero

carga_pp (byte_control, LATCH0, CHIP0);

// Inicio del bucle de escritura que se repite tantas veces como registros

// se van a escribir, y viene indicado en el parametro de entrada nro_reg

for (m = (unsigned)reg_ini; m < (reg_ini + nro_reg); m++)

// Activacion de ALE

byte_control = byte_control | 0x08;

carga_pp (byte_control, LATCH0, CHIP0);

// Carga de la direccion en el DS2172

carga_pp (m, LATCH0, CHIP1);

// Activacion del #CS

byte_control = byte_control & 0xFE;

carga_pp (byte_control, LATCH0, CHIP0);

Page 226: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 214

// Carga de la direccion. ALE a bajo

byte_control = byte_control & 0xF7;

carga_pp (byte_control, LATCH0, CHIP0);

// Escritura en el bus del dato a cargar

un_byte = control_bert[m];

carga_pp (un_byte, LATCH0, CHIP1);

// Activacion de la linea #WR

byte_control = byte_control & 0xFD;

carga_pp (byte_control, LATCH0, CHIP0);

// Desactivacion de la linea #WR (aquı es cuando se escribe el dato)

byte_control = byte_control | 0x02;

carga_pp (byte_control, LATCH0, CHIP0);

// Desactivacion de #CS

byte_control = byte_control | 0x1;

carga_pp (byte_control, LATCH0, CHIP0);

return 0;

/****************************************************************************

FUNCION: inicia_hard_bert

DESCRIPCION: Carga inicial de los registros del integrado

PARAMETROS DE ENTRADA: Ninguno

PARAMETROS DE SALIDA: Ninguno

RESULTADO Y ERRORES: 0, todo OK

OBSERVACIONES: Necesaria en la inicializacion de la aplicacion.

Posteriormente el resto de funciones actualiza los registros del integrado

****************************************************************************/

int inicia_hard_bert(void)

char n;

// Inicializacion de la memoria de configuracion

// Secuencia inicial 2^21 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x14;

control_bert[POLYNOMIAL_TAB] = 0x01;

// Configuracion de partida

control_bert[PATTERN_CONTROL] = 0x20;

// No se insertan errores

control_bert[ERROR_INSERT] = 0x00;

// Se inicializa la cuenta de bits a cero

control_bert[BIT_COUNT_3] = 0x00;

control_bert[BIT_COUNT_2] = 0x00;

control_bert[BIT_COUNT_1] = 0x00;

control_bert[BIT_COUNT_0] = 0x00;

control_bert[BIT_ERR_COUNT_3] = 0x00;

control_bert[BIT_ERR_COUNT_2] = 0x00;

control_bert[BIT_ERR_COUNT_1] = 0x00;

control_bert[BIT_ERR_COUNT_0] = 0x00;

control_bert[PATTERN_RX_3] = 0x00;

control_bert[PATTERN_RX_2] = 0x00;

control_bert[PATTERN_RX_1] = 0x00;

control_bert[PATTERN_RX_0] = 0x00;

// Suponemos que todo esta bien

Page 227: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 215

control_bert[STATUS] = 0x00;

// Inhabilitamos la generacion de interrupciones

control_bert[INT_MASK] = 0x00;

control_bert[TEST] = 0x00;

// Carga de los registros del integrado

for (n=PATTERN_3; n<=INT_MASK; n++) escribe_par_bert(n, 1);

escribe_par_bert(TEST, 1);

return 0;

/****************************************************************************

FUNCION: prog_sec

DESCRIPCION: Cambios en los registros internos del chip para modificar la

secuencia con la que se realizara el test de BER

PARAMETROS DE ENTRADA: int secuencia: Codigo de secuencia utilizada

unsigned long _4_bytes: valor de la secuencia repetitiva cuando se

selecciona la secuencia arbitraria de usuario.

PARAMETROS DE SALIDA:

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES: Si la secuencia seleccionada no es la de usuario, el parametro

de entrada _4_bytes es indiferente

****************************************************************************/

int prog_sec (int secuencia, unsigned long _4_bytes)

static char longitud;

static unsigned long mas_bytes;

switch (secuencia)

case 1: // Secuencia 2^3 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x2;

control_bert[POLYNOMIAL_TAB] = 0x0;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 2: // Secuencia 2^4 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x3;

control_bert[POLYNOMIAL_TAB] = 0x0;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 3: // Secuencia 2^5 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x4;

control_bert[POLYNOMIAL_TAB] = 0x1;

// QRSS=0 y PATTERN SELECT=1

Page 228: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 216

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 4: // Secuencia 2^6 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x5;

control_bert[POLYNOMIAL_TAB] = 0x4;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 5: // Secuencia 2^7 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x6;

control_bert[POLYNOMIAL_TAB] = 0x0;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 6: // Secuencia 2^7 - 1 Fractional T1 LB Activate

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x6;

control_bert[POLYNOMIAL_TAB] = 0x3;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 7: // Secuencia 2^7 - 1 Fractional T1 LB Deactivate

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x6;

control_bert[POLYNOMIAL_TAB] = 0x3;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=1

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] | 0x30;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 8: // Secuencia 2^9 - 1 O.153 (tipo 511)

Page 229: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 217

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x8;

control_bert[POLYNOMIAL_TAB] = 0x4;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 9: // Secuencia 2^10 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x9;

control_bert[POLYNOMIAL_TAB] = 0x2;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 10: // Secuencia 2^11 - 1 O.152 y O.153 (tipo 2047)

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0xA;

control_bert[POLYNOMIAL_TAB] = 0x8;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 11: // Secuencia 2^15 - 1 O.151

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0xE;

control_bert[POLYNOMIAL_TAB] = 0xD;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=1

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] | 0x30;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 12: // Secuencia 2^17 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x10;

control_bert[POLYNOMIAL_TAB] = 0x2;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

Page 230: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 218

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 13: // Secuencia 2^18 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x11;

control_bert[POLYNOMIAL_TAB] = 0x6;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 14: // Secuencia 2^20 - 1 O.153

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x13;

control_bert[POLYNOMIAL_TAB] = 0x2;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 15: // Secuencia 2^20 - 1 O.151 QRSS

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x13;

control_bert[POLYNOMIAL_TAB] = 0x10;

// QRSS=1 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x40;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 16: // Secuencia 2^21 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x14;

control_bert[POLYNOMIAL_TAB] = 0x1;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 17: // Secuencia 2^22 - 1

control_bert[PATTERN_3] = 0xFF;

Page 231: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 219

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x15;

control_bert[POLYNOMIAL_TAB] = 0x0;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 18: // Secuencia 2^23 - 1 O.151

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x16;

control_bert[POLYNOMIAL_TAB] = 0x11;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=1

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x3F;

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] | 0x30;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 19: // Secuencia 2^25 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x18;

control_bert[POLYNOMIAL_TAB] = 0x2;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 20: // Secuencia 2^28 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x1B;

control_bert[POLYNOMIAL_TAB] = 0x2;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 21: // Secuencia 2^29 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x1C;

control_bert[POLYNOMIAL_TAB] = 0x01;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

Page 232: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 220

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 22: // Secuencia 2^31 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x1E;

control_bert[POLYNOMIAL_TAB] = 0x02;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 23: // Secuencia 2^32 - 1

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x1F;

control_bert[POLYNOMIAL_TAB] = 0x10;

// QRSS=0 y PATTERN SELECT=1

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xBF;

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x20;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 24: // Secuencia de todo unos

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFF;

control_bert[PATTERN_LENGTH] = 0x00;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 25: // Secuencia de todo ceros

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFE;

control_bert[PATTERN_LENGTH] = 0x00;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 26: // Secuencia alternada de unos y ceros

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

Page 233: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 221

control_bert[PATTERN_0] = 0xFE;

control_bert[PATTERN_LENGTH] = 0x01;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 27: // Secuencia doble alternada de unos y ceros

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFC;

control_bert[PATTERN_LENGTH] = 0x03;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 28: // Secuencia de 3 unos en 24 ceros

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0x20;

control_bert[PATTERN_1] = 0x00;

control_bert[PATTERN_0] = 0x22;

control_bert[PATTERN_LENGTH] = 0x17;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 29: // Secuencia de 1 uno en 16 ceros

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0x00;

control_bert[PATTERN_0] = 0x01;

control_bert[PATTERN_LENGTH] = 0x0F;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 30: // Secuencia de 1 uno en 18 ceros

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0x01;

control_bert[PATTERN_LENGTH] = 0x07;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 31: // Secuencia de 1 uno en 4 ceros

control_bert[PATTERN_3] = 0xFF;

Page 234: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 222

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xF1;

control_bert[PATTERN_LENGTH] = 0x03;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 32: // Secuencia D4 bucle activado

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xF0;

control_bert[PATTERN_LENGTH] = 0x04;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 33: // Secuencia D4 bucle desactivado

control_bert[PATTERN_3] = 0xFF;

control_bert[PATTERN_2] = 0xFF;

control_bert[PATTERN_1] = 0xFF;

control_bert[PATTERN_0] = 0xFC;

control_bert[PATTERN_LENGTH] = 0x02;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

case 34: // Definida por el usuario

mas_bytes = _4_bytes;

// Determinacion de la longitud de la secuencia de usuario

for (longitud = 31; ((!(mas_bytes & 0x80000000)) && (longitud > 0)); longitud--)

mas_bytes = mas_bytes << 1;

control_bert[PATTERN_LENGTH] = longitud;

control_bert[PATTERN_0] = _4_bytes & 0xFF;

_4_bytes = _4_bytes >> 8;

control_bert[PATTERN_1] = _4_bytes & 0xFF;

_4_bytes = _4_bytes >> 8;

control_bert[PATTERN_2] = _4_bytes & 0xFF;

_4_bytes = _4_bytes >> 8;

control_bert[PATTERN_3] = _4_bytes & 0xFF;

control_bert[POLYNOMIAL_TAB] = 0x00;

//QRSS=PATTERN SELECT=0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x9F;

escribe_par_bert(PATTERN_3, 7);

//TINV=RINV=0

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0x0F;

escribe_par_bert(ERROR_INSERT, 1);

break;

return 0;

/****************************************************************************

FUNCION: inserta_error

Page 235: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 223

DESCRIPCION: Cambios en los registros internos para la insercion de un error

intencionadamente

PARAMETROS DE ENTRADA: Ninguno

PARAMETROS DE SALIDA: Ninguno

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int inserta_error(void)

// Modificamos el registro implicado

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] | 0x8;

escribe_par_bert(ERROR_INSERT, 1);

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0xF7;

escribe_par_bert(ERROR_INSERT, 1);

return 0;

/****************************************************************************

FUNCION: inicia_test

DESCRIPCION: Cambios en los registros internos para la activacion de la

secuencia de salida y el conteo de bits recibidos y bits erroneos

PARAMETROS DE ENTRADA: Ninguno

PARAMETROS DE SALIDA: Ninguno

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int inicia_test(void)

static int n;

// Carga del contenido del registro de pattern en el generador de pattern

// Tambien reseteo de los registros BIT_COUNT y BIT_ERR_COUNT para poder realizar

// correctamente los calculos de BER y demas indicaciones.

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0x6F; //TL=0, LC=0;

escribe_par_bert(PATTERN_CONTROL, 1);

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x90; //TL=1, LC=1;

escribe_par_bert(PATTERN_CONTROL, 1);

// Lectura de los valores de BIT_COUNT y BIT_ERR_COUNT que tenıa

//almacenados el integrado

lee_par_bert(DS2172, BIT_COUNT_3, 8);

// Como el valor no nos interesa lo borramos.

for (n=BIT_COUNT_3; n<(BIT_COUNT_3+8); n++) control_bert[n] = 0x00;

// Desactivacion de las lıneas TDIS y RDIS para habilitar el test

byte_control = byte_control & 0x3F;

carga_pp (byte_control, LATCH0, CHIP0);

return 0;

/****************************************************************************

FUNCION: stop_test

DESCRIPCION: Cambios en los registros internos para la desactivacion de la

secuencia de salida.

PARAMETROS DE ENTRADA: Ninguno

PARAMETROS DE SALIDA: Ninguno

RESULTADO Y ERRORES: 0, OK

OBSERVACIONES:

****************************************************************************/

int stop_test(void)

// Se detiene la operacion del chip. TDIS y RDIS a uno

byte_control = byte_control | 0xC0;

carga_pp (byte_control, LATCH0, CHIP0);

return 0;

/****************************************************************************

Page 236: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 224

FUNCION: error_auto

DESCRIPCION: Cambios en el registro interno del DS2172 para que inserte

errores automaticamente de forma que se obtenga una tasa de error arbitraria

PARAMETROS DE ENTRADA: char valor, con la tasa de BER artificial codificada

PARAMETROS DE SALIDA: No

RESULTADO Y ERRORES: 0, todo OK

OBSERVACIONES:

****************************************************************************/

int error_auto(unsigned char valor)

// Nos aseguramos de que el parametro de entrada no interfiere

valor = valor & 0x7;

// Modificamos el registro implicado

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] & 0xF8;

control_bert[ERROR_INSERT] = control_bert[ERROR_INSERT] | valor;

escribe_par_bert(ERROR_INSERT, 1);

return 0;

/****************************************************************************

FUNCION: aplicacion_bert

DESCRIPCION: Lectura del registro de estado y de los contadores de bits

recibidos y erroneos para realimentar a la aplicacion principal.

PARAMETROS DE ENTRADA:

int secuencia: codigo de la secuencia utilizada.

PARAMETROS DE SALIDA:

ptd, puntero a estructura t_datos, donde se guardan todos los resultados

RESULTADO Y ERRORES: char SI, si se determina que el chip esta sincronizado

en funcion de las alarmas leıdas en el registro de estado, NO en caso

contrario. Depende de la secuencia que se este utilizando.

OBSERVACIONES: La funcion determina sincronismo si se reciben todo unos, pero

la secuencia utilizada es esa misma, y tambien si se reciben todo ceros,

y la secuencia es de ceros. En caso contrario, estas dos circustancias

son consideradas como anomalas y producen que el resultado de la funcion

sea negativo.

****************************************************************************/

char aplicacion_bert(t_datos *ptd, int secuencia)

char hay_sincronismo;

// Lectura del registro de estado

lee_par_bert(DS2172, STATUS, 2);

control_bert[INT_MASK] = 0x00;

escribe_par_bert(INT_MASK, 1);

// Actualiza las variables

ptd->todo_1 = control_bert[STATUS] & 0x40;

ptd->todo_0 = control_bert[STATUS] & 0x20;

ptd->busca_sincro = control_bert[STATUS] & 0x10;

ptd->error_dec = control_bert[STATUS] & 0x08;

ptd->con_ovf = control_bert[STATUS] & 0x04;

ptd->con_err_ovf = control_bert[STATUS] & 0x02;

ptd->sincro = control_bert[STATUS] & 0x01;

// Determinacion del sincronismo del sistema

hay_sincronismo = ((ptd->sincro && !(ptd->todo_0) && !(ptd->todo_1))

|| (ptd->todo_0 && (secuencia == 25))

|| (ptd->todo_1 && (secuencia == 24)));

// El chip se ha sincronizado

if (hay_sincronismo)

// Reseteo de los contadores

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xEF;

escribe_par_bert(PATTERN_CONTROL, 1); // LATCH COUNT = 0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x10;

escribe_par_bert(PATTERN_CONTROL, 1); // LATCH COUNT = 1

// Lectura de los registros que alimentan a los indicadores

lee_par_bert(DS2172, BIT_COUNT_3, 12);

Page 237: PFC Modulador Digital Programable modulAD mediBER

C.2 Aplicacion mediBER 225

// Actualizacion de variables

ptd->bits_rx = (control_bert[BIT_COUNT_3] * 16777216.0) +

(control_bert[BIT_COUNT_2] * 65536.0) +

(control_bert[BIT_COUNT_1] * 256.0) +

(control_bert[BIT_COUNT_0] * 1.0);

ptd->bits_err= (control_bert[BIT_ERR_COUNT_3] * 16777216.0) +

(control_bert[BIT_ERR_COUNT_2] * 65536.0) +

(control_bert[BIT_ERR_COUNT_1] * 256.0) +

(control_bert[BIT_ERR_COUNT_0] * 1.0);

return SI;

// No hay sincronismo

else

// Reseteo de los contadores

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] & 0xEF;

escribe_par_bert(PATTERN_CONTROL, 1); // LATCH COUNT = 0

control_bert[PATTERN_CONTROL] = control_bert[PATTERN_CONTROL] | 0x10;

escribe_par_bert(PATTERN_CONTROL, 1); // LATCH COUNT = 1

return NO;

/****************************************************************************

FUNCION: busca_equipo_ber

DESCRIPCION: Funcion que se ejecuta unicamente para comprobar la correcta

conexion de la placa de medicion de BER

PARAMETROS DE ENTRADA: No

PARAMETROS DE SALIDA: No

RESULTADO Y ERRORES: int 1 si la placa funciona correctamente, 0 si no se

encuentra (porque no esta alimentada, o no conectada al puerto paralelo)

OBSERVACIONES:

****************************************************************************/

int busca_equipo_ber(void)

// Escritura en el bus del dato a cargar

// byte_datos = 0x80;

byte_datos = 0xA5;

carga_pp (byte_datos, LATCH0, CHIP1);

// Lectura del valor que se acaba de escribir en la tarjeta de BER

lee_par_bert(BUS, 0, 0);

// if (byte_datos == 0x80) return SI;

if (byte_datos == 0xA5) return SI;

else return NO;

Page 238: PFC Modulador Digital Programable modulAD mediBER

C.3 Ficheros de Matlab 226

C.3. Ficheros de Matlab

Fichero ad9853 srrc.m

% FICHERO DE SIMULACION DE FILTRO FIR EN COSENO ALZADO EN EL AD9853

clear

% CAMBIO AL DIRECTORIO

cd d:\mis_documentos_d\matlab\pfc

% Definimos las constantes

alfa = 0.5;

BW = 0.5*(1+alfa);

PROC_GAIN=1;

SCALE = 511;

TAPS = 41;

FreqScale = 4;

stopband = 0.5*(1+alfa);

passband = 0.5*(1-alfa);

% Para plotear la funcion SRRC

freq_pts = 250;

df = stopband /(freq_pts - 1);

n = [0 : freq_pts-1];

fn = df*n;

% Definimos el eje Ttap

tap =[0 : TAPS-1];

t_taps= (1/FreqScale)*(tap - (TAPS-1)/2);

% Dividimos el eje de frecuencias entre 0 y BW en ’TAPS’ puntos

f = linspace (0,BW,TAPS);

%Calculo de la respuesta impulsiva h(t)

for i = 1 : TAPS % El resultado es un resultado h(t), luego el array debe de ser de tiempo

% fn es un array de [0:stopband], que son los valores para los que la integral no es nula

for m = 1 : freq_pts

array_1(m)= SRRCpos(fn(m), passband, stopband, alfa);

array_2(m)= cos( t_taps(i)*2*pi .*fn(m));

end

Array_temp = array_1 .* array_2;

h(i) = trapz(Array_temp);

end

% Borramos algunas variables temporales

clear Array_temp array_1 array_2 m i

htap = round (h .* (SCALE*PROC_GAIN/max(h))); plot (tap,htap) grid

% Rotulamos la grafica

xlabel(’TAP’);

ylabel(’htap’);

title(’ RESPUESTA IMPULSIVA SCCR ’);

% Escalamos la grafica

axis([0 40 min(htap)-10 max(htap)+10]);

% Calculo de respuesta en frecuencia

% Hacemos la fft

% Como tenemos 250 puntos en frecuencia calculamos la fft para 250 puntos

HTap = fft(htap,250);

% Calculamos el modulo

Modulo_H = abs(HTap(1:126));

%Modulo_H = abs(HTap(1:250));

% NOTA : se calcula el modulo solo de la mitad de los

% puntos, ya que el espectro es simetrico

Page 239: PFC Modulador Digital Programable modulAD mediBER

C.3 Ficheros de Matlab 227

% Normalizamos (dividimos por el maximo)

Modulo_H = Modulo_H / max(Modulo_H);

% Pasamos a logaritmico

Modulo_H_dB = 20 * log10(Modulo_H);

% nueva figura para representar el espectro

figure(2)

% Escalamos el eje de frecuencia

%f = fn(1:250)* (FreqScale / stopband);

f = fn(1:126)* (FreqScale / stopband);

plot(f,Modulo_H_dB) grid

% Rotulamos la grafica

xlabel(’FREQUENCIA (fn)’);

ylabel(’Hn (dB)’);

title(’ RESPUESTA EN FRECUENCIA NORMALIZADA SCCR ’);

% Escalamos la grafica

axis([0 max(f) -65 max(Modulo_H_dB)+5]);

% Escalamos la grafica para detalle

%axis([0 1 -6 max(Modulo_H_dB)]);

Page 240: PFC Modulador Digital Programable modulAD mediBER

C.3 Ficheros de Matlab 228

Fichero cic.m

% FICHERO DE SIMULACION DE FILTRO FIR EN COSENO ALZADO COMPENSANDO

% LA CAIDA DE LAS ETAPAS CIC

clear

% Definimos las constantes

alfa = 0.5;

BW = 0.5*(1+alfa);

PROC_GAIN=1;

SCALE = 511;

TAPS = 41;

FreqScale = 4;

% Factor de interpolacion

R = 6;

% Detalles de construccion interna del filtro CIC

N = 4; M = 1;

% Parametro de ajuste

beta = 0.90;

stopband = 0.5*(1+alfa); passband = 0.5*(1-alfa);

% Para plotear la funcion SRRC

freq_pts = 250; df = stopband /(freq_pts - 1); n = [0 :

freq_pts-1]; fn = df*n;

% Definimos el eje Ttap

tap =[0 : TAPS-1]; t_taps= (1/FreqScale)*(tap - (TAPS-1)/2);

% Dividimos el eje de frecuencias entre 0 y BW en ’TAPS’ puntos

f = linspace (0,BW,TAPS);

%Calculo de la respuesta impulsiva h(t)

for i = 1 : TAPS % El resultado es un resultado h(t), luego el array debe de ser de tiempo

% fn es un array de [0:stopband], que son los valores para los que la integral no es nula

for m = 1 : freq_pts

array_1(m)= SRRCpos(fn(m), passband, stopband, alfa);

array_2(m)= cos( t_taps(i)*2*pi .*fn(m));

end

Array_temp = array_1 .* array_2;

h(i) = trapz(Array_temp);

end

% Borramos algunas variables temporales

clear Array_temp array_1 array_2 m i

htap = round (h .* (SCALE*PROC_GAIN/max(h)));

figure(1) plot (tap,htap) grid

% Escalamos la grafica

axis([0 40 min(htap)-10 max(htap)+10]);

% Rotulamos la grafica

xlabel(’TAP’);

ylabel(’htap’);

title(’ RESPUESTA IMPULSIVA SCCR’);

% Escalamos la grafica

axis([0 40 min(htap)-10 max(htap)+10]);

% Calculo de respuesta en frecuencia

% Hacemos la fft

% Como tenemos 250 puntos en frecuencia calculamos la fft para 250 puntos

HTap = fft(htap,250);

Page 241: PFC Modulador Digital Programable modulAD mediBER

C.3 Ficheros de Matlab 229

% Calculamos el modulo

Modulo_H = abs(HTap(1:126));

%Modulo_H = abs(HTap(1:250));

% NOTA : se calcula el modulo solo de la mitad de los

% puntos, ya que el espectro es simetrico

% Normalizamos (dividimos por el maximo)

Modulo_H = Modulo_H / max(Modulo_H);

% Pasamos a logaritmico

Modulo_H_dB = 20 * log10(Modulo_H);

% nueva figura para representar el espectro

figure(2)

% Escalamos el eje de frecuencia

%f = fn(1:250)* (FreqScale / stopband);

f = fn(1:126)* (FreqScale / stopband);

plot(f,Modulo_H_dB) grid

% Rotulamos la grafica

xlabel(’FREQUENCIA (fn)’);

ylabel(’Hn (dB)’);

title(’ RESPUESTA EN FRECUENCIA NORMALIZADA SCCR ’);

% Escalamos la grafica

axis([0 max(f) -65 max(Modulo_H_dB)+5]);

% Escalamos la grafica para detalle

%axis([0 1 -6 max(Modulo_H_dB)]);

%%%%%%%%%%%%%%%%%Nuevos calculos incluyendo compensacion%%%%%%%%%%%%%%%%%%%%

%Calculo de la respuesta impulsiva h1(t);

for i = 1 : TAPS % El resultado es un resultado h(t), luego el array debe de ser de tiempo

% fn es un array de [0:stopband], que son los valores para los que la integral no es nula

for m = 1 : freq_pts

if fn(m)<(beta*BW)

si(m) = abs( hcic( 0, R, M, N ) / hcic( fn(m)/FreqScale, R, M, N ));

else

si(m) = 1;

end

array_1(m)= SRRCpos(fn(m), passband, stopband, alfa)*si(m);

array_2(m)= cos( t_taps(i)*2*pi .*fn(m));

end

Array_temp = array_1 .* array_2;

h1(i) = trapz(Array_temp);

end

% nueva figura para representar el espectro

figure(3)

h1tap = round (h1 .* (SCALE*PROC_GAIN/max(h1)));

plot (tap,h1tap)

grid

% Rotulamos la grafica

xlabel(’TAP’);

ylabel(’h1tap’);

title(’ RESPUESTA IMPULSIVA SCCR COMPENSADA’);

% Escalamos la grafica

axis([0 40 min(h1tap)-10 max(h1tap)+10]);

Page 242: PFC Modulador Digital Programable modulAD mediBER

C.3 Ficheros de Matlab 230

% Calculo de respuesta en frecuencia de la RESPUESTA COMPENSADA

% Hacemos la fft

% Como tenemos 250 puntos en frecuencia calculamos la fft para 250 puntos

HTap_cic = fft(h1tap,250);

% Calculamos el modulo

Modulo_H_cic = abs(HTap_cic(1:126));

% Normalizamos (dividimos por el maximo)

Modulo_H_cic = Modulo_H_cic / max(Modulo_H_cic);

% Pasamos a logaritmico

Modulo_H_cic_dB = 20 * log10(Modulo_H_cic);

% nueva figura para representar el espectro

figure(4)

% Escalamos el eje de frecuencia

f_cic = fn(1:126)* (FreqScale / stopband);

plot(f_cic,Modulo_H_cic_dB) grid

% Rotulamos la grafica

xlabel(’FREQUENCIA (fn)’);

ylabel(’Hn (dB)’);

title(’ RESPUESTA EN FRECUENCIA COMPENSADA SCCR ’);

% Escalamos la grafica

axis([0 max(f_cic) -65 max(Modulo_H_cic_dB)+5]);

% Escalamos la grafica para detalle

%%%%%%%%%%%%%%%%%%%%%%%%% Todo en la misma grafica%%%%%%%%%%%%%%%%%%%%%%

figure (5)

plot (tap,htap,tap,h1tap,’r’)

grid

% Rotulamos la grafica

xlabel(’TAP’);

ylabel(’htap , h1tap’);

title(’ RESPUESTA IMPULSIVA Y MODIFICADA SCCR ’);

% Escalamos la grafica

axis([0 40 min(htap)-10 max(htap)+10]);

figure(6)

plot(f,Modulo_H_dB,f,Modulo_H_cic_dB,’r’)

grid

% Rotulamos la grafica

xlabel(’FREQUENCIA (fn)’);

ylabel(’H (dB) , H precom (dB)’);

title(’ RESPUESTA EN FRECUENCIA NORMALIZADA Y MODIFICADA SCCR ’);

% Escalamos la grafica

axis([0 max(f) -65 max(Modulo_H_dB)+5]);