Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

信号のサンプル レートの変更

この例では、信号のサンプル レートの変更方法を説明します。この例は 2 つの部分で構成されています。最初の部分では、正弦波入力のサンプル レートを 44.1 kHz から 48 kHz に変更します。このワークフローは、オーディオ処理で一般に使用されています。コンパクト ディスクで使用されているサンプル レートは 44.1 kHz で、デジタル オーディオ テープで使用されているサンプル レートは 48 kHz です。2 番目の部分では、録音された音声サンプルのサンプル レートを 7418 Hz から 8192 Hz に変更します。

44.1 kHz でサンプリングされた正弦波の和から構成される入力信号を作成します。この正弦波は、2、4、8 kHz の周波数をもちます。

Fs = 44.1e3;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*2000*t) + 1/2*sin(2*pi*4000*(t-pi/4)) + ...
    1/4*cos(2*pi*8000*t);

サンプル レートを 44.1 kHz から 48 kHz に変更するため、ある指定した許容誤差の範囲で、元のサンプル レート 44100 の P/Q 倍が 48000 になるように有理数 (整数の比) P/Q を決定する必要があります。

これらの係数の決定には rat を使用します。新規サンプル レート 48000 の元のサンプル レート 44100 に対する比を入力します。

[P,Q] = rat(48e3/Fs);
abs(P/Q*Fs-48000)
ans = 7.2760e-12

P/Q*Fs は目的のサンプル レート 48000 と 10-12 の次数だけで異なっていることがわかります。

resample の入力として、rat で求めた係数を分子と分母に使用して、48 kHz でサンプリングした波形を出力します。

xnew = resample(x,P,Q);

コンピューターでオーディオを再生する場合、2 つの波形を再生することができます。信号を再生する前に、音量を心地よいレベルに設定します。2 つの異なるサンプル レートで信号を聞くことができるように、sound コマンドを別々に実行します。

% sound(x,44100)
% sound(xnew,48000)

音声サンプルのサンプル レートを 7418 Hz から 8192 Hz に変更します。音声信号は "MATLAB®" という発声の録音です。

音声サンプルを読み込みます。

load mtlb

mtlb.mat ファイルを読み込むと、音声信号 mtlb とサンプル レート Fs が MATLAB ワークスペースに取り込まれます。

新規サンプル レート 8192 の元のサンプル レートに対する比の有理数近似を計算します。rat を使用して近似値を計算します。

[P,Q] = rat(8192/Fs);

新規サンプル レートで音声サンプルをリサンプリングします。2 つの信号をプロットします。

mtlb_new = resample(mtlb,P,Q);

subplot(2,1,1)
plot((0:length(mtlb)-1)/Fs,mtlb)
subplot(2,1,2)
plot((0:length(mtlb_new)-1)/(P/Q*Fs),mtlb_new)

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

コンピューターにオーディオ出力機能がある場合、比較のため、それぞれのサンプル レートで 2 つの波形を再生することができます。音声を再生する前に、コンピューターで音量を心地よい聴取レベルに設定します。sound コマンドを別々に実行して、異なるサンプル レートで音声サンプルを比較します。

% sound(mtlb,Fs)
% sound(mtlb_new,8192)

参考