我使用MATLAB
录制了一个声波(16位单通道),我需要使用除{{{}之外的工具箱将其量化为15位(删除LSB)而不使用 1}}内置的。任何人都可以帮忙吗?
fs = 8000;
tmax = 2;
nbits = 16;
nchan = 1;
Recorder = audiorecorder(fs, nbits, nchan);
record(Recorder);
pause(tmax);
stop(Recorder);
答案 0 :(得分:0)
好的,既然你承认这是一个家庭作业问题并且要求方法不是解决方案,首先,你需要信号值
x = Recorder.getaudiodata('int16');
由于你要进行量化,你可以从正确范围内的值开始,而不是将被归一化的双精度[-1,1]
所以,接下来你需要将16位量化为15.这在matlab中实际上非常简单,如果你要编写大量代码,它可能无法正常工作。有几种方法可以做到这一点。
基本上,当您移除1位时,您丢弃了一半的信息。
取数字0,1,2,3,它们具有2位精度。在二进制,00,01,10,11。如果我量化为一位,我扔掉一半的信息。想象一下LSB消失了,我有0,0,1,1。但是,我的原始数字跨越0到3 ...通常你希望你的数字具有相同的动态范围。所以,我扔了一半的数字,如果我将新数字缩放2怎么办?我得到0,0,2,2。这是从2到1位的正确量化。
在你的问题中,如果所有奇数都是偶数会怎么样?
答案 1 :(得分:0)
您可以在MATLAB中使用bitshift功能。我相信
Recorder = audiorecorder(fs, nbits, nchan);
data = getaudiodata(Recorder, 'int16');
outData = bitshift(data, -1);
希望这有帮助。
的Dinesh