La señal horaria ANFR en 162 kHz (III)

Comparto aquí información actualizada sobre la señal horaria de onda larga sobre la que ya hablé en este y este artículo. En primer lugar hago una precisión, y es que la señal no se puede denominar TDF puesto que ya no depende del organismo de «Televisión de Francia». Ya no emite ningún canal de radio y la entidad que gestiona la emisora es la ANFR (Agencia nacional de frecuencias) por lo que he cambiado el título de esta entrada.

En la entrada anterior  mostraba la decodificación de la señal. Si bien la wikipedia dice que los segundos del 0 al 12 siempre contienen el bit 0, yo había observado que no es así. No encontré ningún sitio donde lo explicase. En su web, PA3FWM explica que dicha agencia ANFR le envió la norma que regula el formato de la señal. Según dice, los segundos 1 y 2 (empezando a contar el minuto en el segundo 0, luego son el 2º y 3º) anuncian un segundo intercalar o leap second positivo o negativo respectivamente. Escribí a la ANFR y me respondieron rápidamente enviándome el documento con la norma.

La información contenida en los segundos no es exactamente la ofrecida en la wikipedia sino que se resume en la siguiente tabla:

Segundo nºContenido
0Siempre a cero.
1Anuncio de segundo intercalar positivo desde 1 hora antes.
2Anuncio de segundo intercalar negativo desde 1 hora antes.
3Mitad de la suma de bits 21-58, peso 1.
4Mitad de la suma de bits 21-58, peso 2.
5Mitad de la suma de bits 21-58, peso 4.
6Mitad de la suma de bits 21-58, peso 8.
7Reservado, siempre a 0.
8Reservado, siempre a 0.
9Reservado, siempre a 0.
10Reservado, siempre a 0.
11Reservado, siempre a 0.
12Reservado, siempre a 0.
13Mañana es festivo nacional en Francia.
14Hoy es festivo nacional en Francia.
15Operación anormal según Wikipedia. A ignorar según la norma.
16Anuncio de cambio horario verano/invierno desde 1 hora antes.
17Horario de verano (CEST).
18Horario de invierno (CET).
19Según wikipedia, anuncio de segundo intercalar. Según norma, siempre 0.
20Siempre 1.
21Minutos, peso 1.
22Minutos, peso 2.
23Minutos, peso 4.
24Minutos, peso 8.
25Minutos, peso 10.
26Minutos, peso 20.
27Minutos, peso 40.
28Paridad par de los minutos, bits 21 a 28.
29Horas, peso 1.
30Horas, peso 2.
31Horas, peso 4.
32Horas, peso 8.
33Horas, peso 10.
34Horas, peso 20.
35Paridad par de las horas, bits 29 a 35.
36Día del mes, peso 1.
37Día del mes, peso 2.
38Día del mes, peso 4.
39Día del mes, peso 8.
40Día del mes, peso 10.
41Día del mes, peso 20.
42Día de la semana, peso 1.
43Día de la semana, peso 2.
44Día de la semana, peso 4.
45Mes, peso 1.
46Mes, peso 2.
47Mes, peso 4.
48Mes, peso 8.
49Mes, peso 10.
50Año, peso 1.
51Año, peso 2.
52Año, peso 4.
53Año, peso 8.
54Año, peso 10.
55Año, peso 20.
56Año, peso 40.
57Año, peso 80.
58Paridad par de la fecha, bits 36 a 58.
59Sin modulación.

En la hora UTC se introducen segundos intercalares para hacerla coincidir con la rotación de la Tierra. Esto se hace, como mucho, dos veces al año: el 1 de Enero y el 1 de Julio a las 0 horas. En promedio se introduce menos de 1 segundo al año. El anuncio de los bits 1 o 2 estará presente en uno de los dos, pero nunca simultáneamente (de hecho, nunca en la historia se ha introducido un segundo intercalar negativo), y sólo durante la hora previa. Por lo tanto, lo más habitual es que ambos bits estén a 0. Más información sobre esto en esta entrada.

Los bits 3 a 6 codifican el valor, entre 0 y 15 (1+2+4+8), de la mitad del número de bits a 1 entre los segundos 21 y 58, que son los que contienen la información de fecha y hora. Debido a que se introducen bits de paridad par, los segundos entre el 21 y el 28 siempre contienen un número par de unos, y lo mismo sucede con el bloque 29 a 35 y 36 a 58. Por lo tanto el conjunto 21 al 58 siempre tiene un número par de bits, y el número codificado por los bits 3 al 6 proporciona una redundancia adicional.

Los bits 7 al 12 no son utilizados y se dejan siempre a 0. Según la entrada en la wikipedia los bits 0 al 12 valen siempre 0 pero eso no es correcto.

Los bits 13 y 14 indican día festivo pero no domingo.

El día de la semana se codifica numéricamente asignando un valor 1 al lunes y 7 al domingo.

El número del año indica sus dos últimos dígitos decimales, obviando el siglo.

El segundo 59 tiene un valor muy importante ya que, al no tener ninguna modulación, permite detectar fácilmente el inicio del minuto.

Se muestra un ejemplo de la decodificación de un minuto:

00010010000000000010111101101000001111000010111000111010000

000 1001 000000 00000101 11101101 0000011 110000 101  11000 111010000
0-2 3-6   7-12   13-20    21-28    29-35  36-41 42-44 45-49  50-58

 

Los bits del 3 al 6 indican que habrá 2*9=18 unos entre los bits 21 y 58, como efectivamente es.
El bit 18 indica que estamos en horario de invierno.
El bloque de minutos (21-28) tiene un número par de unos, como debe ser a causa del bit de paridad. El valor es 1+2+4+10+20=37.
El bloque de horas (29-35) vale 20.
El día del mes (36-41) vale 3.
El día de la semana (42-44) vale 5.
El mes (45-49) vale 3.
El año (50-58) vale 1+2+4+10=17.
Por lo tanto la señal informa de que eran las 20:37 del viernes 3 de Marzo de 2017.

La norma también explica que entre la fracción 0,2 y 0,9 de cada segundo se envían otros datos. El formato de codificación es algo más complejo. Emplea técnicas de codificación convolucional, códigos de bloques CRC y entrelazado para detectar y corregir errores. Según me dijeron, no transportan ninguna información real sino únicamente bits de relleno.

En la anterior entrada decía que la señal se puede demodular mediante el software Clock de F6CTE, ejecutable en Windows. He podido ejecutar tanto Clock como Multipsk dentro de Linux mediante el software Wine. Tuve que habilitar el soporte de aplicaciones de 32 bits desde apt-get pero esto no es mayor problema. Clock decodifica perfectamente la señal horaria mediante la tarjeta de sonido. El tono se puede sintonizar en cualquier frecuencia, no necesariamente 1 kHz. El programa está disponible aquí. No muestra el contenido de todos los bits sino que solamente devuelve la información legible como fecha, horario, festividad, etc. Para ver todos los bits y experimentar con la señal se puede emplear el script de octave que expliqué anteriormente.