• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: Matlab
  • 标签: matlab  音频水印  

资源简介

本资源是用matlab实现基于小波变换的音频水印的嵌入与提取.原来在csdn上流传的是错误的,特此更正

资源截图

代码片段和文件信息

%加入白噪声的音频水印程序
clear;
kk.wave = wavread(‘E:\thrid1\back.wav‘);   %读入原始音频文件
y=kk.wave;
[cl]=wavedec(y3‘db4‘);               %三级小波分解
ca3=appcoef(cl‘db4‘3);
cd3=detcoef(cl3);
cd2=detcoef(cl2);
cd1=detcoef(cl1);
x=ca3;                              %提取低频系数
len=length(y);
x1=x;
s=max(abs(x))*0.2;
i=find(abs(x)>s);lx=length(x(i));         %找出大于最大值0.2倍的序列
figure;
subplot(221);
plot(ca3);                            %画出低频系数图
title(‘低频系数图形‘);
subplot(222);
plot(cd3);
title(‘cd3‘);
subplot(223);
plot(cd2);
axis([0 10e4 -0.5 0.5]);
title(‘cd2‘);
subplot(224);
plot(cd1);
title(‘cd1‘);
randn(‘seed‘10);                      %产生随机高斯序列
mark=randn(1lx);
ss=mark;
rr=ss*0.1;                           %设置水印嵌入强度
x(i)=x(i).*(1+2*rr‘);                   %嵌入水印
c1=[x‘cd3‘cd2‘cd1‘];
s1=waverec(c1l‘db4‘);
file1=‘已加水印.wav‘;
dd=length(s1);                     %调整s1的长度使之可以分成两列
s11=s1;                            %s1的值不能改变因为后面还需要用到
if rem(dd2)==1                    %如果s1是奇数则去掉最后一个数将新数组定义为s11
    s11=s1(1:dd-1);               
end
ee=reshape(s11[]2);                %将s1调整成2列的数组
wavwrite(eefile1);
figure;
subplot(311);plot(y);                   %画出原信号图
axis([0 18e4 -2 2]);
title(‘原信号的图‘);                    
subplot(312);plot(ss);
title(‘水印图‘);
subplot(313);plot(s1);

评论

共有 条评论