音频信号的标准化并恢复到原始 matlab



我正在做一个音频速记项目。我需要在音频信号(.wav文件中嵌入一些文本。所以我将范围从 -1 到 1(双精度)到 -32767 到 +32767(int16) 的音频信号进行了转换,所以我将数据冷嵌入到系数的 LSB 中。现在的问题是我不知道如何将值从 int16 获取到它们各自的双精度等价物。

我使用以下代码进行规范化:

    [y, fs, nBits,opts]=wavread('one.wav');
     y2=y-(min(y));
     y2=y2/max(y2);
     y2=y2* (2^16 - 1) - 2^15;
     y2b=int16(y2);

谁能指导我与此相反的过程?

看起来您需要保存(并存储)ymin = min(y)y2max = max(y2)以进行反转。然后获取 int16 的双重版本并根据需要执行反转过程:

y3 = double(y2b);
y3 = (y3 + 2^15) / (2^16 - 1);
y3 = y3 * y2max;
y3 = y3 + ymin;

然后根据需要将 y3 存储到输出文件中。

elomage逆转了规范化,我认为没有任何理由这样做,因为lsb迷路了。

double(x)/intmax(class(x))

最新更新