音声圧縮処理の基本 ―― 音楽CDやWAVファイルで使われている波形符号化方式
tag: 組み込み ディジタル・デザイン Interface
技術解説 2010年7月22日
●Scilab演習 ---- PCMを実行する
音声データに対して,3ビットのPCMを実行してみましょう.Scilabのプログラムをリスト1に示します.結果の波形を図7に示します.
リスト1の①では,音声ファイルspeech.wavを読み込み,その情報を取り出しています.このとき,Fsにサンプリング周波数,Btに量子化のビット数,Mに音声サンプルの個数が格納されます.また,音声サンプルは絶対値1未満に正規化された値としてsに格納されます.sは横1列に要素を持つ横ベクトルとなっています.
図6を参照して,正負の値があることを考慮すれば,3ビットのPCM信号s3はリスト1の②のようにして得られます.sign()は各要素の符号を取り出す関数です.ceil()は小数点以下を切り上げて整数化する関数です.また,.*は要素ごとの乗算を表します.
Scilabで以下のコマンドを実行すると,それぞれの音声を確認できます.
playsnd(s, Fs);
playsnd(s3, Fs);
3ビットでは,0を表現しないことで生じるノイズが多く含まれ,音声波形の保存に十分でないことが分かります.
●Scilab演習 ---- 二つのPCMを比較する
図6で示した二つのPCMの違いを確認してみます. Scilabのプログラムをリスト2に示します.結果の波形を図8に示します.
リスト2の①で,音声ファイルspeech.wavを読み込みます.
図6(b)に基づく3ビットのPCM信号s3_0をリスト2の②のようにして得ます.
図8は,図7と比較するとノイズがなく良好な波形に見えるかもしれません.しかし,Scilabで以下のコマンドを実行してそれぞれの音声を確認すると,図6(a)に基づく3ビットのPCM信号s3の方がノイズは大きいものの音声の明瞭度が高いことが確認できます.
playsnd(s3, Fs);
playsnd(s3_0, Fs);