B1C信号的数据分量主码,导频分量主码和子码
原理和参照表
代码
首先,我们先学习一下勒让德序列,公式如下:
上述序列码片数为10243,所以第一个循环为1—10243,根据勒让德的性质可知,这里的x只需要运行1—N/2-1,N为码片数目,在此次生成码片过程中,需要运行5121次。
上述迭代后,会产生一串长度为10243的勒让德序列,L(K)为生成后的勒让德序列,其中的w为相位差(后面会给到)其中取模为序列长度,上述为产生weli码。
这是导频和数据码发生器,在weil码的基础上改进,n为序列号,p为截取点,w为相位差
数据主码表 后两列为做校验时所需要
导频主码表 后两列为做校验时所需要 这两个码长都是10230
导频分量子码,长度为1800,根据weil截获获得
(上述的码都是weil基础上得到的,根据不同长度截获得到)
程序(function)
function [xk1 xk2 xk3] = b1C_code(sta_num1,sta_num2,sta_num3,sta_num4,sta_num5,sta_num6,i)%选择参数(这里一般前六个数一样,后的i的输入在前一个调用基础上加7)
% sta_num1=input('please select start number of w:');
% sta_num2=input('please select start number of p:');%这两个是选择数据主码分量编号
% sta_num3=input('please select start number of w1:');
% sta_num4=input('please select start number of p1:');%这两个是选择导频主码分量编号
% sta_num5=input('please select start number of sub_w1:');
% sta_num6=input('please select start number of sub_p1:');%这两个是选择导频子码分量编号
% i=1;
w=[2678 4082 958 859 3843 2232 124 4352 1816 1126];
p=[699 694 7318 2127 715 6682 7850 5495 1162 7682];
w1=[796 156 4198 3941 1374 1338 1833 2521 3175 168];
p1=[7575 2369 5688 539 2270 7306 6457 6254 5644 7119];
sub_w1=[269 1448 1028 1324 822 5 155 458 310 959];
sub_p1=[1889 1268 1593 1186 1239 1930 176 1696 26 1344];
% for i1=1:10242
% for i2=1:5121
% sq(i2)= mod(i2^2,10243);
% if(sq(i2)==i1)
% L1(i2)=1;
%
% else
% L1(i2)=0;
% end
% su1(i1)=sum(L1);
% if(su1(i1)==0)
% su1(i1)=0;
% else
% su1(i1)=1;
% end
% end
% end
N=10243;
kindex=mod([1:(N-1)/2].^2,N);
L=zeros(1,N);
L(kindex+1)=1;%勒让德序列产生
% plot(1:N,L)
% su1=ones(1,10242);
len=length(L);
su2=[L L];%以便于稍后截断循环
length(su2);
for i3=1:10243
W(i3)=su2(i3)^su2(mod(i3+w(1,sta_num2),10243)+10243);%weil码
% W(i3)=mod(su1(i3+p(1,sta_num2)-1)^(su1(su1(i3+p(1,sta_num2)-1)+w(1,sta_num1))),len);
end
figure(i)
length(W)
plot(1:len,W);%输出weil码
axis([1 len+20 -1.2 1.2]);
title('weil_code')
m1=p(1,sta_num1);
wnum1=w(1,sta_num2);%此处用来测试,所以提出来用过
for i4=1:10230
data(i4)=mod(su2(mod(-1+m1+i4,10230)+10243)+su2(mod(-1+m1+i4+wnum1,10230)+10243),2);%数据主码,固定宽度10230
end
%在这上面有个小坑,当数取到10230时,他的模为0,所以报错,我的方法是右移10234位,其值不变,亦或结果也不变
data(data==0)=-1;
figure(i+1);
plot(1:length(data),data);
axis([1 length(data)+10 -1.2 1.2]);
cacode1=[data data];%复制延长
code_len1=length(cacode1);
xk1=fft(cacode1,code_len1);%傅里叶变换到频域
rm1=real(ifft(conj(xk1).*xk1))/code_len1;%共轭相乘取模,傅里叶逆变换,取实部(求自相关)
figure(i+2);
plot(0:code_len1-1,rm1);
axis([0 code_len1+25 -0.25 1.25]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%数据主码%%%%%%%%%%%%%%%%
for i5=1:10230
nav_f(i5)=mod(su2(mod(p1(1,sta_num3)+i5-1,10230)+10243)+su2(mod(p1(1,sta_num3)+i5-1+w1(1,sta_num4)+1,10243)+10230),2);%导频主码,固定宽度10230
end
nav_f(nav_f==0)=-1;
figure(i+3);
plot(1:length(nav_f),nav_f);
axis([1 length(nav_f)+10 -1.2 1.2]);
cacode2=[nav_f nav_f];%复制延长
code_len2=length(cacode2);
xk2=fft(cacode2,code_len2);%傅里叶变换到频域
rm2=real(ifft(conj(xk2).*xk2))/code_len2;%共轭相乘取模,傅里叶逆变换,取实部(求自相关)
figure(i+4);
plot(0:code_len2-1,rm2);
axis([0 code_len2+25 -1.25 1.25])
%%%%%%%%%%%%%%%导频主码
for i6=1:1800
sub_nav_f(i6)=mod(su2(mod(sub_p1(1,sta_num5)+i6-1,10230)+10243)+su2(mod(sub_p1(1,sta_num5)+i6-1+sub_w1(1,sta_num5),10230)+10243),2);%导频主码,固定宽度1800
end
sub_nav_f(sub_nav_f==0)=-1;
figure(i+5);
plot(1:length(sub_nav_f),sub_nav_f);
axis([1 length(sub_nav_f)+10 -1.2 1.2]);
cacode3=[sub_nav_f sub_nav_f];%复制延长
code_len3=length(cacode3);
xk3=fft(cacode3,code_len3);%傅里叶变换到频域
rm3=real(ifft(conj(xk3).*xk3))/code_len3;%共轭相乘取模,傅里叶逆变换,取实部(求自相关
figure(i+6);
plot(0:code_len3-1,rm3);
axis([0 code_len3+25 -1.25 1.25])
%%%%%%%%%%%%%%%%导频子码%%%%%%%%%%%%%5
end
调用程序画互相关
clc
clear
close all
[rm1 rm2 rm3] = b1C_code(1,1,1,1,1,1,1);
[rm4 rm5 rm6] = b1C_code(2,2,2,2,2,2,8);
len=length(rm1);
len1=length(rm3);
res1=(ifft(conj(rm1).*rm4))/(2*len);%共轭相乘取模,傅里叶逆变换,取实部(求自相关)
res2=(ifft(conj(rm2).*rm5))/(2*len);%共轭相乘取模,傅里叶逆变换,取实部(求自相关)
res3=(ifft(conj(rm3).*rm6))/(2*len1);%共轭相乘取模,傅里叶逆变换,取实部(求自相关)
figure(15);
plot(0:len-1,res1);
axis([0 len1+25 -0.25 1.25])
title('数据分量主码的互相关函数');
figure(16);
plot(0:len-1,res2);
axis([0 len1+25 -0.25 1.25])
title('导频分量主码的互相关函数');
figure(17);
plot(0:len1-1,res3);
axis([0 len1+25 -0.25 1.25])
title('导频分量子码互相关函数');
上述就是我对这次作业的理解,有不足的地方是没有进行验证,没有验证出我这序列的正确性,如果有心可以在这基础上进行加以验证,或者自己再写一段进行验证