声音二维码

play.m的play键响应函数中:将msg用doubleError.jar加密后为二进制数,每6000bit为一集合,集合数为setnums。在循环处理中,把每6000bit提取到sig里,调用函数

[encsig, unencmusic] = audiohideencode_carrierwid_90(unencmusic, sig1);
% encsig是unencmusic嵌入信息的那一部分音频,unencmusic是原先unencmusic没有被嵌入的(剩下的)那一部分
参数定义。数据包在代码中称为帧

这6000bit被分为100个symbol,60个并行载波来传输:

  1. 找到帧头:
sqrt(avecarryener/premnum)>0.04%判断帧头的条件
hidepoint=i;
TEST = CARRYSIG(hidepoint+1: end);
  1. 嵌入帧头。TEST代表时域,X是代表帧头的频域X = fft(TEST(1:premnum)),改变X,返回到时域,赋值给TEST。
  2. 嵌入每个符号(symbol)。
    首先提取TEST中对应该次序的symbol的那一段SYMBOL,X=fft(SYMBOL)
 for j=1:para %60个并行载波
         X(carrierstart+round(carrierwid*symtime*(j-1)))=hidesymfactor*Emax*sigfac(j,count);%sigfac(j,count)是要嵌入的内容
         X(symnum-carrierstart-round(carrierwid*symtime*(j-1))+2)=hidesymfactor*Emax*sigfac(j,count);
end
 X(symtime*21100)=2*Emax;%导频
X(symnum-symtime*21100+2)=2*Emax;

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 29,128评论 18 398
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 124,749评论 18 136
  • 延岭 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 睚眦(yá zì):平生好杀,...
    奔跑吧建筑阅读 1,048评论 9 19
  • 1. 标题 使用 #表示标题 1.1 代码示例 # 一级标题## 二级标题### 三级标题#### 四级标题#...
    1519f8ccc7b0阅读 396评论 0 0