音频没怎么做过,收集了一些程序,看看下面的是否是你需要的
- %水印嵌入*********************************************************************************************(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),i<lenxx)
- i=i+1;
- end
- while and(abs(x2(i+3)-0.02)<b, i<=lenxx)
- i=i+1;
- end
- %判断是否有同步检测信号
- if i>lenxx
- 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)
复制代码 |