デジタル信号処理の話をしようとしたらオーディオ談義になりそうで、これを生半可にやると炎上しかねないので早々に退却することにします。
置き土産に scilab を使ってオーディオファイルに量子化ノイズを付加する方法を書いておきます。
誰もやらないとは思いますが。
原理は簡単で、オーディオファイルのレベルを半分とかさらに半分とか下げてから下位ビットを切り捨てておき、またレベルを戻すことで量子化ノイズを付加しようとするものです。
といっても音楽ファイルはデータサイズが大きいので、SoundEngineFree などでオーディオファイルを読み込んだ後、適当なサイズ(数秒ぐらいが無難)だけ切り出して、sound.wav としてワークフォルダに入れて使うことをお勧めします。
SoundEngineFree に関する記事はこれ。
「scilab」で遊ぼう>オーディオ信号にリバーブを掛けてみる
http://blogs.yahoo.co.jp/susanoo2001_hero/6744194.html
scilab スクリプトは以下のようです。
// wave fileを読み込んで量子化ノイズを増やす。
// スタックのサイズを最大にする。
stacksize('max')
// sound.wav というファイルを読み込む。
[y,Fs,bits]=wavread('sound.wav');
// フォーマットの確認
// Fs=サンプリング周波数、bits=量子化ビット数を表示
disp(Fs)
disp(bits)
// データサイズ
sy=size(y,'c')
// 量子化誤差を発生させるビット数
bn=1;
// 1 ビット削減するとレベルが半分
n=2^bn
yy=y/n;
// レベルを下げてセーブすることで下位ビットが欠落
wavwrite(yy,Fs,'tempsound')
// 読み込む
z=wavread('tempsound');
// 下げた分を上げる。下位ビットは強制ゼロ
zz=z*n;
// 元ファイルの後ろにビットを欠落させたデータをつなぐ
testwave=y
testwave(1:2,sy+1:sy*2)=zz
// sound1 として保存
wavwrite(testwave,Fs,'sound1')
*** ここまで ***
n を増やしていけばその分ビットが欠落するはずです。
やってみた感じでは...内緒です。
お暇でしたら試してみて下さい。
ショックを受けても...いやそんなはずはないですよね。
もっと簡単にやりたい人は、Windows Media Player を使って音量を下げて再生し、アンプのボリュームを上げれば量子化ノイズが堪能できると思います。
次からは話を戻して、制御系におけるデジタル信号処理について考えてみようと思います。
置き土産に scilab を使ってオーディオファイルに量子化ノイズを付加する方法を書いておきます。
誰もやらないとは思いますが。
原理は簡単で、オーディオファイルのレベルを半分とかさらに半分とか下げてから下位ビットを切り捨てておき、またレベルを戻すことで量子化ノイズを付加しようとするものです。
といっても音楽ファイルはデータサイズが大きいので、SoundEngineFree などでオーディオファイルを読み込んだ後、適当なサイズ(数秒ぐらいが無難)だけ切り出して、sound.wav としてワークフォルダに入れて使うことをお勧めします。
SoundEngineFree に関する記事はこれ。
「scilab」で遊ぼう>オーディオ信号にリバーブを掛けてみる
http://blogs.yahoo.co.jp/susanoo2001_hero/6744194.html
scilab スクリプトは以下のようです。
// wave fileを読み込んで量子化ノイズを増やす。
// スタックのサイズを最大にする。
stacksize('max')
// sound.wav というファイルを読み込む。
[y,Fs,bits]=wavread('sound.wav');
// フォーマットの確認
// Fs=サンプリング周波数、bits=量子化ビット数を表示
disp(Fs)
disp(bits)
// データサイズ
sy=size(y,'c')
// 量子化誤差を発生させるビット数
bn=1;
// 1 ビット削減するとレベルが半分
n=2^bn
yy=y/n;
// レベルを下げてセーブすることで下位ビットが欠落
wavwrite(yy,Fs,'tempsound')
// 読み込む
z=wavread('tempsound');
// 下げた分を上げる。下位ビットは強制ゼロ
zz=z*n;
// 元ファイルの後ろにビットを欠落させたデータをつなぐ
testwave=y
testwave(1:2,sy+1:sy*2)=zz
// sound1 として保存
wavwrite(testwave,Fs,'sound1')
*** ここまで ***
n を増やしていけばその分ビットが欠落するはずです。
やってみた感じでは...内緒です。
お暇でしたら試してみて下さい。
ショックを受けても...いやそんなはずはないですよね。
もっと簡単にやりたい人は、Windows Media Player を使って音量を下げて再生し、アンプのボリュームを上げれば量子化ノイズが堪能できると思います。
次からは話を戻して、制御系におけるデジタル信号処理について考えてみようと思います。