生成BDS卫星1和卫星2的B1C信号的数据分量主码、 导频分量主码和子码

这篇博客详细介绍了B1C信号的数据分量主码、导频分量主码和子码的生成原理,基于勒让德序列和Weil码。通过输入参数生成不同码序列,并进行傅里叶变换和自相关计算。最后,展示了数据分量主码、导频分量主码和导频分量子码的互相关函数图形。
摘要由CSDN通过智能技术生成

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('导频分量子码互相关函数');

上述就是我对这次作业的理解,有不足的地方是没有进行验证,没有验证出我这序列的正确性,如果有心可以在这基础上进行加以验证,或者自己再写一段进行验证

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值