ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

オーディオ サンプルレートの変換

この例では、多段およびマルチレート アプローチを使用してさまざまなオーディオのサンプルレートを変換する方法を説明します。

サンプルレートを 44.1 KHz から 96 KHz に変換

44.1 kHz (CD 品質) でサンプリングしたオーディオ信号から 96 kHz (DVD 品質) でサンプリングしたオーディオ信号への変換の最初のステップでは、オーディオ ファイル リーダーで元の (ソース) オーディオ信号をストリーミングする設定を行います。この例では OGG ファイルを使用しますが、44.1 kHz でサンプリングされた任意のオーディオ ファイル (MP3、FLAC、WAV、M4A) に容易に置き換えることができます。

% Here you create a System object to read from an audio file and
% determine the file's audio sampling rate.
frameSize = 14700;
AR = dsp.AudioFileReader('guitar10min.ogg', ...
    'SamplesPerFrame', frameSize, ...
    'OutputDataType', 'double');

fileInfo = info(AR);
inFs = fileInfo.SampleRate; % Input Fs assumed to be 44.1 kHz

サンプルレート コンバーターの設定

目的の (両側) 波帯域 (オーディオ情報が含まれる周波数帯) の範囲は [-20 kHz, 20 kHz] にわたります。つまり、目的の両側波帯域は 40 kHz です。入力信号は 44.1 kHz でサンプリングされ、出力信号は 96 kHz でサンプリングされます。

SRC = dsp.SampleRateConverter('Bandwidth',40e3,'InputSampleRate',inFs,...
    'OutputSampleRate',96e3);

変換に使用するフィルターの解析

info() を使用して、変換を実行するように設計されたフィルターの情報を取得します。visualizeFilterStages() を使用して、各フィルターの応答を表示します。

info(SRC)
visualizeFilterStages(SRC)
ans =

Overall Interpolation Factor    : 320
Overall Decimation Factor       : 147
Number of Filters               : 2
Multiplications per Input Sample: 119.360544
Number of Coefficients          : 8642
Filters:                         
   Filter 1:
   dsp.FIRRateConverter - Interpolation Factor: 160
                        - Decimation Factor   : 147 
   Filter 2:
   dsp.FIRInterpolator  - Interpolation Factor: 2 


サンプルレート変換では 0 ~ 20 kHz に対象帯域が維持されます。その後、非常に大きな値 (160*44.1e3) まですべてのスペクトルの複製が抑制されます。係数 147 で間引きを行うことで、新しいスペクトルの複製は 48 kHz の倍数を中心とし、±20 kHz の帯域にまたがるものとなります。2 の内挿フィルターの役割は、複製を 1 つおきに抑制して 96 kHz の倍数を中心とした複製のみを残すことです。

変換済み信号のためのオーディオ ファイル ライターの作成

信号を 96 kHz に変換したら、AudioFilterWriter を使用して元のオーディオ ファイルに書き込むことができます。

% Here you create a System object to write a FLAC audio file
AW = dsp.AudioFileWriter('guitar10min_96kHz.flac',...
    'FileFormat','FLAC',....
    'SampleRate',SRC.OutputSampleRate);

主処理ループ

これには数分かかる場合があります。

while ~isDone(AR)
    sig = step(AR);      % Read audio input
    sig = step(SRC,sig); % Convert sample-rate
    step(AW, sig);       % Write output audio
end

リリース ファイル リーダー/ライター

release(AR);
release(AW);

サンプルレートを 96 KHz から 44.1 KHz に変換

96 kHz から 44.1 kHz への変換は、逆の手順で実行できます。まず、係数 2 で間引きを行うハーフバンド フィルターを使用して 96 kHz から 48 kHz への変換を行います。次に、内挿係数 147 および間引き係数 160 のサンプルレート変換を使用して、44.1 kHz の信号を取得します。ここで重要な違いは、両方のフィルターの遷移幅が 8 kHz になるだろうという点です。以前と同様に、まず AudioFileReader を作成します。2 つのフィルターの設計例は次のとおりです。

% Here you create a System object to read from an audio file and
% determine the file's audio sampling rate.
frameSize = 16000;
AR = dsp.AudioFileReader('guitar10min_96kHz.flac', ...
    'SamplesPerFrame', frameSize, ...
    'OutputDataType', 'double');

fileInfo = info(AR);
inFs = fileInfo.SampleRate;

SRC = dsp.SampleRateConverter('Bandwidth',40e3,'InputSampleRate',96e3,...
    'OutputSampleRate',44.1e3);

% Here you create a System object to write an OGG audio file
AW = dsp.AudioFileWriter('guitar10min_44.1kHz.ogg',...
    'FileFormat','OGG',....
    'SampleRate',SRC.OutputSampleRate);

主処理ループ

これには数分かかる場合があります。

while ~isDone(AR)
    sig = step(AR);  % Read audio input
    sig = step(SRC,sig); % Convert sample-rate
    step(AW, sig);  % Write output audio
end

リリース ファイル リーダー/ライター

release(AR);
release(AW);
この情報は役に立ちましたか?