⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 water_echo.m

📁 Program that implements echo watermarking. The basic idea is to embed a watermark by adding an e
💻 M
字号:
format long; %need more sig figs!

%Program that implements echo watermarking.
%The basic idea is to embed a watermark by
%adding an echo to the original sample.

%this may be improved by adding a mixing
%function for transitions between 0 and 1

[in,fs] = wavread('input.wav');
mrk = [1 1 1 1 0 0 0 0];
mln = length(mrk);
len = length(in);
blk = floor(len/mln);
out = zeros(len,1);
led = zeros(len,1); %Embedding '1' kernel 
tst = zeros(len,1);
tstled = zeros(len,1);
cnt = 1;

led(1:50) = 0;
led(51:len) = in(1:(len-50));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Watermark embedding algorithm
for K=1:blk:(blk*mln)
    if (mrk(cnt) == 1)
        %do echo watermark for '1'
        out(K:(K-1)+blk) = .25*led(K:(K-1)+blk) + in(K:(K-1)+blk); 
    else
        %do echo watermark for '0' - no echo added!
        out(K:(K-1)+blk) = in(K:(K-1)+blk); 
   end
   cnt = cnt + 1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wavwrite(out,fs,'echo_out.wav');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%testing for survival against re-sampling
%PASSES nicely!
%[xs,fs1] = wavread('input.wav');
%wavwrite(xs,fs1/2,'resamin.wav');
%[in,fs11] = wavread('resamin.wav');
%[ws,fs2] = wavread('echo_out.wav');
%wavwrite(ws,fs2/2,'reswat.wav');
%[tstin,fs22] = wavread('reswat.wav');

%testing for the addition of noise in the time-domain
%Fails miserably, as expected, unless very small noise addition
%tstin(1:mln*blk) = .0000001*rand(mln*blk,1) + tstin(1:mln*blk);

%testing for the addition of noise in the frequency-domain
%Fails for a practical amount of noise
%w_fft = fft(tstin);
%w_fft = w_fft + .00009*rand(length(w_fft),1);
%tstin = ifft(w_fft);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Watermark extraction algorithm
[tstin] = wavread('echo_out.wav');

for K=1:blk:(mln*blk)
    if (abs(tstin(K:(K-1)+blk)) <= abs(in(K:(K-1)+blk)))
        0
    else
        1
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


figure

subplot(2,1,1), plot(in)
title('input waveform')
xlabel('sample [n]')
ylabel('magnitude')

subplot(2,1,2), plot(out)
title('output waveform')
xlabel('sample [n]')
ylabel('magnitude')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -