www.pudn.com > audiowatermark.rar > watermark.m


%水印嵌入*********************************************************************************************(1) 
%1同步信号,在音频起始点嵌入10个幅值相同的点 
[x,fs,nbits]=wavread('E:\wave1\0000.wav'); 
lenx=length(x); 
w=wavread('E:\wave1\0001.wav'); 
y=[0.02; 0.02 ;0.02; 0.02 ;0.02; 0.02 ;0.02; 0.02 ;0.02 ;0.02]; 
%input m 
m=1000; 
k=fix(lenx/10/m)*10; 
w1=w(1:m); 
%input a 
a=50; 
%2分段处理, 
for i=1:k:m*k 
   %3离散余弦变换 
    x1=dct(x(i:i+k-1)); 
   %排序找出中频系数mid 用公式mid'=mid(1+a*w) 
   [x11,index]=sort(x1); 
   j=fix(i/k)+1;    
   for t=1:3 
      %4修改中频系数 
      x1(index(t+1))=x11(t+1)*(1+a*w(j)); 
      %纪录被改变的系数和序号 
      recordx(j,t)=x11(t+1); 
      recordi(j,t)=index(t+1); 
      %5离散余弦逆变换 
      x(i:i+k-1)=idct(x1); 
   end 
end 
%6合并得到嵌入水印后的音频信号 
x=[y;x]; 
%将嵌入水印后的音频信号保存 
wavwrite(x,fs,nbits,'E:\wave1\00000.wav'); 
%水印提取*********************************************************************************************(2) 
%1同步检测 
[x2,fs,nbits]=wavread('E:\wave1\00000.wav'); 
lenxx=length(x2)-m*k; 
i=1; 
%input b 
b=0.001; 
while and(or(or(abs(x2(i)-0.02)>b,abs(x2(i+1)-0.02)>b),abs(x2(i+2)-0.02)>b),ilenxx 
  error('没有同步检测信号 '); 
end 
%2含有水印的音频信号做分段处理 
x3=x2((i+3):(i+2+m*k)); 
length(x3) 
%3原始音频信号做分段处理 
for i=1:k:m*k   
%4含有水印的音频信号做离散余弦变换 
   x4=dct(x3(i:i+k-1)); 
   j=fix(i/k)+1; 
%5水印提取 
   w21=(x4(recordi(j,1))/recordx(j,1)-1)/a; 
   w22=(x4(recordi(j,2))/recordx(j,2)-1)/a; 
   w23=(x4(recordi(j,3))/recordx(j,3)-1)/a; 
   w2(j)=(w21+w22+w23)/3; 
end 
%6求相关系数 
cox1=(w1'*w2')/(norm(w1)*norm(w2)) 
%水印攻击*********************************************************************************************(3) 
%1加噪音,    转(2) 
%2滤波   ,  转(2) 
%3剪切,     转(2) 
%4重量化,   转(2) 
%5重采样,   转(2) 
%6MPEG压缩,转(2)