一种自适应混合域音频无声水印

2024-02-12 04:58

本文主要是介绍一种自适应混合域音频无声水印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文首发于:行者AI

随着数字音频技术的不断发展,音乐版权问题受到重视。用于音频版权保护的技术得到越来越多的研究与关注,无声水印技术就是其中之一。同时互联网在线会议越来越受到欢迎,音频无声水印技术也可以在保证会议的保密性的同时追踪泄密源头。

由于人类听觉系统(HAS)极为灵敏,音频感知冗余较小,水印同时满足隐蔽性和鲁棒性的困难很大,同时音频压缩算法例如MP3因为其出色的压缩率和音质,随着网络时代的到来已经成为数字音频的主流压缩方式。然而MP3编码有损压缩,音频经过压缩后水印信息也将被破坏,因此音频水印的研究相对于图像水印算法更具有挑战性。

本算法目的在于提供一种自适应混合域音频水印嵌入方法,在保证隐蔽性的同时,能够在相同音频信号的情况下嵌入更多的水印信息,从而在一定程度上提高音频水印的抗剪辑攻击性。

1. 基础知识

1.1 量化

将值映射在坐标系上,然后按照一个量化因子(也称之为步幅),对坐标系进行划分并假设其每一个步幅中所代表的值。水印算法中通常使用转换成二进制编码的嵌入信息,该嵌入信息的原始信息可以是图片也可以是文本等,那么假设量化因子为Δ0-Δ代表0Δ-2Δ代表1,则有如图所示的量化结果。从下图中可以看出-Δ-0代表10-Δ代表0Δ-2Δ代表12Δ-3Δ代表03Δ-4Δ代表1

1.2 掩蔽效应

掩蔽效应是在人类听觉系统( HAS)中存在的一种效应:短时间内能量高的将遮蔽能量低的,使得人类只能听到能量高的部分。掩蔽效应根据高低能量部分出现的情况不同分为超前掩蔽、同时掩蔽和滞后掩蔽。 超前掩蔽即后部分能量高于前部分那么只能听到后部分,反之即有滞后掩蔽;同时掩蔽即前后能量高于当前部分,那么当前部分将不会被听见而被前后的声音所掩蔽。掩蔽效应如下图所示。

1.3 MP3压缩

MP3压缩会导致时域偏移和频域幅值变化。

音频经过MP3有损压缩后,时域上的表现不仅仅只是幅度的变化还存在时序上的偏移。因为MP3压缩正交重叠变化时头尾帧需要补0,从而产生边缘效应,解码后这部分数据也加入到音频之中,即压缩后产生了时序上的偏移。

利用声音的频域掩蔽效应使量化噪音处于频域掩蔽阈值之下,去除了音频感知的冗余部分。这就会导致高频压缩后变化大,而低频变化相对较小。

1.4 DWT变换

(1) 小波转换后将得到低频的近似系数和高频的细节系数。
(2) 可以进行多次(阶)小波转换,最大阶level=log2(n)n为时域采样点。
(3) 经过多阶转换后将得到level+1个系数。

1.5 预处理

针对音频文件格式参数不同,我们统一将文件转变为44.1kHz立体声位宽为16bitwav文件,并将文件读取到内存转变为2int16的数组。2int16的数组表示左右声道、位深为16bit,即采样点的值占用16bit大小。

同时将要嵌入的水印信息构造为灰度图片,以增加系统的鲁棒性,此处用二进制表示水印信息。

2. 实现步骤

2.1 音频分帧
a. 嵌入单元

前面提到了为了解决MP3压缩时间偏移的问题,采用计算每个嵌入段的能量,过滤能量低的段,这里我们将每个嵌入段称之为嵌入单元。而每个嵌入单元我们又按照长度均分为两个小区域:嵌入区和定位区。

对于DWT,每一阶变换就会得到一个近似和细节系数。假设有一段长度为x的信号,最大能进行的变换次数(阶)level为:
l e v e l = l o g x 2 level = log_x^2 level=logx2
因为低频下鲁棒性更好,因此我们采用3kHz以下区域进行嵌入取level=4

为了保证嵌入的鲁棒性,参与嵌入的采样点更多,鲁棒性越好。因此设置一个常量α代表嵌入区的扩容因子,α可以取8,16,32等。

我们定义一个常量值N,用以描述每个小区域的采样点个数(长度),并称之为嵌入长度。那么一个嵌入单元的长度即为2N,其中:
N = 2 4 × α N=2^4×α N=24×α
其中DWT变换的阶为4,因此一个嵌入单元长度设为fl有:
f l = 32 × α fl=32×α fl=32×α
如果取α8,那么嵌入一个信息位需要采样点的个数为256个,一秒音频能够嵌入172个信息位。
⌊ 44100 / 256 ⌋ = 172 \lfloor 44100/256 \rfloor =172 44100/256=172
嵌入区属于用来进行水印的嵌入区域,定位区域的作用是通过计算每个单元的定位区能量大小筛选出真正用来嵌入的区域和嵌入顺序,且提供嵌入强度的参考值。

b. 嵌入帧

假设水印图片长和宽分别为hw,那么水印数据长度为h×w

根据嵌入单元的定义,一个嵌入单元长度为2N。我们就可以计算嵌入一次水印至少需要采样点长度L为:
L = h × w × N × 2 L=h×w×N×2 L=h×w×N×2
又由于我们的音频采样率为fs=44100Hz,可以计算嵌入一个完整的水印需要音频的时间t:
t = L / f s t = L / fs t=L/fs
对于t和一个常量n(本文n=10)的余数向上取整得到一个帧的长度,他代表了需要至少多少个n秒才能嵌入一个完整的水印信息。这样来确保一个嵌入帧拥有大于嵌入所需的单元数量进而可以存储完整的水印信息。
F l = ⌈ t / n ⌉ × n × f s F_l = \lceil t/n \rceil ×n×f_s Fl=t/n×n×f

这篇关于一种自适应混合域音频无声水印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701710

相关文章

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

一种快速生成CSV的方法

事情是这个样子的 在QQ群在聊把如何100万数据导出成CSV文件?会不会很慢? 俺回了一句“现在的机器性能好,没啥问题”。 然后大家开始谈论机器的配置了。哎,俺的机器配置有点差。 然后俺就进行了一个测试。 测试数据 数据定义         public struct Rec         {             public int v1;             publi

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略 参考论文 无水印

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次!  完整论文+代码+数据结果链接在文末!  订阅后可查看参考论文文件 第一问 1.1 问题重述 这个问题围绕的是华北山区的某乡村,在有限的耕地条件下,如何制定最优的农作物种植策略。乡村有 34 块露天耕地和 20 个大棚,种植条件包括粮食作物、蔬菜、水稻和食用菌。除了要考虑地块的面积、种植季节等,还要确保

240907-Gradio插入Mermaid流程图并自适应浏览器高度

A. 最终效果 B. 示例代码 import gradio as grmermaid_code = """<iframe srcdoc='<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width" /><title>My static Spa

安卓实现弹出软键盘屏幕自适应调整

今天,我通过尝试诸多方法,最终实现了软键盘弹出屏幕的自适应。      其实,一开始我想通过EditText的事件来实现,后来发现,安卓自带的函数十分强大,只需几行代码,便可实现。实现如下:     在Manifest中设置activity的属性:android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustResi

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

调试程序时,会出现下面这个报错 分析原因: 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 ,比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 // 堆区开辟的数组空间使用 delete 释放int* p = new int[10];delete p; 正

UGUI 背景自适应文本框

需求 UGUI背景自适应文本框UGUI背景图片随文本框长度变化 解决方案 仅文本框宽度自适应 背景节点配置: 背景节点下的Text子节点配置: 文本框宽高自适应 将Vertical Fit设置为Preferred Size 将Child Controls Size Height选项勾上

Openharmony 图片自适应全屏显示

前言: Deveco_studio 4.1 release 版本 我们想要图片全屏显示,并且不出现黑白边,可以参考以下代码 这段代码会自适应你的容器大小,你的容器时全屏,图片就会全屏 @Entry@Componentstruct Index {@State message: string = 'Hello World';build() {Column() {}.width('100%'

Cocos2d-x自适应Android屏幕分辨

ndroid下分辨率太多,不太可能为每种分辨率做一套资源,目前一般来说比较流行的是320*480, 800*400, 854*400。当然现在720P的也出来了,但至少目前不是主流机型^_^. 对于不支持的分辨率,我希望的是能够按照屏幕大小按比例缩放,即有了下面的代码。 1:ViewAutoScale 写了一个ViewAutoScale函数,如下:   #include "ViewAuto

生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute

可以录音播放的生日贺卡与传统的纸质贺卡相比,它有着创意以及个性的特点,仅需少量的电子元器件,即可实现录音功能,搭配上文字,让声音存储在生日贺卡里,让贺卡也变得有温度,祝福我想亲口对TA说。 生日贺卡录放音芯片方案——NVF04M 采用外挂SPI存储器的方式,达到录音的功能。它的主要特点是声音清晰,录音时间长。目前可以提供的录音时间为32分钟。NV04FM的一个显著特点是存储时间灵活,客