情報のデジタル化と2進数と文字コード
1学期は「情報ってなに」や「情報の入手·活用方法」等の話をしました。
2学期からは「情報処理端末」としてのPC、スマホの処理原理などについての勉強になります。
今回クッソ長いんじゃ...
アナログとデジタル
アナログとは現実世界等、連続している状態を差します。
デジタルとは「ディジット(指)」から派生して「(指で)数えられる」、数学で言うところの離散値の事を言います。
自然数や整数というときはその間にある小数は無視しますよね?これが離散です。
実数は間の小数も考えますね?こちらは連続です。
※数学で「連続」の定義の話をしだすとイプシロンーデルタ論法という高校数学の話になるけど、それは本題からずれるのでここで閑話休題。
21世紀の日本においてコンピュータとはPC,スマホ,あとゲーム機辺りが意識に上りますが、元々「コンピュータ」は「計算作業者」の人間を指す言葉でした。
現在一般に浸透しているコンピュータはほぼ全て「(フォン・)ノイマン型コンピュータ」と呼ばれます。
※量子コンピュータはノイマン型ではありませんが、まだ一般的とは言いがたいのでこの書き方です。 これは宇宙人とか渾名されるジョン·フォン·ノイマンに由来します。
(ノイマン型コンピュータの成立にはノイマン以外の活躍も当然あったし、むしろ功績盛り過ぎでは?疑惑もあるけどそれも閑話休題)
で、このノイマン型コンピュータはデジタルでしか計算ができません。
そのため、アナログと競り合うとどうしても「近い値で妥協する」という作業が必要になります。
音楽を保存する場合、レコードに保存するのはアナログなので超音波(これは超高周波・超低周波の両方)を含めてアナログ的に保存できます。
写真の場合銀塩板やフィルムの場合はアナログなので非常に細部まで保存できます。
デジタルで音楽を保存するwav形式(PCM符号)、jpg方式などはアナログと比較すると非常に劣化した情報しか保存できません。
まぁ、その劣化部分が人間の平均から見ると超高周波・超低周波・差分を見極めきれないほど細かい差だったりで「充分な情報量で大多数の人間に誤差がワカラン程度までやる」という力技でごまかしているわけですが。
なので音響効果を考えた舞台でのクラシックコンサートとかは聞いてみるとやっぱりCD音源とかでは劣化はあるし、その劣化具合もわかる人にはわかります。
吹越に音響趣味はないけれど、まぁ音響趣味の方がそういったコンサートホールのような環境を目指すのは理解できます。
音響趣味の方の中にたまに情報工学的に考えてあり得ないワケワカメな理論に突っ走る方がいることも把握してますが。(その方たちのおかしさを指摘するのはもう少し後の回にしましょう。)
閑話休題。
デジカメで写真を撮る、スマホで録画(及び録音)するなど、現実(アナログ)のものをデータ(デジタル)に変換することをA/D変換と言います。
逆にデータをスピーカー&モニターで再生するなど、デジタルをアナログに変換することをD/A変換と言います。
A/D変換の際、データを採取する時間を短くすることができ、この1度のデータ採取をサンプリング(標本化)といいます。サンプリングの時間を短く、連続に実施することで時系列に伴うデータ(音声や動画)をよりアナログに近い状態で保存することができます。
また、1度のサンプリングに対して取得データの段階を細かくすることでアナログデータに近づけることができます。こちらは量子化と言い、「近い値で妥協」したときの差分を量子化誤差と言います。
サンプリングする際には元のアナログデータの2倍以上の周波数でサンプルする必要があります。
これをサンプリング定理(標本化定理)と言い、基本情報の午前試験などではよく出てくる頻出問題になります。
基本情報技術者平成25年春期 午前問3
アナログ音声をPCM符号化したとき,1秒当たりのデータ量は64,000ビットであった。量子化ビット数を8ビットとするとき,サンプリング間隔は何マイクロ秒か。
64000[bit]=8000[B]、量子化ビット数も8[bit]=1[B]なのでそのまま秒間8000回サンプリングしたことになる。
よって1/8000 [1/Hz]=1.25×10^(-4)=125マイクロ秒。
応用情報技術者平成21年秋期 午前問3
0~20kHzの帯域幅のオーディオ信号をディジタル信号に変換するのに必要な最大のサンプリング周期を標本化定理によって求めると,何マイクロ秒か。
サンプリング定理より20kHzの音声は40kHz以上のサンプリングが必要である。よって1/40,000 [1/Hz]=25×10^(-6)より25マイクロ秒
なお、10^(-6)は「10のマイナス6乗」で「^ (ハット)」記号は指数であることを表現する。由来は知らない。TeXかも?
ちなみに、このサンプリング周波数より細かいデータを処理しようとして偽の周波数データを受け取ってしまうことがあり、これを「もわれ·もあれ」といいます。高速道路の走行中などに隣の車のホイールの影が逆回転しているように見えたりする現象も脳の処理周波数との関係で発生するもわれです。
2進法
ノイマン型コンピュータは一般的に万能チューリングマシンであると言われ、全てのチューリングマシンは有限オートマトンです。よってノイマン型コンピュータは有限オートマトンですが、その実装方式として「ある瞬間に特定のラインで電圧がかかっているか否か」を基本として処理を行います。2021年の日本ではPCはこのラインを32本もしくは64本同時に処理するものが一般的です。いわゆるCPUが32bitか64bitかって奴ですね。なおニンテンドー64は64bitだから64とついていたり。この辺の話はCPUの話の時にもっかい細かくやります。
で、この「電圧がかかってない状態」を0、「電圧がかかっている状態」を1として計算するのが一般的です。別に「マイナスの電圧をかけた状態」まで入れて3つの状態で組み合わせ作るのも理論上可能ですが、趣味や研究室レベルですね。他に電圧のかけ具合でもっとレベルを分けよう、という研究もあったと聞いてますが、市販されてない辺りにお察しください。
で、2つの状態を01で表現する、ということと「数値を表現するのに10進数である必要はない」という数学の発想が混ざった結果、2進数、8進数、16進数はコンピュータと非常に相性のいい進数となりました。
さて、漸くこの章の本題ですが、「進数ってなに?」です。
普段見慣れている数字はアラビア数字で、1234567890という10種類の文字で構成されています。
でも12で一纏めとする文化もある。ダース·グロス·グレートグロスね。他にも時刻は60で秒·分·時間と単位が上がっていく。
つまり、数値が何で1個上の単位になるかは習慣風俗の問題が大きいわけです。
この時、数値1桁で表現できる値が多いほど、1桁に使う文字の種類が増えます。
一般的な数値だと10種類の文字で10進数。コンピュータの状態は01しかないから2進数と相性が良かった訳です。
2進数での数値の数え方は0,1,10,11,100,101,110,111,1000と増えていきます。
10進数に直すと0,1,2,3,4,5,6,7,8ですね。 この辺の変換と戻し方は非常に重要です。
主にNWのサブネットマスク計算で牙を剥いてきます。
手順は書くとさらに長くなるので https://www.infraexpert.com/study/ip1.html などを参照
で、2進数1桁で01の2通りの状態を表せます。これを1bitと呼び、情報量の最小単位とすることにしました。
この後説明する文字コードの関係もあり文字数で7bit+パリティビットで8bitとなっていきました。
※CPUのbit数の問題として、1度に処理できる量を1Bとしていたため、6bit=1Bだったり9bit=1Bだったりするコンピュータもありましたが、2008年にISOで採択されるまでは「デファクトスタンダード」という扱いでした。
2の乗数なのも好都合だった一因です。
さらにさらに、0123456789abcdefの16種類を1桁で表現できる16進数は2桁並べるだけで8bit=1Bの表現ができるのでバイナリ表現をするのに便利だったりする。
これも4bitで区切って計算するだけでいける。
文字コード
コンピュータにおいて、文字の表現としては26種のアルファベット×大文字小文字で52種+記号や特殊文字 で7bitは必要であったわけです。で。チェックディジットとして1bit足して8bit。これが桁数が2の乗数だったのもあって1文字1Bとして処理できるようになったわけです。
で、文字に番号を直接振って何番は何の文字、と対応付けたものを文字コードと言います。
知名度が高いものとしてはASCIIコード(最初の文字コード)やShift-JIS(SJIS)、Unicode(UTF-8 / UTF-16)などがあります。
PCで利用できるデータは「テキストデータ」か「バイナリデータ」の2種類に分類できます。
この文字コードが異なると文字の番号が違うので、テキストデータなのに全く読めないものになります。
これを文字化けと呼びます。
なお実際の授業ではピックアップして教えるのでここまでガチガチに書かない。教科書に書いてあるからそこを強調して覚えさせるとか問題を解かせる方向で実施するパターンが多いかな。文字コードとかほとんど書いてある内容で終わりですし。
なお次回は音声データ・画像データ・動画データの表現法について。
コメント
匿名
普段、なんとなく使っている8bit=1Bですが、こういった背景があったんですね。ためになりました。
マスター吹越
匿名様
コメントありがとうございます!
2の乗数で統一できるので、実際7bitよりは分かりやすいですよね