0

内蔵ツールボックス以外のツールボックスを使用せずに、サウンド ウェーブ (16 ビット シングル チャネル) を録音して、audiorecorder15 ビットに量子化する必要があります (LSB を削除) 。誰でもこれについて助けることができますか?MATLAB

fs = 8000;
tmax = 2;
nbits = 16;
nchan = 1;
Recorder = audiorecorder(fs, nbits, nchan);
record(Recorder);
pause(tmax);
stop(Recorder);
4

2 に答える 2

0

MATLAB で関数 bitshift を使用できます。私は信じている

Recorder = audiorecorder(fs, nbits, nchan);
data = getaudiodata(Recorder, 'int16');
outData = bitshift(data, -1);

お役に立てれば。

ディネッシュ

于 2015-08-18T14:07:01.423 に答える
0

わかりました、これは宿題の質問であり、解決策ではなく方法を求めていることを認めているので、最初に信号値が必要です

x = Recorder.getaudiodata('int16');

量子化する予定なので、正規化される [-1, 1] の double とは対照的に、適切な範囲の値から始めることもできます。

したがって、次に 16 ビットから 15 に量子化する必要があります。これは実際、matlab では非常に簡単です。大量のコードを記述している場合、おそらく機能しないでしょう。いくつかの方法があります。

基本的に、1 ビットを削除すると、半分の情報が破棄されます。

2 ビット精度の数値 0、1、2、3 を取ります。バイナリでは、00、01、10、11 です。1 ビットに量子化すると、半分の情報が破棄されます。LSB がなくなったと想像してください。私は 0、0、1、1 を持っています。しかし、私の元の数値は 0 から 3 にまたがっています...通常は、数値に同じダイナミック レンジを持たせたいと考えています。数字の半分を捨てたので、新しい数字を 2 倍にするとどうなるでしょうか? 0、0、2、2 が得られます。これは 2 ビットから 1 ビットへの正しい量子化です。

あなたの問題で、すべての奇数が偶数だったらどうなるでしょうか?

于 2015-08-18T04:29:27.473 に答える