サンプリングレート
同じ音でも異なるサンプリングレートでPCM化できることを本講義では学んだ。
quiz4,6,8,9 は目標ファイルのサンプリングレートが参照ファイルと異なっている。
しがたってそのまま波形を比較できない。
ではサンプリングレートが高い方を間引いて計算してはどうだろうか?
これはある程度うまくいくが、うまくいかない場合もある。
エリアシングを起こしてしまうからだ。エリアシングがなければうまくいき、エリアシングがあれば誤差が生じる。
耳で聞いた場合に最も近い場所を探すためには、エリアシングの問題のない比較方法を用いる必要がある。
フーリエ変換をした結果について以下がいえることを学んだ。
N秒間の信号のフーリエ変換において、フーリエ変換の1サンプルあたりの周波数分解能は 1/N Hzである。
で、あるから、参照信号と、目標信号の時間単位での長さをそろえてフーリエ変換を行えば、そのサンプル同士は直接比較できる。ただしサンプリングレートが少ない方のフーリエ変換はフーリエ変換の結果のデータ数は少ないから、両者の最初から何サンプルかを切り出して比較すればよいことになる。
program3を改良してこのような処理を行えば比較が可能だ。
以下のような処理になる。
(1) x=目標信号
(2) y=参照信号からxと同じ長さを切り出す
(3) fx = abs(fft(x,-1));
(4) fy = abs(fft(y,-1));
(5) fx2=fx(1:8000);
(6) fy2=fy(1:8000);
DC成分
以上すべての対策を行ってもまだうまくマッチングがとれないものがある。それはDC成分の誤差によるものだ。
DC成分は前サンプルに影響を及ぼしていて、サンプル数に比例して誤差に現れるので、たいていの場合は非常に大きい値になる。音の差を計算する場合にはフーリエ変換の結果からDCに近い成分は除外した方がよい。たとえば以下のようになる。
(1) x=目標信号
(2) y=参照信号からxと同じ長さを切り出す
(3) fx = abs(fft(x,-1));
(4) fy = abs(fft(y,-1));
(5) fx2=fx(10:8000);
(6) fy2=fy(10:8000);
これで完成
このように、以上3つの工夫をprogram 2に加えれば、今回の問題はすべて正しく回答できる。
(1) フーリエ変換を用いてスペクトルを比較する
(2) サンプリングレートが異なる場合は両方に含まれるスペクトルのみを比較する
(3) 直流成分の誤差は計算から除外する。