我正在做一个音频速记项目。我需要在音频信号(.wav文件)中嵌入一些文本。
因此,我将音频信号的范围从-1转换为1( double ),将-32767转换为+32767(int16),因此我将数据冷嵌入系数的LSB中。
现在的问题是,我不知道如何将值从int16转换为它们各自的 double 等效项。

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

    [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存储到输出文件中。

关于matlab - 音频信号归一化并还原为原始Matlab,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22894559/

10-12 13:44