【问题标题】:Quantizing a audiorecorder sample in MATLAB在 MATLAB 中量化录音机样本
【发布时间】:2015-08-18 02:54:48
【问题描述】:

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

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

【问题讨论】:

  • 请提供更多详细信息。任何示例代码?你从多少位开始,你想量化到多少?
  • 还是一头雾水,你是从 16 位开始的,你想量化到 16 位?我错过了什么?
  • 这是作业吗?
  • @crowdedComputeeer 是的,但我不是在寻求解决方案。我只要求这里的方法。这就是为什么原来的帖子太简短了。

标签: matlab audio quantization


【解决方案1】:

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

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

希望这会有所帮助。

饭菜

【讨论】:

    【解决方案2】:

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

    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 位的正确量化。

    在你的问题中,如果所有奇数都是偶数会发生什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多