The carrier is amplitude-modulated. The "low" amplitude is 17 dB below the "high" level. One bit per second, 60 bits per minute. Each second starts low and rises to high after a duration that encodes the bit:
| Symbol | Low duration | High duration |
|---|---|---|
| ZERO | 0.2 s | 0.8 s |
| ONE | 0.5 s | 0.5 s |
| MARKER | 0.8 s | 0.2 s |
Markers occur every 10th second (0, 9, 19, 29, 39, 49, 59).
Carrier is also amplitude-modulated at -17 dB but with opposite polarity: each second starts high and falls to low after a duration that encodes the bit:
| Symbol | High duration | Low duration |
|---|---|---|
| ZERO | 0.8 s | 0.2 s |
| ONE | 0.5 s | 0.5 s |
| MARKER | 0.2 s | 0.8 s |
JJY uses Japan Standard Time (UTC+9). JJY40 is for eastern Japan, JJY60 for western. Both broadcast the same time-code frame.
The real stations attenuate by 17 dB during the low interval — they do
not turn the carrier fully off. This package's default backend
(PigpioCarrier) toggles the carrier fully on/off, which is a 100 %
amplitude swing rather than 17 dB. Clocks within a few meters of the Pi
will still decode this without trouble (the difference between 100 % and
17 dB is just an even bigger contrast for the receiver).
If you want a "true" -17 dB low you need a two-pin setup: keep one GPIO
running the carrier continuously and use a second GPIO to switch in an
external attenuator (resistor divider into the antenna driver). The
modulator polarity is the same; you just call set_low()/set_high()
on a different backend. The codebase is structured to make adding that
backend straightforward — subclass Carrier.