?? water_echo.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 + -