#33

標本化と量子化(音をデジタルにする)

サイン波を一定間隔で測り(標本化)、整数に丸める(量子化)様子を棒で表示します。

解説

マイクで拾った音はなめらかに変化するアナログ信号です。これをコンピュータに記憶させるには2つの段階でデジタル化します。 1つ目が「標本化(サンプリング)」:時間を細かく区切って一定間隔で値を測ります。2つ目が「量子化」:測った値を決まった段数(ここでは0〜7の8段階)の整数に丸めます。 mathのsinでサイン波を作り、16点で標本化し8段階に量子化して棒グラフで表示します。なめらかな波が数値の列に変わる様子が、音や画像をコンピュータが扱える仕組みそのものです。

書き方

音のデジタル化 = 標本化(一定間隔で値を測る)→ 量子化(決まった段数の整数に丸める)。
・import math で数学モジュールを読み込み、math.sin / math.pi を使う。
・round(値) で四捨五入して整数の段に丸める。
・"#" * 回数 で文字をくり返し棒グラフを作る。
・f"{i:2d}" や f"{wave:+.3f}" で桁数・符号・小数桁を指定して整形。

書いて動かす

この回の課題

サイン波を16点で標本化し0〜7の8段階に量子化して、量子化値と # の棒グラフで波がデジタルの数値列に変わる様子を見よう。

コードはあなたの端末の中だけで動きます(サーバーには送られません)。進み具合もこのブラウザに保存されます。

自分のPCでも続けてみませんか

Windows版 InsightPy は Python を同梱しているので、環境構築なしで同じコードを書いて実行できます。 書いたコードを保存しておけるほか、ステップ実行で変数の変化を1行ずつ確かめられます。 個人の学習や私的な目的でのご利用は、31日目以降も無料です(スクリプトの保存は10本まで)。 このブラウザ版の学習センターも、引き続き無料でお使いいただけます。