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个并行载波来传输:
- 找到帧头:
sqrt(avecarryener/premnum)>0.04%判断帧头的条件
hidepoint=i;
TEST = CARRYSIG(hidepoint+1: end);
- 嵌入帧头。TEST代表时域,X是代表帧头的频域
X = fft(TEST(1:premnum))
,改变X,返回到时域,赋值给TEST。 - 嵌入每个符号(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;
网友评论