基本情報の標本化・量子化・符号化の違いとPCMデータ量の求め方

マイク、ヘッドホン、音声波形を表示したパソコン

基本情報で出てくる標本化・量子化・符号化は、音声をデジタルデータに変えるときの別々の処理です。標本化は時間を区切って値を取り出すこと、量子化はその値を有限の段階に近づけること、符号化は段階をビット列で表すことです。

非圧縮PCMの音声データ量は、サンプリング周波数×量子化ビット数×秒数×チャンネル数でビット数を求め、8で割るとバイト数になります。「16ビットだから16段階」「ステレオだから周波数も2倍」と取り違えないことが、計算を安定させるポイントです。

この記事では、3つの処理を同じ数値例で追い、その後にモノラル・ステレオの容量計算、設定変更による倍率、録音時間の逆算を確認します。計算例は学習用に作成したもので、特定年度の過去問の転載ではありません。

この記事のポイント
  • 標本化・量子化・符号化を処理の対象で見分ける
  • 量子化ビット数と表現できる段階数を区別する
  • PCM容量をHz・bit・秒・チャンネル数から計算する
  • 単位換算と逆算を使って答えの妥当性を確かめる
無料

基本情報技術者試験 過去問アプリ

本番形式で繰り返し解ける。スキマ時間に1問から

2,000問以上収録
無料で過去問を解く
目次

基本情報の標本化・量子化・符号化

マイクと録音機器、波形上の標本点を表示したパソコン
音声を機器で取り込む場面を表したイメージ

音声をデジタル化する順番

マイクが取り出す音の信号は、時間とともに変わる電圧として考えられます。コンピュータに記録するには、いつの値を取るか、どの精度で表すか、どんなビット列にするかを決める必要があります。この役割を分けたものが、標本化→量子化→符号化という流れです。

PCMはPulse Code Modulationの略で、日本語ではパルス符号変調といいます。ここでは、各時点の振幅を一定のビット数で記録する非圧縮PCMを扱います。元の波形をそのまま紙に写すような保存ではなく、測定した値の列として保存するイメージですね。

処理決める・変えるもの見分ける言葉
標本化値を取り出す時刻一定の時間間隔、周期、サンプリング
量子化振幅を表す有限個の段階近似、丸め、段階、量子化誤差
符号化段階に対応するビット列2進数、0と1、符号の割り当て

この順番を「音を小さくして圧縮する処理」と覚えると混乱します。3つの処理は、アナログ信号をデジタル表現へ変換するためのものです。出来上がったデータをさらに小さくする圧縮は別の話として切り分けましょう。

また、標本化した時点では、値を取り出す時刻が離散的になっただけです。取り出した値が細かな小数を含むことはあり、まだ有限個の段階にそろえたとは限りません。「時間を区切る」と「値を区切る」を分けておくと、用語問題を説明から判定できます。

基礎の定義は、東京大学HWBの音声の符号化教材でも確認できます。以下では、同じ値が各処理を通るとどう変わるかを学習用の簡略例で追います。

標本化は時間方向を区切る

標本化とは、信号の値を一定の時間間隔で取り出すことです。たとえば0秒、0.25秒、0.50秒、0.75秒……という時刻に値を読むなら、標本化周期は0.25秒、サンプリング周波数は4Hzです。ここでの4Hzは仕組みを説明するための小さな数値で、音声録音に十分な設定を示しているわけではありません。

サンプリング周波数は、1秒間に何回値を取るかを表します。標本化周波数、サンプリングレートも同じ意味で使われます。44.1kHzなら1秒間に44,100回、48kHzなら48,000回です。容量計算へ入れるときは、kHzをHzに直してから使います。

標本化周期Tとサンプリング周波数fの関係は、T=1÷fです。8,000HzならT=1÷8,000秒=0.000125秒=125マイクロ秒になります。回数を増やすほど間隔は短くなるので、「周波数が2倍なら周期も2倍」という選択肢は逆ですね。

サンプリング周波数は測定する回数、音そのものの周波数は波が繰り返す回数です。どちらもHzで表していても、指している対象が違います。

たとえば1kHzの音を48kHzで標本化するなら、音は1秒に1,000回振動し、その信号を1秒に48,000回測定します。音を48kHzの高さへ変える、という意味ではありません。容量計算に使うのは、問題文で指定された標本化周波数です。

標本化の段階で、仮に0.2、1.7、2.1、0.8という振幅が取り出されたとします。取り出す時刻は決まりましたが、1.7や2.1のような値を何段階で記録するかはまだ決まっていません。次の量子化で、これらを記録可能な段階へ置き換えます。

量子化は振幅を段階に近づける

滑らかな青い曲線と段階的な高さの透明模型
滑らかな変化と段階的な高さを対比した説明用イメージ。実際の波形の測定結果ではありません

量子化とは、取り出した振幅を、あらかじめ決めた有限個の値へ近づけることです。連続した高さを、そのまま無限の細かさで保存する代わりに、階段のどの高さに相当するかを決めるような処理だと考えると分かりやすいでしょう。

簡略例として、記録できる代表値を0、1、2、3の4段階に決めます。最も近い代表値へ丸めるルールなら、先ほどの0.2、1.7、2.1、0.8は、0、2、2、1になります。この例では、元の値との差は順に0.2、−0.3、0.1、−0.2です。差の符号は「元の値−代表値」と定義しています。

このような丸めによって生まれる差が量子化誤差です。記録範囲内であっても、ちょうど代表値に一致しない振幅は近似されます。範囲を超えて波形の頂点が切れてしまうクリッピングとは区別してください。量子化ビット数を増やしても、入力が許容範囲を超えた問題まで自動的に解消するわけではありません。

nビットで区別できるビット列は2のn乗通りです。そのため、量子化ビット数が8ビットなら256段階、16ビットなら65,536段階となります。16ビットは「16段階」ではなく、「1つの値を16個の0・1で表す」という意味です。

量子化ビット数表現できる段階数1標本の記録量
2ビット4段階2ビット
8ビット256段階8ビット=1バイト
16ビット65,536段階16ビット=2バイト
24ビット16,777,216段階24ビット=3バイト

同じ振幅範囲を等間隔に区切るなら、段階数が増えるほど刻み幅は小さくなります。一定範囲の一様量子化で、最も近い値へ丸め、範囲外の入力を除く場合、誤差の大きさは通常、刻み幅の半分以内と考えられます。範囲や丸め方の条件を指定せずに、すべての量子化へ同じ誤差の上限を当てはめないようにしましょう。

量子化と誤差の関係は、半導体メーカーのAnalog DevicesのA/D変換教材にも説明があります。試験の容量計算では段階数そのものより、1標本を何ビットで記録するかを使う点が大切です。

符号化は段階をビット列にする

符号化は、量子化で選んだ段階を、コンピュータが保存できるビット列に対応させる処理です。4段階の簡略例なら、0→00、1→01、2→10、3→11と対応づけられます。量子化後の0、2、2、1は、00、10、10、01となります。

4つの標本を2ビットずつ表すので、この例の標本データは合計8ビットです。量子化で0.2を0へ近づけたことと、符号化で0を00へ置き換えたことは別の操作ですね。前者は振幅の近似、後者は表現方法の割り当てです。

この対応表は仕組みを学ぶための例です。実際のPCMでは負の振幅も扱い、形式に応じて符号付きの数などを使います。16ビットだから実際の音声振幅が必ず0〜65,535の正の整数として保存される、とは限りません。区別できるビット列が65,536通りあることと、数値の割り当て方を混同しないでください。

2進数の読み方が曖昧な場合は、基本情報のn進数と2進数変換の解説で、00・01・10・11がどのように値を表すかを復習できます。PCMの容量問題そのものでは、大きな2進数を毎回展開する必要はありません。ビット数が与えられれば、その数を記録量として使います。

用語の判定では、「一定の周期で取り出す」なら標本化、「有限の段階へ近似する」なら量子化、「段階を0と1に対応させる」なら符号化、と処理の動詞に注目します。

音質と容量への影響を分ける

サンプリング周波数と量子化ビット数は、どちらもPCMの容量へ影響しますが、信号の表し方への影響は異なります。前者は時間方向の記録密度、後者は振幅方向の細かさです。音の速い変化を取りこぼした問題と、振幅を粗く丸めた問題では、見直す設定が違います。

音声のような、低い周波数から上限までを扱う信号では、標本化定理の考え方が使えます。最高周波数に対して標本化周波数を十分高くし、基本的な目安を2倍とします。理論上の境界値だけを機器設計の十分条件とせず、実際にはフィルターの特性も考え、2倍を超える余裕を取ります。

たとえば最高周波数が3kHzに制限された信号なら、2倍の基準は6kHzです。8kHzで標本化する設定はこの基準を上回ります。ただし入力にそれより高い周波数成分が残っていれば、別の低い周波数として見えてしまう折り返し、エイリアシングの問題が起こり得ます。

ナイキスト周波数は、標本化周波数の半分です。48kHzの設定なら24kHzとなります。これは「音の周波数を48kHzにする」という話でも、「24kHzの音が必ず完全に再現できる」と保証する話でもありません。理論の前提である帯域の制限と、現実の入力条件を分けて理解しましょう。

この境界と実機で必要な余裕は、Analog Devicesのナイキストに関する説明で確認できます。容量問題では、再現可能な周波数の半分を式へ入れるのではなく、指定されたサンプリング周波数をそのまま使います。

設定値を高くすれば、より細かな情報を記録できる余地が増えます。一方、低い設定で失われた情報が、高い設定へ変換するだけで戻るわけではありません。音質は入力信号や機器にも左右されるため、「ビット数が増えたので必ず聴こえ方も改善した」と容量の増加だけから判断しないことが大切です。

標本化・量子化からPCM容量を求める

録音機、保存機器、電卓、ノートを並べた机
録音の設定と保存容量を考える学習場面のイメージ

容量の公式と単位換算

非圧縮PCMの容量は、「標本の個数×1標本の記録量」で求められます。1チャンネルについて、周波数fでt秒録音すると標本数はf×t個です。1標本がbビット、チャンネル数がcなら、総ビット数はf×t×b×cになります。

つまり、データ量[バイト]=サンプリング周波数[Hz]×量子化ビット数[bit]×時間[秒]×チャンネル数÷8です。最初からバイトで考えたい場合は、量子化ビット数を8で割って1標本のバイト数へ直しても構いません。16ビットなら2バイトです。

この式は、記録する標本のデータ量を求めるものです。ファイルのヘッダー、付加情報、形式による格納上の余白まで含めた実際のファイルサイズとは区別します。量子化ビット数と格納に使うビット数が違う場合もありますが、学習例では両者が一致し、付加情報を無視する条件で計算します。

PCMの1秒当たりのバイト数とチャンネル数の関係は、Microsoftの音声形式の公式仕様でも確認できます。ここで使う式は、周波数×1チャンネルの標本サイズ×チャンネル数という関係を、録音時間まで広げたものです。

与えられた値式へ入れる前の換算注意点
48kHz48,000HzkHzのkは1,000倍
2分120秒分のまま掛けない
16ビット16bit、または2バイトバイト数へ直す除算は1回
モノラル/ステレオ1/2チャンネル周波数を変更するのではなく個数を掛ける
MBで回答バイト数÷1,000,0001MB=10⁶バイトとする条件
MiBで回答バイト数÷1,048,5761MiB=2²⁰バイト

単位は問題文の指定を優先します。以下のMBの例では1MB=1,000,000バイトとします。もし「1Mバイト=2の20乗バイト」と指定されていれば、割る数は1,048,576です。同じバイト数でも表示の数値が変わるので、MBという文字だけで換算方法を決めないでください。

特に、周波数のkHzを1,024倍へ変えないことが重要です。48kHzは48,000Hzです。一方、容量のkバイトやMバイトの換算は設問の定義を確認します。入力側の周波数の単位と、答え側の容量の単位は別々に整えると間違いを減らせます。

1秒当たりの総ビット数f×b×cは、ビットレート[bit/s]です。それに秒数を掛けるとbitになり、8で割るとbyteになります。式を書いたあとで単位まで確かめると、時間を掛け忘れた答えや、ビットをバイトとして答えたミスが見つかります。

モノラルとステレオの計算例

まず、16kHz・16ビット・モノラルの音声を30秒録音する例を解きます。非圧縮で、標本以外の付加情報は無視します。入力をそろえると、周波数16,000Hz、ビット数16、時間30秒、チャンネル数1です。

1秒間の記録量は16,000×16×1=256,000bitです。30秒分は256,000×30=7,680,000bit、バイトへ直すと7,680,000÷8=960,000バイトになります。1MB=1,000,000バイトなら、答えは0.96MBです。

別の確認方法として、16ビット=2バイトを先に使えば、16,000×2×30×1=960,000バイトです。途中の計算順が違っても同じ値になるので、検算に使えます。ただしこの計算ではすでにバイトへ直しているため、最後にもう一度8で割ってはいけません。

左右のスピーカーを音声機器につないだ構成
左右2つの音声チャンネルをイメージしやすいステレオ機器の例。スピーカー台数だけでファイルのチャンネル数は決まりません

同じ設定でステレオなら、記録するチャンネルが2つになります。容量は16,000×16×30×2÷8=1,920,000バイト=1.92MBです。左右を別々に記録する分だけ容量が2倍になります。左右の音が似ているかどうかではなく、固定長で2チャンネル分保存する条件を数えます。

「ステレオでは1秒の時間が2秒になる」「周波数16kHzが32kHzになる」と考える必要はありません。各チャンネルはそれぞれ16kHzで、同じ30秒を記録します。そのデータが2組あるので、チャンネル数2を掛けるだけです。

もう少し大きい例として、48kHz・24ビット・ステレオを2分録音すると、48,000×24×120×2÷8=34,560,000バイトです。10進のMBなら34.56MB、MiBなら約32.96MiBとなります。これは同じデータを別の単位で表した差で、圧縮されたから小さくなったわけではありません。

計算条件データ量[バイト]データ量[MB]
16kHz・16bit・30秒・モノラル960,0000.96
16kHz・16bit・30秒・ステレオ1,920,0001.92
48kHz・24bit・120秒・ステレオ34,560,00034.56

モノラルは1チャンネル、ステレオは2チャンネルです。チャンネル数が明記された問題では、見た目の機器構成やスピーカーの台数から推測せず、その指定値を使います。

設定変更の倍率と録音時間の逆算

容量の式は4つの条件の積なので、比較問題は各条件の倍率を掛けると解けます。たとえば24kHz・16ビット・モノラルの録音を、48kHz・24ビット・ステレオへ変え、時間は同じとします。周波数は2倍、ビット数は24÷16=1.5倍、チャンネル数は2倍です。容量は2×1.5×2=6倍になります。

ここで量子化ビット数が16から24へ変わったからといって、容量を2の8乗倍にしないようにしてください。表現できる段階数の倍率は2²⁴÷2¹⁶=256倍ですが、1標本の記録量は24÷16=1.5倍です。段階の細かさと保存するビットの個数は、違う数を比較しています。

同じように、量子化ビット数を8から16にすると、段階数は256から65,536へ増えますが、容量は他条件が同じなら2倍です。計算前に「段階数を問われているのか、容量を問われているのか」を短く書き分けると、指数の式へ引っ張られずに済みます。

録音できる時間を逆算するときは、使える容量を1秒分のバイト数で割ります。式は時間[秒]=容量[バイト]×8÷(周波数×ビット数×チャンネル数)です。録音以外に必要な容量を無視するかどうかも、計算条件として確認します。

例として、使える標本データの容量が24,000,000バイト、設定が24kHz・16ビット・ステレオなら、1秒分は24,000×16×2÷8=96,000バイトです。24,000,000÷96,000=250秒、つまり4分10秒録音できます。得られた250秒を元の式へ戻せば24,000,000バイトになるので検算できます。

ファイル全体の容量が与えられ、一定のヘッダーサイズも指定されているなら、先にその分を引いて標本データへ使える容量を求めます。実際の形式ごとのヘッダーを一律の値で決めつけず、設問で与えられた条件を使ってください。容量の逆算では「使える容量」と「1秒当たりの必要量」を同じバイト単位にそろえるのがコツです。

練習問題で計算ミスを見つける

ここまでの内容を、条件の異なる4問で確かめましょう。先に問題だけを読み、周波数・ビット数・秒数・チャンネル数を抜き出してから解いてみてください。以下はすべて学習用のオリジナル問題です。容量問題は非圧縮で、ヘッダー等の付加情報は無視します。

問題条件と質問
A:用語一定の時刻に取り出した振幅を、最も近い8段階の値へ置き換える処理は何か
B:容量8kHz・8ビット・モノラルを15秒記録すると何kバイトか。1kバイト=1,000バイトとする
C:倍率時間と周波数を変えず、16ビットのモノラルを24ビットのステレオへ変えると容量は何倍か
D:逆算標本データに8,000,000バイト使える。8kHz・16ビット・モノラルで何秒記録できるか

AとBの答えと確認手順

Aの答えは量子化です。すでに取り出した振幅を「最も近い段階へ置き換える」ことが手掛かりになります。一定時刻に取り出すところだけなら標本化、段階をビット列へ対応させるところなら符号化です。8段階を区別するために必要な最小ビット数は3ビットですが、それは処理名とは別に求める値です。

Bの答えは120kバイトです。8,000×8×15×1÷8=120,000バイト、120,000÷1,000=120kバイトになります。8ビット=1バイトなので、8,000×15=120,000バイトと先に単純化しても同じです。960kバイトと出た場合は、ビット数をバイト数へ直す8の除算を忘れていないか確認しましょう。

CとDの答えと確認手順

Cの答えは3倍です。ビット数の倍率は24÷16=1.5倍、チャンネル数の倍率は2÷1=2倍なので、1.5×2=3倍になります。時間も周波数も指定どおり変わらないため、その2つをもう一度掛け直す必要はありません。256倍や512倍なら、段階数の倍率を容量へ使った可能性があります。

Dの答えは500秒です。1秒分は8,000×16×1÷8=16,000バイト、8,000,000÷16,000=500秒となります。秒数を求める問題なのに最後の単位がバイトのままなら、逆算になっていません。500×16,000=8,000,000と戻して確認できます。

間違えたときは、公式を丸暗記し直すだけでなく、どの段階で単位や条件が変わったかを見ましょう。答えがちょうど8倍ならbitとbyte、2倍または半分ならチャンネル数、60倍または60分の1なら分と秒をまず疑います。ただし倍率だけで原因を断定せず、書いた式と問題文を照合します。

また、この公式をMP3などの圧縮後の容量へそのまま当てはめてはいけません。圧縮後のビットレートが与えられているなら、そのビットレート×秒数÷8で考える問題になります。圧縮方式や圧縮率の詳しい比較は別テーマですが、「非圧縮か」「与えられたbit/sは全チャンネルの合計か」は計算前に確認しておきましょう。

計算に必要な指数や単位の復習範囲を整理したい方は、基本情報の数学範囲と優先して学ぶ単元も確認できます。このページのPCM計算と、全体の数学の学習順を分けて使うと、必要な基礎だけを戻って学びやすくなります。

基本情報の標本化・量子化のまとめ

標本化は値を取る時刻、量子化は振幅の段階、符号化は段階のビット表現を決める処理です。3つを区別できたら、非圧縮PCMの容量は「何個の値を、何ビットずつ、何チャンネル保存するか」で説明できます。

計算では、問題文から条件を抜き出し、単位をそろえ、必要な記録量を求め、最後に指定された容量単位へ直します。公式へ入れる数字を先に決めれば、途中の掛け算を約分しても、1秒分を先に求めても同じ答えへ進めます。

  • サンプリング周波数をHz、録音時間を秒へそろえる
  • 量子化ビット数とチャンネル数を掛ける
  • ビットで計算した場合は8で割ってバイトにする
  • 問題文で指定されたkバイト・Mバイトの定義へ換算する

まずはBの容量計算とDの時間逆算を、式を見ずに解き直してみてください。次にチャンネル数やビット数を1つだけ変え、容量が何倍になるかを説明できれば、数字が違う問題にも対応しやすくなります。

計算の意味を確認したあと、問題演習を増やしたい方は、基本情報の過去問アプリで無料演習できます。読んだ内容を覚えるだけでなく、問題文から条件を拾い、自分で単位を書いて解く練習へ進みましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次