用MATLAB产生随机数进行仿真,找到相关性最好的一组训练序列。调制之后,用滑动相关计算训练序列与整个数据的相关值。计算出相关值之后,观察数据,想办法找出相关最大值。

这里面相关值的计算公式:

用相关做帧检测

是接收机本地训练序列(经过调制的)与接收回来的数据,共轭相乘相加。

matlab 代码对应语句是:

A_length = length (TRAIN_moded); % A_length是训练序列的长度
leng_xcorr = length (ALL) - A_length; % 相关值的长度(leng_xcorr)= 所有数据的长度(ALL) - A_length(训练序列的长度)
for n= 1:leng_xcorr %滑动相乘,假设训练序列长度是28.比如说,第一次相乘的数据是 1:28,第二次相乘的数据是2:29 ……
xcorr_XX(n) = abs( ALL_noise((1: A_length)+n-1) * TRAIN_moded' ); %注意,是共轭相乘,这里用一个矩阵相乘实现了 乘加运算。 还有ABS 是取模
%如果是实数,还是本身,如果是虚数,可以理解为,虚数是坐标中的一个点,
%取模就是求这个坐标的长度。比如,一个数,实部是3,虚部是4,则取模之后是5
end

用相关做帧检测

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

C代码对应语句是:

用相关做帧检测

doubleComplexMultiplier_Re(doubleIa,doubleQa,doubleIb,doubleQb)//复数的乘

{
return(Ia*Ib-Qa*Qb);
 
}
doubleComplexMultiplier_Im(doubleIa,doubleQa,doubleIb,doubleQb)//复数的乘
{
return(Ia*Qb+Qa*Ib);
}

doublexcorr_XX_re[XCOOR_lenth]={0};

doublexcorr_XX_im[XCOOR_lenth]={0};
doublexcorr_XX[XCOOR_lenth]={0};
for(intm=0;m<XCOOR_lenth;m++)
{
for(inti=m;i<28+m;i++)
xcorr_XX_re[m]+=ComplexMultiplier_Re(DATA_MOD_I[i],DATA_MOD_Q[i],Train_MOD_I[i-m],-1*Train_MOD_Q[i-m]);//相关,共轭相乘
}
for(intm=0;m<XCOOR_lenth;m++)
{
for(inti=m;i<28+m;i++)
xcorr_XX_im[m]+=ComplexMultiplier_Im(DATA_MOD_I[i],DATA_MOD_Q[i],Train_MOD_I[i-m],-1*Train_MOD_Q[i-m]);//相关,共轭相乘
}
 
for(intm=0;m<XCOOR_lenth;m++){
xcorr_XX[m]=sqrt(pow(xcorr_XX_re[m],2)+pow(xcorr_XX_im[m],2));
}

相关文章:

  • 2022-12-23
  • 2021-08-17
  • 2021-12-14
  • 2022-01-25
  • 2022-12-23
  • 2021-11-17
  • 2022-02-17
  • 2021-10-22
猜你喜欢
  • 2021-10-01
  • 2022-03-06
  • 2022-12-23
  • 2021-04-04
  • 2021-06-30
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案