読者です 読者をやめる 読者になる 読者になる

shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

テスト信号の準備

MATLAB / Octave

<概要>

動作チェックに欲しいwavファイルを,MATLAB/Octaveで制作.
今回は,エネルギーが一定のものを用意.
dB値の基準を,複数のプログラム間で揃える必要があるため.

 

<制作するデータ>

  • constant minimum bit : 全サンプルが,正の最小値
  • constant full bit : 全サンプルが,正の最大値
  • sin 1000 Hz full bit : 最大値が正の最大値となる,1000 Hzの正弦波
  • sin 4000 Hz full bit : 最大値が正の最大値となる,4000 Hzの正弦波

 

<諸元>

  • サンプリングレート Fs : 44100 Hz
  • 総サンプル数 N : 4410 (0.1 sec)
  • 量子化ビット数 bits : 16 bit

MATLAB/Octaveさんのwavfileでは,最大値は 2^(bits-1)-1 のようです.
このため,変数gainなどを設置し,値域の調整を行っています.

 

<ソースコード>

% generate sample wave files

% setting
Fs = 44100;
N = 4410;
bits = 16;
minibitval = 1 / (2^(bits-1));
fullbitval = (2^(bits-1) - 1) / (2^(bits-1));

% constant minimum bit
gain = minibitval;
dat = ones(1,N) * gain;
wavwrite(dat, Fs, bits,'constant_minibit_44100_4410.wav');

% constant full bit
gain = fullbitval;
dat = ones(1,N) * gain;
wavwrite(dat, Fs, bits,'constant_fullbit_44100_4410.wav');

% sin 1000 Hz full bit
sinufreq = 1000;
gain = fullbitval;
dat = sin(2 * pi * sinufreq / Fs * ( (1:N) - 1) ) * gain;
wavwrite(dat, Fs, bits,'sin_1000Hz_fullbit_44100_4410.wav');

% sin 4000 Hz full bit
sinufreq = 4000;
gain = fullbitval;
dat = sin(2 * pi * sinufreq / Fs * ( (1:N) - 1) ) * gain;
wavwrite(dat, Fs, bits,'sin_4000Hz_fullbit_44100_4410.wav');