MATLABによる音声処理1

ページトップへ 一つ上へ

ポイント


サンプリング周波数、時間波形



さてさて、今回から音声処理についてやって行こうと思います。
まずは基本的な所から、音声とは何か?について説明します。
音声というのは声の音とでも言いましょうか。
人間が出す声の事を音声といいます。

音声処理というのはその音声をコンピュータ上で何らかの処理をする事です。
音声合成、音声認識、音声符号化など応用分野はありますが、
それ以前の話から進めていきます。
まずは音声ファイルを読み込んで、それをプロットしてみましょう。
ここにサンプルの音声を置いておきます→サンプル音声
右クリック→対象をファイルに保存 で、MATLABのWORKフォルダに保存してやって下さい。
function sp_proc1

%
% 音声処理
% 波形をそのまま表示
%
%

[x,fs]=wavread('ise4.wav');

plot(x);


これを実行してみて下さい。
下のような図が表示されると思います。



この図は縦軸が振幅、横軸がポイント数(データ数)です。
横軸がこのままではわかりにくいので、時間(秒)にする必要があります。
ポイント数を時間に変換するタメには、サンプリング周波数というものを用います。

サンプリング周波数というのは、アナログからデジタルに変換する際に、
一秒間に何回の割合でデータにしていくかという数値です。
単位は「Hz」を使います。ちなみにCDのサンプリング周波数は44100Hzです。
これは1秒間に44100個のデータがあるという事です。
このサンプリング周波数が大きいとそれだけ精密に元の信号が表せているというものです。
また、このサンプリング周波数にはサンプリング定理というものがあります。
これは、信号の周波数の2倍以上の周波数でサンプリングをしないといけないというものです。
いけないというわけでもないのですが、2倍以上の周波数でサンプリングをしないと、
信号が元通りに復元が出来ません。いわゆるエイリアシングという現象になります。

またこれと似たものに、量子化ビット数というものがあります。
これは一つ一つのデータがどれだけの細かさで表現するかを表したもので、
単位は「bit」を使います。ちなみに、量子化ビット数が1bitの場合は、
データは1か0で表現されます。

音声波形の縦軸を振幅、横軸を時間とした場合、
サンプリング周波数:横方向へのデータの精密さ
量子化ビット数:縦方向へのデータの精密さ
と言い換える事ができます。

では、このサンプリング周波数という情報をどうやって取り出すかという事ですが、
さきほどのプログラムの音声読み込みの部分で、
[x,fs]=wavread('ise4.wav');
とありましたが、この「fs」というのがサンプリング周波数にあたります。
では、ポイント数とサンプリング周波数からどうやって時間を求めるかといいますと、
サンプリング周波数は1秒間のポイント数なので、
ポイント数/サンプリング周波数=時間
という事になります。
では、この時間を横軸として図形を表示してみましょう。
function sp_proc1

%
% 音声処理
% 横軸は時間
%
%

[x,fs]=wavread('ise4.wav');
t=(0:length(x)-1)/fs;

plot(t,x);
xlabel('Time [s]');
ylabel('Amplitude');


これを実行してみると、以下のような波形が表示されます。



横軸を見てみると、0.8ぐらいになっています。
この単位は秒なので、この音声は1秒弱ぐらいという事がわかります。