基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比

举报
简简单单做算法 发表于 2025/03/18 21:12:18 2025/03/18
112 0 0
【摘要】 1.算法运行效果图预览(完整程序运行后无水印)  2.算法运行软件版本vivado2019.2 matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)top_LSB UUT(.i_clk (i_clk),.i_rst (i_rst),.i_ywav (i_ywav),.i_mark (i_mark),.o_ywavLS...

1.算法运行效果图预览

(完整程序运行后无水印)

 

1.jpeg

2.jpeg

 

2.算法运行软件版本

vivado2019.2

 

matlab2022a

 

3.部分核心程序

(完整版代码包含详细中文注释和操作步骤视频)

top_LSB UUT(
.i_clk       (i_clk),
.i_rst       (i_rst),
.i_ywav      (i_ywav),
.i_mark      (i_mark),
.o_ywavLSB   (o_ywavLSB),
.o_ywav0     (o_ywav0),
.o_mark      (o_mark)
);
	initial begin
	    i_ywav=0;
	    i_mark=0;
 
		// Initialize Inputs
		i_clk = 1;
		i_rst = 1;
 
		// Wait 100 ns for global reset to finish
		#100 
      i_rst = 0;  
      
		// Add stimulus here
 
	end
   always #5 i_clk=~i_clk;
parameter LEN = 65536;//导入数据的长度
 
reg signed[9:0]ywav[LEN:1];  
integer fids1;
integer idx1=0,idx12=0;
initial 
begin
    //D:\code2\project_1
	fids1 = $fopen("D:\\code2\\project_1\\ywav2.txt","r");//导入数据的路径
	idx1=0;
	idx12=0;
	while(!$feof(fids1))
	@(posedge i_clk)
	begin
	$fscanf(fids1,"%d",ywav[idx1+1]);
	idx1=idx1+1;
	end
	$fclose(fids1);
end
reg signed[3:0]mark[LEN:1]; 
integer fids2;
integer idx2=0,idx22=0;
 
initial 
begin
	fids2 = $fopen("D:\\code2\\project_1\\Wmark.txt","r");//导入数据的路径
	idx2=0;
	idx22=0;
	while(!$feof(fids2))
	@(posedge i_clk)
	begin
	$fscanf(fids2,"%d",mark[idx2+1]);
	idx2=idx2+1;
	end
	$fclose(fids2);
end
 always @ (posedge i_clk)
 begin
	  if(idx1 >= LEN+1)
	  begin
	       if(idx12==2*LEN+1)
	       idx12<=0;
	       else
	       idx12<=idx12+1;
	  end
	  
	  if(idx12<=LEN&idx22>=1)
	  i_ywav<=ywav[idx12];
	  else
	  i_ywav<=0;
end
 
 always @ (posedge i_clk)
 begin
	  if(idx2 >= LEN+1)
	  begin
	       if(idx22==2*LEN+1)
	       idx22<=0;
	       else
	       idx22<=idx22+1;
	  end
	  
	  if(idx22<=LEN&idx22>=1)
	  i_mark<=mark[idx22];
	  else
	  i_mark<=0;
end
endmodule

4.算法理论概述

       音频水印技术是信息隐藏领域的一个重要分支,它通过在音频信号中嵌入特定的水印信息来实现版权保护、内容认证、数据追踪等功能。基于 LSBLeast Significant Bit,最低有效位)的音频水印算法因其简单高效而被广泛应用。现场可编程门阵列(FPGA)具有灵活性高、可重构性强、并行处理能力突出等优点,非常适合用于实现音频水印算法,能够满足不同应用场景下的实时性和性能要求。

 

       LSB 算法的核心思想是利用音频信号采样点的最低有效位来隐藏水印信息。对于音频信号的每一个采样点si,其在二进制表示下可以表示为:

3.jpg

       通过这种方式,将水印信息隐藏在音频信号中,人耳难以察觉音频信号在嵌入水印前后的差异,因为最低有效位的改变对音频信号的感知影响较小。

 

      音频信号在传输或处理过程中可能会经过各种滤波器,如低通滤波器、高通滤波器等。滤波操作可能会改变音频信号的频率特性,从而影响水印信息的提取。对于 LSB 算法,由于其嵌入位置在最低有效位,相对来说对滤波攻击具有一定的抵抗能力。但一些强烈的滤波操作仍可能导致水印信息丢失或错误提取。例如,在经过低通滤波器后,音频信号的高频部分被削弱,如果水印信息恰好嵌入在与高频相关的采样点最低有效位,可能会影响提取的准确性。

 

        音频压缩是常见的音频处理方式,如 MP3 压缩。在压缩过程中,音频信号的一些冗余信息被去除,可能会对水印信息造成破坏。LSB 算法在抗压缩攻击方面表现相对较弱,因为压缩算法可能会改变音频信号的采样点值,导致嵌入在最低有效位的水印信息丢失或错误。例如,MP3 压缩采用了心理声学模型,根据人耳听觉特性对音频信号进行压缩,可能会将一些对听觉影响较小的采样点进行较大幅度的量化处理,从而破坏水印信息。

 

        基于 LSB 的音频水印嵌入提取算法的复杂度相对较低。嵌入过程主要涉及音频信号的分帧、水印信息的预处理和 LSB 位替换操作,提取过程主要包括音频信号分帧、LSB 位提取、纠错解码和解密操作。这些操作在计算上相对简单,主要是一些基本的逻辑运算和位操作,因此算法的时间复杂度较低。

 

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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