%加入白噪聲的音頻水印程式
clear;
[y ,fs] = audioread('mei.wav'); %讀入原始音頻檔案
[c,l]=wavedec(y,3,'db4'); %三級小波分解
ca3=appcoef(c,l,'db4',3);%提取3級近似系數,繪制原始信號和近似系數,
cd3=detcoef(c,l,3);%提取 3 所指定的級別上的細節系數
cd2=detcoef(c,l,2);%提取 2 所指定的級別上的細節系數
cd1=detcoef(c,l,1);%提取 1 所指定的級別上的細系數節
x=ca3; %提取近似低頻系數
len=length(y); %計算音頻資料長度
x1=x;%x重新賦值給x1
s=max(abs(x))*0.2;%對近似系數的絕對值,求其中的最大值,再乘以0.2
i=find(abs(x)>s);lx=length(x(i)); %找出大于最大值0.2倍的序列
figure;%創建圖窗視窗
subplot(2,2,1);%將當前圖窗劃分為 2×2 網格,并在1指定的位置創建坐標區
plot(ca3); %畫出低頻系數圖
title('低頻系數圖形');%標題
subplot(2,2,2);%將當前圖窗劃分為 2×2 網格,并在2指定的位置創建坐標區
plot(cd3);%畫出第3級的細節系數,
title('cd3');%標題
subplot(2,2,3);%將當前圖窗劃分為 2×2 網格,并在3指定的位置創建坐標區
plot(cd2);%畫出第2級的細節系數,
axis([0 10e4 -0.5 0.5]);%設定坐標軸范圍和縱橫比
title('cd2');%標題cd2
subplot(2,2,4);%將當前圖窗劃分為 2×2 網格,并在3指定的位置創建坐標區
plot(cd1);%畫出cd1
title('cd1');%標題cd1
randn('seed',10); %產生隨機高斯序列
mark=randn(1,lx);%創建一個由隨機陣列成的 1×lx 向量,
ss=mark;%mark賦值給ss
rr=ss*0.1; %設定水印嵌入強度
x(i)=x(i).*(1+2*rr'); %嵌入水印
c1=[x',cd3',cd2',cd1']; %創建矩陣c1
s1=waverec(c1,l,'db4');%重建信號
file1='已加水印.wav';
dd=length(s1); %調整s1的長度,使之可以分成兩列
s11=s1; %s1的值不能改變,因為后面還需要用到
if rem(dd,2)==1 %如果s1是奇數,則去掉最后一個數,將新陣列定義為s11
s11=s1(1:dd-1);
end
ee=reshape(s11,[],2); %將s1調整成2列的陣列
audiowrite(file1,y,fs);%將加水印的音頻寫入file1.wav
figure;%創建圖窗
subplot(3,1,1);%創建3*1的網格,把該圖放在第一個位置
plot(y); %畫出原信號圖
axis([0 18e4 -2 2]);%設定坐標軸范圍和縱橫比
title('原信號的圖'); %標題
subplot(3,1,2);plot(ss); %創建3*1的網格,把該圖放在第二個位置
title('水印圖');
subplot(3,1,3);plot(s1); %畫出嵌入了水印的信號圖
title('加入了水印的聲音信號')%加標題
kk.wave = wavread('已加水印');
yc=kk.wave;
dy=length(y);
if rem(dy,2)==1 %如果y為奇數,處理同s1,但是因為后面不需要用到y,所以不必定義一個新陣列
y=y(1:dd-1);
end
y1=reshape(y,[],2); %調整陣列y的維數,使之可以和yc做運算
fz=sum(y1.*y1); %計算嵌入了水印的信號的信噪比,".*"用于實作對應元素的乘法
結果:

matlab群:912166339
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/341995.html
標籤:其他
上一篇:論文閱讀: Spatial transformer networks
下一篇:python爬蟲-b站視頻
