【问题标题】:Detection of time-spreaded echos时间扩展回波的检测
【发布时间】:2017-07-31 04:33:36
【问题描述】:

我最近一直在尝试在 MATLAB 中实现基于 Echo Hiding 的音频水印(隐写术)技术。正如W.Bender & D.Gruhl 在 1996 年所描述的那样,我能够通过单个回声隐藏和提取数据。这种技术有许多改进版本,例如添加正和负回声、backward and forward echos、time-spreaded echos 等。

当只有很少的回声时,使用倒谱相关来捕捉编码信号中的回声峰值并不难。但是,当我尝试使用如下所示的伪随机序列实现时间扩展回声隐藏方法时,在检测回声期间对我来说变得不可能:

这是我生成时间扩展回声的方式。这不是数据隐藏的进展。我尽可能多地剪掉它以缩短我的代码:

[audio.data, audio.fs] = audioread('test.wav');
[audio.len, audio.ch] = size(audio.data);

key = 'password';                 %Key to generate a pseudo-random sequence
rand('seed', sum(double(key)));   %Set seed of random sequence using sum of key
a   = rand(1023, 1);              %1023 pseudo-random numbers between 0 and 1
pr  = sign(a -.5);                %Convert pseudo-random sequence into +1 and -1 

delay = 50;                       %Delay (in samples)
alpha = .02;                      %Echo amplitude

echo_kernel = [1; zeros(delay-1,1); pr] * alpha;    %Echo kernel

%Echoed signal via convolution with echo kernel for each channels
for i=1:audio.ch
    echoed(:,i) = conv(audio.data(:,i), echo_kernel);     
end

如何检测第 50 个样本后添加的回声?当我只添加少量回波时,下面的倒谱相关性为我提供了所需的峰值,但它不适用于时间扩展回波。

ifft(log(fft(signal).^2))         %Cepstrum correlation of audio signal

在创建回显内核时我做错了什么吗?我使用了一个类似的内核而不使用伪随机序列来获得一个带有以下代码的单一回显,并且效果很好:

alpha = .6; delay = 50;
echo_kernel = [1; zeros(delay-1,1); 1] * alpha;     %Echo kernel

为了简化这项技术,我设置了pr = ones(1023,1),希望能捕捉到回波的峰值。作者建议在回波信号的倒谱和 PN 序列之间使用互相关。我已经在复杂的倒谱xcorr(ifft(log(fft(signal))), pr) 上尝试过它,并且有许多可能的变化,包括真正的倒谱。我已经绘制了所有的试验,试图看看我会在哪里赶上一个高峰,但我没有得到我想要的结果。

希望有人也对同一领域感兴趣。

提前致谢。

【问题讨论】:

  • 伪随机序列就像噪声一样,尝试在帧大小Lpn之前及时过滤信号,并对信号的属性和它的回声。属性可能是 FFT 峰。
  • @SACHIN 我猜这里使用的伪随机序列的逻辑与我们用于扩频的逻辑有点不同,不是吗?你建议我使用什么样的过滤器?低通?您的意思是与您的共同相关的互相关吗?

标签: matlab audio watermark steganography audio-processing


【解决方案1】:

n 单回波隐藏,在倒谱域有一个大的单峰对应回波。因此,嵌入的数据可能会被解码 没有任何特殊信息,只使用倒谱分析。然而,在时间扩展回波方法中,存在许多非常小的峰值 倒谱域中的幅度。因此,仅使用倒谱分析很难检测到嵌入数据。要对嵌入数据进行解码,必须使用编码过程中使用的原始 PN 序列对隐藏在倒谱域中的时延回波进行解扩。

【讨论】:

  • 我已经阅读了背后的全部理论。我知道如何使用泰勒级数分析倒谱以捕捉峰值。几个回声很清楚,但是正如您所说,ts 方法的情况有所不同。你能更开放地使用绝望的步骤吗?你使用对数缩放吗?有示例代码吗?
  • 我正在做这部分工作,当我找到解决方案时会通知你
  • 谢谢。除了这个之外,我还能够实现所有其他基于扩频和回声隐藏的方法。因此,如果您需要比较或查看,我也可以帮助您分享我的源代码。让我们保持联系。
  • 自从我被卡住以来我没有看过算法,在你发表评论后我尝试了更多,我想我已经解决了这个问题。我终于可以找回信息了。我使用了 xcorr(ccorr, pn),它给出了 L+d+1 附近的峰值。终于!
  • 好,我为你感到高兴!,对我来说,我必须做一些不同的事情,我不得不应用另一种方法,这是我的程序:
猜你喜欢
  • 2021-08-16
  • 2018-12-16
  • 2012-01-08
  • 2016-11-06
  • 2021-08-04
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多