簡體   English   中英

檢測時間傳播的回聲

[英]Detection of time-spreaded echos

我最近一直試圖在MATLAB中實現基於Echo Hiding的音頻水印(隱寫術)技術。 我能夠通過單個回聲來隱藏和提取數據,正如W.Bender和D.Gruhl在1996年描述的那樣 。這種技術的許多改進版本,例如添加正反回聲, 后向和前向回聲時間傳播回聲

當只有很少的回聲時,使用倒譜相關來捕獲編碼信號中的回聲峰值並不困難。 但是,當我嘗試使用如下所示的偽隨機序列實現時間擴散回聲隱藏方法時,在檢測回聲期間我變得不可能:

在此輸入圖像描述

這是我生成時間擴散回聲的方法。 這不是數據隱藏進度。 我盡可能地剪斷了它以縮短我的代碼:

[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

創建echo內核時我做錯了嗎? 我使用類似的內核而不使用偽隨機序列來獲得帶有以下代碼的sigle echo,並且它非常有效:

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)和許多可能的變化(包括真正的倒譜xcorr(ifft(log(fft(signal))), pr)上嘗試過它。 我已經繪制了所有的試驗,試圖看到我會在哪里找到一個高峰,但我沒有得到任何結果。

我希望有人也對同一領域感興趣。

提前致謝。

n單回波隱藏,在倒譜域中存在對應於回波的大單峰。 因此,僅使用倒譜分析可以在沒有任何特殊信息的情況下解碼嵌入數據。 然而,在時間擴散回波方法中,在倒譜域中存在許多具有非常小幅度的峰值。 因此,僅使用倒譜分析幾乎檢測不到嵌入數據。 要對嵌入數據進行解碼,您必須使用編碼過程中使用的原始PN序列對隱藏在倒譜域中的時間擴散回波進行解擴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM