[PR]今日のニュースは
「Infoseek モバイル」

Gコード3桁までの仕組みを徹底解説

解説を読んでもよく分からないというご意見がありますので、できるかぎり分かりやすく説明いたします。(簡単に説明できる技術ではありません)

3桁までは、Gコードに含まれている要素は、チャンネル4種類、開始時刻、録画時間のパターン8種類、日付31種類の992通りです。

4桁以上の解説は、3桁までが理解できないと、わけがわからなくなりますので、興味がある方は、ぜひ理解してください。

まず、チャンネル(C)・時刻(T)・日付(D)のそれぞれの要素を2進数に分解して、合成してGコードを作成しています。

チャンネルの要素(C)

C1 C0 チャンネル
0 0 80(NHK-G)
0 1 90(NHK-E)
1 0 04
1 1 06

 

開始時刻と録画時間の要素(T)

T2 T1 T0 開始時刻と録画時間
0 0 0 18:00から30分間
0 0 1 19:00から30分間
0 1 0 20:00から30分間
0 1 1 21:00から30分間
1 0 0 22:00から30分間
1 0 1 23:00から30分間
1 1 0 17:00から30分間
1 1 1 16:00から30分間

 

日付の要素(D)

D4 D3 D2 D1 D0 日付
0 0 0 0 0 1日
0 0 0 0 1 2日
0 0 0 1 0 3日

途中略

1 1 1 0 0 29日
1 1 1 0 1 30日
1 1 1 1 0 31日
1 1 1 1 1 (エラー)

 

私の解析により、2進数で、D4 D3 D2 D1 D0 T2 C1 T1 C0 T0 の順で合成してGコードが作成されていることが分かっています。

しかし、ただ合成するだけではなく、同じ日、チャンネル、録画時間帯の場合で、予約する月だけが違う場合は、

Gコードが同じにならないようになってます。どのような仕組みかというと、上記の下位5ビットT2 C1 T1 C0 T0に

月の要素を加えています。ただ、この要素の加え方がかなり複雑で、月の数+1と日の数を掛けた値を下位5ビットから引いて、

その下位5ビットを取り出しています。

例を1日の場合で説明します。この場合は、日付の要素の上位5ビットは、すべて0です。

1月で90chで18:00から30分間の場合、日付とチャンネルを合成すると、下位5ビットは、 0 0 0 1 0 となり、

単純に合成した数値は、0 0 0 0 0 0 0 0 1 0 となります。ここで、月の要素を加えます。

月の数と日の数を掛けた値は、(1月+1)×1日=2となります。2進数で2は、0 0 0 0 0 0 0 0 1 0 です。

単純に合成した数値から、2を引くと、0 0 0 0 0 0 0 0 0 0となります。これに1を加えると

0 0 0 0 0 0 0 0 0 1  = 1(10進数)になり、1桁の場合は、それがGコードになります。


2月の6chで18:00から30分間の場合、下位5ビットは、0 1 0 1 0 となり、(1日なので、上位5ビットは、すべて0です。)

月の数と日の数を掛けた値は、(2月+1)×1日=3となり、差し引くと、0 0 1 1 1となります。これに1を加えると

Gコードが 0 1 0 0 0 = 8になります。

これは、1桁の場合は、これで終わりですが、2桁以上になるとさらに特殊な操作が必要になります。


1月の4chで21:00から30分間の場合、単純合成では、下位5ビットは、0 1 1 0 1 となり、

月の数と日の数を掛けた値は、(1月+1)×1日=2となり、差し引くと、0 1 0 1 1となります。

これに1を加えると0 1 1 0 0 = 12(10進数)となります。ただ、12がGコードではありません。

ここで、新たな法則によって計算しなければ、いけません。


Gコード10の位 = 単純合成の1の位× 7 + 単純合成の10の位 の下位1桁

Gコード1の位 = 単純合成の1の位 ←先ほどの1桁の場合は、これで問題なかったわけです。


この法則によって計算すると、

Gコード10の位 = 2× 7 + 1 = 15の下位1桁 = 5

Gコード1の位 = 2

これで、Gコードは、52になります。

ただ、この計算で問題が起こる場合があります。

1月で80chで18:00から30分間の場合、単純合成では、下位5ビットは、 0 0 0 0 0 ですが、

月の数と日の数を掛けた値は、(1月+1)×1日=2となり、差し引くと、1 1 1 1 0となります。

これに1を加えると1 1 1 1 1 = 31(10進数)となります。

法則によって計算すると、

Gコード10の位 = 1× 7 + 3 = 10の下位1桁 = 0

Gコード1の位 = 1

となり、作成したGコードが01となってしまいます。この場合は、この01をもう一度法則によって計算します。

Gコード10の位 = 1 × 7 + 0 = 7

Gコード1の位 = 1

となりGコードが71になり、正しくなります。

 

3桁以上がどうなるかを説明します。

1月4日で80chで18:00から30分間の場合、単純合成では、0 0 0 1 1 0 0 0 0 0 です。

月の数と日の数を掛けた値は、(1月+1)×4日=8となり、差し引くと、下位5ビットは、1 1 0 0 0となります。

1 1 0 0 0に1を加えると1 1 0 0 1 となります。日付を合成して、0 0 0 1 1 1 1 0 0 1 = 121(10進数)

になります。

Gコード1の位は、1で確定。

Gコード10の位は、1×7 + 2 = 9

Gコード100の位は、また新たな法則で計算しなければいけません。


Gコード100の位 = 単純合成の1の位× 3 + 単純合成の10の位 × 7 + 単純合成の100の位


という式を使います。

Gコード100の位は、1×3 + 2×7 + 1 = 18の下1桁 = 8

よって、Gコードは、891となります。

この法則にしたがって作成したGコードが、001や033など、上1桁が0の場合は、先ほど同様に、

作成したコードを単純合成値として、上1桁が0にならなくなるまで、計算を繰り返します。

 

合成のやり方に戻りますが、

要素 D4 D3 D2 D1 D0 T2 C1 T1 C0 T0
重み 512 256 128 64 32 16 8 4 2 1

となっているため、日付のビットD1,D0が1日(0,0)2日(0,1)3日(1,0)の場合は、単純合成100以上にならないので、

1日から3日までは、絶対Gコードは3桁にならないことがわかります。

また、1桁は、かならす1日になるということがわかります。

D4からD0まですべて1の場合(32日と設定している)、それ以下0の場合の単純合成値は、512+256+128+64+32=992

となります。1を加えて合成値は、993になります。この場合のGコードは103になり、実際には設定できません。

その他の設定できないGコードは、以下の通りです。

合成値 993 994 995 996 997 998 999
Gコード 103 474 745 536 387 658 929

合成値が1000以上になると、Gコードも4桁になります。4桁は、さらにチャンネル、時間設定を拡張しています。

以上お分かりいただけたでしょうか?


戻る