教団「二次元愛」

リアルワールドに見切りをつけ、二次元に生きる男の生き様 (ニコニコでは「てとろでP」)

デジタルでも「だいたいあってる」式に

2009-12-07 00:00:22 | 科学
世の中にはアナログとデジタルという方式がある。

デジタルは正確。
アナログはいいかげん、というか、だいたいあってる的なもの。

まあ世評ではそんなところだろう。

しかし!

最近はデジタルも「だいたいあってる」式になりつつあるような気がする。
本日はそういう話題にしたい。



デジタルはなぜ正確なのか。

デジタルは数字で計算するからだ。
1+1は2。1+2は3。
数字で計算すれば、桁落ちが発生しないかぎり厳密に計算できる。



アナログはなぜいいかげんだとか、だいたいあってる的なものだとか言われるのか。

アナログは数字ではない。
物理現象そのものの値である。

仮にアナログで1ボルトを設定したとしよう。
しかし厳密に1ボルトには設定できない。
校正の誤差が0.1%あって1ボルト設定値は実際には1.001ボルトになっているかもしれない。
0.01ボルトのノイズがのっていて1ボルト設定値は実際には0.99~1.01ボルトの間のどこかをフラフラしているかもしれない。
まあとにかく絶対正確な物理現象の値を出すことはできないのだ。
だから、だいたいあってる的なものというのもあながち間違いではない。



じゃあやっぱりデジタルのほうが正確なんじゃないか。
ところがどっこい、そうでもない。

デジタルは数字だが、デジタル信号処理をする部品は物理現象の上で成り立っている。
たとえばCPUも電気で動くトランジスタの詰め合わせでできている。

デジタルで「0」を表す電圧を0ボルト、「1」を表す電圧を5ボルトと決める。
CPUの中のトランジスタが0ボルトか5ボルトのどちらかの電圧しか出さないように回路を設計する。
ところが0ボルトとか5ボルトとかの厳密な値を出すことはできない。
そこで、しょーがないから0~1.5ボルトまでをデジタルの「0」、3.5~5ボルトまでをデジタルの「1」という具合に条件を決める。
もしまかり間違って1.5~3.5ボルトの間の値が入ってきたらどうなるかは知らんという設計でもある。

で、デジタルで間違うことはありうるだろうか?

デジタルの「0」がデジタルの「1」にひっくりかえるためには、「0」の上限である1.5ボルトが「0」と「1」の中間の2.5ボルト以上になるような1ボルト以上のノイズが入ってくれば間違う。
外来ノイズで1ボルトというのはかなりデカいので、よほど設計がタコだとか、よほど使用環境が酷いとこでもないかぎり、ふつうはひっくり返ることはない。
だからデジタルは間違わない。

しかし!

0ボルトから5ボルトの5ボルト振幅ではなくて、0.2ボルト振幅だったらどうだろう。
単純計算で1/25のノイズでも間違いが発生する。
さっきの場合よりも指数関数的に間違いの確率が激増する。
電圧を下げて消費電力を減らしたエコ設計(?)のデジタル回路はそういうものなのだ。



実際にデジタルで間違ったところなんか見たことない!
そう言うかもしれない。

ところがそうでもない。

PCのメモリを見てみよう。
1GビットのDRAMなら、1ビットの情報を収納する同じ箱が1000000000個入っている。
1000000000個が全て正常に動作するメモリを作るのは容易ではない。
だから余分に作っておいて、動かない箱があったらそこだけ別の箱につなぎかえ、外から見たら全部ちゃんと動いているように見せかける。

悪く言えば、デジタルでもインチキ臭いとも言える。
良く言えば、デジタルでもアナログ的な手法を取り入れて改善しているとも言える。
ようするに「だいたいあってる」的な。



無線通信の世界ではもっとインチキ臭くなる。

空中を無線で飛ばすなんてのは回線としては極めて信頼性が低い。
アマチュア無線の雑音まみれのあの通信音声を聞いてみれば良くわかるだろう。
そのままデジタルのデータを送ってもそこら中に間違いが発生する。
アナログのアマチュア無線があれでうまくいっているのは、人間の脳ミソで誤り訂正を行っているから何とかなっているのだ。

で、デジタル通信ではどうやってるのか。
一定の確率で間違いが発生するのは承知のうえでやるしかない。
しょーがないから後で間違いを修正することができるようなアルゴリズムになっている。
だから外から見たら間違いが発生していないように見える。
だから「だいたいあってる」通信ができれば結果的には正しく通信できてしまう。
こういう誤り訂正は、無線通信だけではなくハードディスクやらDVDやら何やかんやにけっこう使われているものだ。

ちなみに間違いの訂正方法でも、ビタビ復号なんて厳密解を解くのではなくてアルゴリズムそのものが「だいたいあってる」式なものでしかない(笑)。
このへんは専門的になりすぎるから止めておこうかね。



デジタルの世界を見渡してみよう。
メモリはすでに「だいたいあってる」式になっている。
通信も外部記憶装置も「だいたいあってる」式になっている。
JPEGやMPEGだって、人間が見て変でなければOKだという「だいたいあってる」式の最たるものだ。
残りはCPUくらいなもんだろうか。

ではCPUはどうだろう。
メモリへのアクセスくらいなら誤り訂正を入れるのはカンタンだが、人工衛星に搭載するようなゴツいのくらいしかロジックの誤り訂正回路は入っていない。

しかし、わたしは近いうちにCPUも「だいたいあってる」式になると思っている。

今のCPUは2コアだとか4コアだとか騒がれている。
CPUを買ってきて2コアのうち1個が動かなかったとしたらかなりムカつく。

しかしどうだろう。
100コアあったとしたら状況は違う。

メーカーはどれか1個が動かなくてもしょーがないというようなザルな仕様で作る。
内部的には101コアで作っておいて、出荷時に動かない1個は使わないように書き込んでおく。
外部仕様的に壊れているところが見えなければ問題ない。
これは単純計算でいくと1%のコストアップになる。
実際にはI/Oなど共通部のコストやパッケージングのコストもあるので、1%よりはだいぶ小さなコストアップにしかならない。
しかし、ザルな仕様で作れるので、最終的なコストは劇的に下がる。

今はまだそうはなってはいない。
きっと近いうちにそうなるのではなかろうかと思うのだがどうだろうか。