【问题标题】:normalisation of audio signal and reverting to original matlab音频信号的归一化并恢复为原始 matlab
【发布时间】:2014-05-18 15:24:19
【问题描述】:

我正在做一个音频速记项目。我需要在音频信号(.wav 文件)中嵌入一些文本。 所以我将音频信号从 -1 转换为 1(double)到 -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);

谁能指导我这个相反的过程?

【问题讨论】:

  • 注意 max(y2) 何时等于 0 - zerodivide!

标签: matlab audio steganography


【解决方案1】:

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

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

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

【讨论】:

  • @elomage-我仍然没有得到与原始波形相似的波形...第一个元素的值为 0,在您处理后获得的波形中值为 -0.5..
  • 请注意,y2max 和 ymin 是您在上面的代码中获得的值。我刚刚为样本值 0 运行了一个示例,其中 -1 作为最小值,+1 作为原始信号的最大值,反转后我得到 0。
【解决方案2】:

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

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

【讨论】:

  • 你能澄清一下你的答案吗?...我不明白
  • 如果您的信号在 -32767...32767 范围内,则必须除以 32767 才能将其缩放到 -1...1
  • 所以,基本上我必须遍历所有值并除以 32767 才能得到双精度值吗?
  • 你不需要循环,x 可以是向量。
  • 这是一个巧妙的技巧。然而,在 Daniel 之后,你得到的是一个规范化的信号,而不是原来的信号,因为它可能不完美或发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2012-11-05
  • 2016-01-11
相关资源
最近更新 更多