目录
1.MBOC和CBOC调制和解调原理
BOC调制就是在原有BPSK调制的基础上,再加上一个二进制副载波对BPSK信号进行二次扩频。由于方波易于生产,因此采用方波来替代正弦波,这样可以节约硬件资源。一般用BOC(sf ,cf)来表示sf代表副载波频率,cf代表伪码速率。因为sf和cf都是1.023MHz的整数倍,所以文献中用 BOC(m,n)的表示形式,其中m表示的是副载波频率,n表示的是扩频码速率,它们分别表示 1.023MHz的m倍和n倍。
BOC调制的频谱可以分为两个对称独立的边带,它的自相关函数是一种多峰结构,其中主峰较窄,所以有可能对接收机处理方式做一些改变,以便在实现时获得性能的改善。另外一种可行的方法是使鉴相器工作在一个带宽信号的相对函数上,进而保持对主峰的粗跟踪,之后再转入用双边带信号工作的鉴相器,来作精跟踪。由此可见,BOC调制信号的频谱中上边带和下边带的冗余,自相关函数中的多峰,如果加以开发利用有可能在接收机的信号截获、码跟踪以及数据解调等处理中带来利益。
1.1 MBOC
MBOC(Multiplexed Binary Offset Carrier,复用二进制偏移载波)是为平衡信号精度与抗干扰能力提出的通用调制方案,被北斗、GPS等系统采用。MBOC不局限于单一子载波,而是通过两种不同频率的子载波信号加权叠加,生成兼具窄带高精度和宽带抗干扰的复合信号。其本质是将主信号(窄带子载波)与辅助信号(宽带子载波)在相同频段内复用,提升频谱利用率。
主信号:采用低频子载波(如1.023MHz),保证信号的窄带特性,提升码跟踪精度。
辅助信号:采用高频子载波(如6.138MHz,为主信号的6倍),扩展信号带宽,增强抗多径和抗干扰能力。
MBOC信号的基带表达式为两种子载波信号的加权和,公式如下:
1.2 CBOC
CBOC(Composite Binary Offset Carrier,复合二进制偏移载波)是MBOC的一种具体应用形式,仅使用单一频率的子载波,通过调整子载波的符号规律实现类似MBOC的效果,本质是 MBOC在 “单频子载波” 场景下的简化版。
CBOC不叠加不同频率子载波,而是对同一子载波的符号进行周期性反转,等效生成 “主瓣 + 边瓣” 的复合频谱,从而在不增加子载波数量的前提下,兼顾精度与抗干扰能力。将子载波周期分为多个小段(如2段),对其中部分段的符号反转,使信号频谱在主瓣外产生额外边瓣,扩展有效带宽。
CBOC信号基于单一子载波,通过符号反转实现复合特性,公式如下:
2.MBOC和CBOC区别
两者的差异集中在子载波设计、频谱特性和应用场景上,具体对比如下:
对比维度 | MBOC 调制 | CBOC 调制 |
---|---|---|
子载波数量 | 2 个(不同频率,如f1和6f1) | 1 个(单一频率,如f1) |
信号生成逻辑 | 多子载波加权叠加 | 单子载波符号周期性反转 |
频谱特性 | 主瓣窄、边瓣丰富,带宽更宽 | 主瓣与 MBOC 接近,边瓣由符号反转生成,带宽略窄 |
实现复杂度 | 需处理两种子载波,复杂度较高 | 仅需单一子载波 + 符号反转,复杂度低 |
典型应用 | GPS L1C、北斗 B1C 等高精度信号 | 部分 GNSS 系统的过渡信号或简化场景 |
3.MATLAB程序
clc;
clear;
close all;
warning off;
addpath 'func\'
CN0 = 80;
Sig_BW = 2e6;
SNR = CN0 - 10*log10(Sig_BW);
%符号速率为50sps
Rb = 50;
navdatLength = 1;
%仿真持续时间为10个数据比特
D = navdatLength/Rb;
f0 = 1.023e6;%基准频率
BOCm = 10;
BOCn = 2;
%副载波频率
fs = BOCm*f0;
%码速率
fc = BOCn*f0;
fIF = 2*fs;
fsamp = 24*f0;%采样频率
%一个周期的采样点
n = fsamp/1000;
KK = 1000;
%多普勒频率
fd = 0;
Nn = n;
nn = [0:Nn-1];
CAIndex = floor(fsamp/fc);
%数据通道的卫星号
Ndata = 1;
%导频通道的卫星号
Npilot = 2;
%BOC
[BOC_data,BOC_pilot] = func_BOC_Signal(Ndata,Npilot,Nn,CAIndex);
%移动码片
BOC_data_code = [BOC_data(n-KK:n),BOC_data(1:n-KK-1)];
BOC_pilot_code = [BOC_pilot(n-KK:n),BOC_pilot(1:n-KK-1)];
t = [1:Nn]/fsamp;
%输入信号
cosCarr = cos(2*pi*(fIF + fd)*t);
sinCarr = sin(2*pi*(fIF + fd)*t);
Signal_Boc = 2*BOC_data_code .* cosCarr + 2*BOC_pilot_code .* sinCarr;
%仿真数据长度
in_signal = Signal_Boc;
figure,
plot(in_signal);
acf_cboc = xcorr(in_signal,in_signal);
figure,
plot(acf_cboc);
title('CBOC ACF');
psd_cboc = fftshift(fft(acf_cboc));
figure,
plot(abs(psd_cboc));
title('CBOC PSD');
%加高斯白噪声
in_signal = awgn(in_signal,SNR,'measured');
%对比算法BPSK like
[Y,Yi] = BPSK_like(in_signal,n,Nn,fsamp,f0,fIF);
%-----------------------------****** 画图 ******---------------------------%
figure;%二维结果
plot(Y(Yi,:));
xlabel('码片延时(采样后)');ylabel('相关幅度');
figure;%三维结果
s=surf(Y);set(s,'EdgeColor','none','Facecolor','interp');
xlabel('码片延时(采样后)');ylabel('多普勒频率:kHz');zlabel('相关幅度');D49