资讯专栏INFORMATION COLUMN

【信息隐藏】简单扩频语音水印算法

BothEyes1993 / 2116人阅读

摘要:扩频通信的特点占据频带很宽,每个频段上的能量很低即使几个频段的信号丢失,仍可恢复信号利用相互正交的扩频码,可以利用这个优点设计水印算法。因此,扩频通信具有一定的加密性。最后提取水印,并计算误码率格式转换误码率压缩与解压缩误码率

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、实验背景

1.实验目的

了解扩频通信原理,掌握扩频水印算法的基本原理,设计并实现一种基于音频的扩频水印算法,了解参数对扩频水印算法性能的影响。

2.实验环境

(1) Windows 11 操作系统;
(2) Matlab R2020b 科学计算软件;
(3) WAV音频文件。

3.原理简介

①扩频基本原理
扩频是一种能在高噪声环境下可靠传输数据的重要通信技术,其基本原理是:信号在大于所需的带宽内进行传输,数据的带宽扩展是通过一个与数据独立的码字完成的,并且在接收端需要该码字的一个同步接收,以进行解扩和数据恢复。
②扩频通信的特点
占据频带很宽,每个频段上的能量很低;
即使几个频段的信号丢失,仍可恢复信号;
利用相互正交的扩频码,可以利用这个优点设计水印算法。
③实验算法
本例中设计一种简单的算法:利用正交的PN序列代表0、1信号,并将其叠加到信号DCT域。提取水印时,利用PN序列的正交性可以较为准确地恢复水印。

二、基础知识

1.PN序列

PN序列(Pseudo-noise Sequence),又称伪噪声序列,这类序列具有类似随机噪声的一些统计特性,但和真正的随机信号不同,它可以重复产生和处理,故称作伪随机噪声序列。
PN序列一般用于扩展信号频谱。PN序列的扩频是指用一个 序列去乘以一个信息符号,序列码片的时间远小于信息符号的时间,由信号的时间与频谱的关系,我们可以知道扩频后的序列的频谱是展宽的。
由于PN序列的相关性很低,只有在发送的PN序列和接收的PN序列相同,并且其码片同步时才能得到一个相关峰。当发射时,信号的功率是低于噪声的功率的,如果不知道PN序列,则较难得知码片的信息。因此,扩频通信具有一定的加密性。

2.时域到频域变换的原因

时域是信号在时间轴随时间变化的总体概括,频域是把时域波形的表达式做傅立叶变化,得到复频域的表达式,所画出的波形就是频谱图。是描述频率变化和幅度变化的关系。将时域变换到频域是为了做频谱分析,即在时域中我们研究信号的时间特性,在频域中我们研究信号的频率特性,由于信号往往在频域比在时域更加简单、直观,所以大部分信号分析的工作是在频域进行的。

3.三种时域到频域变换的区别

FTP: 离散傅里叶变换,对于连续信号的静态变换;
DWT:离散小波变换,对短时间(瞬间)信号的动态变换;
DCT:离散余弦变换,对连续信号的动态变换。

三、算法源码

1.PN产生函数

function out =pn_gen(g,init,shift)format=1;out_len = 0;in_len= 0;out=[];%check parameter fomat, ether g2 =[100000101]or g1 = [820]tp = max(g);if tp==1    format = 2;% format of parameter    in_len = length(g) -1;else    fommat = 1;    in_len= g(1);endout_len= 2^in_len-1; % length of output out = zeros(1, out_len);for n = 1:out_len    out(n) = init(in_len);    if fommat==1        tp=0;        for m=2:length(g)           tp = mod((tp+init(g(m) + 1)), 2);%caculate new init(1)           tp = mod((tp + init(in_len- g(m))),2); %caculate new init(1)        end    else        tp= init .* g(2 : (in_len+1));        tp = mod(sun(tp), 2);    end    init=[tp init(1 : (in_len-1))];  endfor n = (shift- 1):-1:0    out = [out(2 : out_len),out(1)];end

2.隐藏算法

function o = hide_ds(fragment, data, s, atten, pn0, pn1)[row, col] = size(s);if(row> col)    s=s";endi =1;n = min( floor(length(s) / fragment), length(data));o = s;len = length(pn0);base = fragment -len + 1;for i=1 : n    st =(i- 1) *fragment+1;    ed = i*fragment;    tmp = dct(s(st:ed));    attenl = atten *max(abs(tmp));    if data(i) == 1        tmp(base:fragment)=tmp( base:fragment)+ attenl*pn1;    else        tmp(base:fragment) = tmp(base:fragment) + attenl*pn0;    end    o(st : ed) = idct( tmp);end

3.提取算法

function out = dh_ds(fragment, in, pn0, pnl)[row, col] = size(in);if(row> col)    in = in";endi=1;len = floor(length(in) / fragment);out =[];len_pn = length( pn0);% length of pnbase = fragment - len_pn+1;for i = 1:len    st = (i-1) *fragment +1;    ed = i *fragment;    p = dct(in(st: ed));    t0 = sum( p(base:fragment).* pn0);    t1 = sum( p(base:fragment).* pnl);    if t1>t0        out(i) = 1;    else        out(i) = 0;    endend

4.测试脚本

% 1 select cover audio[fname, pname] = uigetfile(" *.wav","Select cover audio");sourcename = strcat(pname, fname) ;s = audioread( sourcename)";s_len = length(s);% 2 generate msg to be embeddedfrag = 256;msg_len = floor(s_len / frag);msg = randsrc(1, msg_len, [0 1]);% 3 generate PNdegree = 7;pn0 = 2*pn_gen([degree 6 0], [zeros(1, degree - 1) 1],0) - 1;pn1 = 2*pn_gen([degree 6 0],[zeros(1, degree - 1) 1],1) - 1;%4 embed msgatten = 0.005;bld = hide_ds(frag, msg, s, atten, pn0, pn1);% 5 save the stegoed-audioaudiowrite("hide.wav", bld, 8e+3);% 6 select stegoed-audio[fname, pname] = uigetfile("*.wav","Select stegoed-audio");sourcename = strcat(pname, fname);steg = audioread(sourcename)" ;% 7 extract msgout = dh_ds(frag, steg, pn0, pn1);% 8 compute ebrfid = 1;ebr = sum( abs(msg -out)) / s_len;fprintf(fid, "ebr;%f/n", ebr);

四、运行测试

1.无攻击(误码率0.000976):

① 运行test.m,选择提前准备好的wav文件(载体音频):


② 得到携带水印的音频hide.wave, 可利用音频处理软件对音频进行攻击,观察攻击后水印的恢复情况。

③最后提取水印,并计算误码率

2.AU格式转换(误码率0.001921):

(wav->mp3->wav)

3.压缩与解压缩(误码率0.002029):

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124482.html

相关文章

  • 无线网络技术学习总结

    摘要:通过通信线路连入通信子网终端是用户访问网络的界面网络操作系统是相对于主机操作系统而言的。接收方使用同一扩频码进行扩解。 目录 一、计算机网络 1.计算机网络技术概述 2.计算机网络分类 3.无线网络分类 二、无线通信和网络仿真技术基础 1.基本概念 2.调制 (1)、概述 (2)、常用方式 ...

    animabear 评论0 收藏0
  • pyttsx3 快速上手之:语音合成播报

    摘要:快速上手之语音合成播报安装封装使用博主热门文章推荐是中最常用的文字转语音库,使用方便,功能较为完整安装首先安装封装然后封装下,新建一个如下其中的可以根据需要自行调整使用这样在使用中直接调用,就可以实现中英文语音播报了 ...

    leo108 评论0 收藏0
  • 水印和图片隐写术

    摘要:其实隐藏文件和盲水印都属于图片隐写术。图片隐写术隐写术也是数字水印的一种应用,双方可利用隐藏在数字信号中的信息进行沟通。图片隐写术只是其中一种,有兴趣的同学可以看下面这本书。盲水印一、演示首先看 这是一张女朋友解码水印接下来我们输入一行神奇的命令:python bwm.py --action decode --origin Demo.jpg --im ../Gakki.jpg --resul...

    Tecode 评论0 收藏0
  • 实时音视频通信(RTC)中必须要了解的三种关键算法

    摘要:拥塞控制算法包含三种拥塞控制算法,和。在早期的实现当中,这两个拥塞控制算法分别是在发送端和接收端实现的。音频算法音频算法指的是在发送端对发送信号依次进行回声消除降噪以及音量均衡操作,它包含三个算法回声消除,噪声抑制和自动增益控制。 1、背景 RTC(Real-time Communica...

    ivyzhang 评论0 收藏0
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退

    摘要:简单机器学习算法性能依赖给定数据表示。机器学习发掘表示本身,不仅把表示映射输出。深度学习,通过其他简单表示表达复杂表示,解决表示学习核心问题。知识库机器学习逻辑回归表示学习浅度自编码器深度学习。目前最广泛机器学习模型。 AI早期成就,相对朴素形式化环境,不要求世界知识。如IBM深蓝(Deep Blue)国际象棋系统,1997,击败世界冠军Garry Kasparov(Hsu,2002)...

    张汉庆 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<