資源簡(jiǎn)介
本資源是用matlab實(shí)現(xiàn)基于小波變換的音頻水印的嵌入與提取.原來在csdn上流傳的是錯(cuò)誤的,特此更正
代碼片段和文件信息
%加入白噪聲的音頻水印程序
clear;
kk.wave?=?wavread(‘E:\thrid1\back.wav‘);???%讀入原始音頻文件
y=kk.wave;
[cl]=wavedec(y3‘db4‘);???????????????%三級(jí)小波分解
ca3=appcoef(cl‘db4‘3);
cd3=detcoef(cl3);
cd2=detcoef(cl2);
cd1=detcoef(cl1);
x=ca3;??????????????????????????????%提取低頻系數(shù)
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);????????????????????????????%畫出低頻系數(shù)圖
title(‘低頻系數(shù)圖形‘);
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);??????????????????????%產(chǎn)生隨機(jī)高斯序列
mark=randn(1lx);
ss=mark;
rr=ss*0.1;???????????????????????????%設(shè)置水印嵌入強(qiáng)度
x(i)=x(i).*(1+2*rr‘);???????????????????%嵌入水印
c1=[x‘cd3‘cd2‘cd1‘];
s1=waverec(c1l‘db4‘);
file1=‘已加水印.wav‘;
dd=length(s1);?????????????????????%調(diào)整s1的長(zhǎng)度使之可以分成兩列
s11=s1;????????????????????????????%s1的值不能改變因?yàn)楹竺孢€需要用到
if?rem(dd2)==1????????????????????%如果s1是奇數(shù)則去掉最后一個(gè)數(shù)將新數(shù)組定義為s11
????s11=s1(1:dd-1);???????????????
end
ee=reshape(s11[]2);????????????????%將s1調(diào)整成2列的數(shù)組
wavwrite(eefile1);
figure;
subplot(311);plot(y);???????????????????%畫出原信號(hào)圖
axis([0?18e4?-2?2]);
title(‘原信號(hào)的圖‘);????????????????????
subplot(312);plot(ss);
title(‘水印圖‘);
subplot(313);plot(s1);
評(píng)論
共有 條評(píng)論