gpt4 book ai didi

matlab - 检测时间扩散回波

转载 作者:行者123 更新时间:2023-12-02 23:38:07 24 4
gpt4 key购买 nike

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

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

enter image description here

这是我生成时间扩展回波的方法。这不是数据隐藏进度。我尽可能地缩短它以缩短代码:

[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)上进行了尝试,并进行了许多可能的变化,包括实际倒谱。我已经绘制了所有的试验图,试图找出要达到峰值的位置,但是我没有得到想要的结果。

我希望有人对同一 Realm 也感兴趣。

提前致谢。

最佳答案

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

关于matlab - 检测时间扩散回波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42708080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com