在 MATLAB 中量化录音机样本

Quantizing a audiorecorder sample in MATLAB

我使用 audiorecorder 录制了一个声波(16 位单通道),我需要将其量化为 15 位(去除 LSB) 不使用 MATLAB 内置工具箱以外的工具箱。有人可以帮忙吗?

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

好的,既然您承认这是一道作业题,并且要求的是一种方法而不是解决方案,那么首先,您需要信号值

x = Recorder.getaudiodata('int16');

由于您要进行量化,因此您不妨从正确范围内的值开始,而不是将标准化 [-1, 1]

的双精度值

所以,接下来你需要从 16 位量化到 15 位。这在 matlab 中实际上很容易,如果你正在编写大量代码,它可能无法工作。有几种方法可以做到这一点。

从本质上讲,当您删除 1 位时,您将丢弃一半的信息。

取具有2位精度的数字0、1、2、3。在二进制中,00、01、10、11。如果我量化为一位,我会丢掉一半的信息。想象一下 LSB 消失了,我会有 0、0、1、1。但是,我的原始数字跨度为 0 到 3……通常您希望您的数字具有相同的动态范围。所以,我扔掉了一半的数字,如果我将新数字缩放 2 会怎么样?我得到 0、0、2、2。这是从 2 位到 1 位的正确量化。

在你的问题中,如果所有的奇数都是偶数会怎样?

您可以在 MATLAB 中使用 bitshift 函数。我相信

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

希望对您有所帮助。

迪内什