matlab音频水印算法研究+代码

举报
川川菜鸟 发表于 2021/10/29 00:56:16 2021/10/29
【摘要】 %加入白噪声的音频水印程序 clear; [y ,fs] = audioread('mei.wav'); %读入原始音频文件 [c,l]=wavedec(y,3,'db4'); ...
%加入白噪声的音频水印程序
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);  %计算嵌入了水印的信号的信噪比,".*"用于实现对应元素的乘法

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

结果:
在这里插入图片描述

matlab群:912166339

文章来源: chuanchuan.blog.csdn.net,作者:川川菜鸟,版权归原作者所有,如需转载,请联系作者。

原文链接:chuanchuan.blog.csdn.net/article/details/121012208

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。