clear;close all;
%---------------------------扩频系统参数设置-------------------------------%
rb = 20000; %扩频前的数据速率/bit/s 20k
SF = 500; %扩频倍数
Rb = rb*SF; %扩频后的码片速率/Mc/s
Tsum = 10; %仿真时间/ms
bits_num = rb*Tsum/1000;
SNR = 10; %仿真信噪比/dB
%% 发射机部分
%----------------------------m 序列产生模块---------------------------------%
%产生m序列
load Coef.mat
n = floor(log2(500))+2;%m序列的长度
fx = (de2bi(base2dec(Coef.Ci(n-2),8),n+1,2));
fx = fliplr(fx(1:end-1));
% fx = (de2bi(primpoly(n-1,'max'),n,2));
reg = [zeros(1,n-1) 1]; %移位寄存器的初始状态
mseq = zeros(n,1);
mseq(1)= reg(n);
N = 2^(n-1)-1;
for i = 2:N
regTemp = zeros(1,n);
regTemp(1)= mod(sum(fx.*reg),2);
for j = 2:n
regTemp(j)= reg(j-1);
end
reg = regTemp; %移位后的寄存器
mseq(i) = reg(n); %新的寄存器输出
end
mseq = 1-2*mseq(1:SF);% 1->-1 0->1
mseq_rp = reshape(repmat(mseq',bits_num,1)',bits_num*SF,1);
% figure;subplot(211);stairs(mseq);subplot(212);stairs(mseq_rp);
% figure;xc = xcorr(mseq);plot(xc);
%------------------------------BPSK编码-----------------------------------%
bits = randi(2,bits_num,1); %仿真比特数据 0 1
CFdata = 2*bits-3;%bpsk 调制 2->1 1->-1
%-------------------------------扩频:1 扩 SF--------------------------------%
CFdata_os = reshape(repmat(CFdata',SF,1),length(CFdata)*SF,1);
DS_data = CFdata_os' .* mseq_rp'; %信道部分,只仿真到中频,不考虑射频部分
%% 接收机部分
%-------------------------------接收信号AD--------------------------------%
US = 4; % AD 4倍过采样
DS_data_os = reshape(repmat(DS_data,US,1),length(DS_data)*US,1);
CodePhaseShift =123; % 码相位偏移
DS_data_rx = [2*randi(2,1,CodePhaseShift)-3,DS_data_os(1:end - CodePhaseShift)'];% 偏移位置前扩充随机信号
DS_data_rx = awgn(DS_data_rx,100,'measured'); % AWGN信号噪声
%-------------------------------捕获阶段--------------------------------%
mseq_rec = reshape(repmat(mseq',US,1),SF*US,1); % 本地扩频码 过采样
disp('----------捕获开始----------');
IntCap = zeros(bits_num,1);
flagCapture = zeros(bits_num,1);
CPhShiftLocalRec = zeros(bits_num,1);
CPhShiftLocal = 0; % 本地码初始相偏
step = US/2; % 捕获阶段 粗捕获 相位移动为1/2个码片
% 串行搜索
for i = 1:bits_num
mseq_local = circshift(mseq_rec,CPhShiftLocal);% 循环移位
IntCap(i) = abs(DS_data_rx((i-1)*SF*US+1:step:i*SF*US)*mseq_local(1:step:end)); % coarse
if (IntCap(i))>= step*SF/2 % 捕获门限
flagCapture(i) = 1;
disp('----------捕获成功!----------');
break;
else
CPhShiftLocal = CPhShiftLocal+step; % 相位控制字 调整相偏
end
CPhShiftLocalRec(i) = CPhShiftLocal;
end
figure;set(gcf,'Color','w','Position',[100 100 400 350]);
subplot(311);stairs(IntCap,'b','LineWidth',0.7);ylim([0 1.2*step*SF]);title('\fontname{宋体}捕获阶段积分结果');
subplot(312);stairs(CPhShiftLocalRec,'b','LineWidth',0.7);title('\fontname{宋体}捕获阶段本地码相位');
subplot(313);stairs(flagCapture,'b','LineWidth',0.7);ylim([-0.2,1.2]);xlabel('i');title('\fontname{宋体}捕获标志位');
%-------------------------------跟踪阶段--------------------------------%
CapStarter = i+1;
IntE = zeros(bits_num,1);
IntL = zeros(bits_num,1);
IntDS = zeros(bits_num,1);
CPhShiftLocalRec = zeros(bits_num,1);
CPhShiftLocalRec(CapStarter -1) = CPhShiftLocal;
step = 1; % 相位移动为1/US 个码片
disp('----------跟踪阶段----------');
for i = CapStarter:bits_num
mseqE = circshift(mseq_rec,CPhShiftLocal+1); % 超前码
mseqL = circshift(mseq_rec,CPhShiftLocal-1); % 滞后码
IntE(i) = abs(DS_data_rx((i-1)*SF*US+1:step:i*SF*US)*mseqE(1:step:end)); % 超前码积分
IntL(i) = abs(DS_data_rx((i-1)*SF*US+1:step:i*SF*US)*mseqL(1:step:end)); % 滞后码积分
if abs(IntE(i) - IntL(i)) <= step
CPhShiftLocal = CPhShiftLocal;
elseif IntE(i) > IntL(i)
CPhShiftLocal = CPhShiftLocal+step;% 超前支路>滞后支路 调整相偏右移
else
CPhShiftLocal = CPhShiftLocal-step; % 超前支路<滞后支路 调整相偏右移
end
CPhShiftLocalRec(i) = CPhShiftLocal;
mseqDS = circshift(mseq_rec,CPhShiftLocal);
IntDS(i) = (DS_data_rx((i-1)*SF*US+1:step:i*SF*US)*mseqDS(1:step:end)); % 本地码积分
end
figure;set(gcf,'Color','w','Position',[100 100 400 450]);
subplot(411);stairs(IntE,'b','LineWidth',0.7);
xlim([CapStarter-2,bits_num]);ylim([-5 1.2*SF*US]);title('\fontname{宋体}超前支路积分');
subplot(412);stairs(IntL,'b','LineWidth',0.7);
xlim([CapStarter-2,bits_num]);ylim([-5 1.2*SF*US]);title('\fontname{宋体}滞后支路积分');
subplot(413);
plot(CodePhaseShift*ones(bits_num,1),'--r','LineWidth',0.8);hold on;
stairs(CPhShiftLocalRec,'b','LineWidth',0.7);hold off;title('\fontname{宋体}本地码相位');
xlim([CapStarter-2,bits_num]);ylim([CodePhaseShift-US CodePhaseShift+US]);
subplot(414);stairs(IntDS,'b','LineWidth',0.7);
xlim([CapStarter-2,bits_num]);ylim([-1.2*SF*US 1.2*SF*US]);title('\fontname{宋体}本地码积分');xlabel('\it{i}');
%-------------------------------鉴相曲线--------------------------------%
mseqE = circshift(mseq_rec,1);
mseqL = circshift(mseq_rec,-1);
i=20;
[r1,lags] = xcorr(DS_data_rx((i-1)*SF*US+1:i*SF*US),mseqE);
[r2,~] = xcorr(DS_data_rx((i-1)*SF*US+1:i*SF*US),mseqL);
figure;set(gcf,'Color','w','Position',[100 100 400 250]);
subplot(211);plot(lags,r2,'r','LineWidth',0.6);hold on;
plot(lags,r1,'b','LineWidth',0.6);hold off;
legend('\fontname{宋体}超前支路','\fontname{宋体}滞后支路');
xlim([-CodePhaseShift-20*US,CodePhaseShift+20*US]);ylim([-1.2*SF*US,1.2*SF*US]);
xlabel('$\tau$','Interpreter','latex');
subplot(212);plot(lags,r2-r1,'color',[0,104,107]/255,'LineWidth',0.6);
xlim([-CodePhaseShift-20*US,CodePhaseShift+20*US]);ylim([-1.2*SF*US/2,1.2*SF*US/2]);
xlabel('$\tau$','Interpreter','latex');
没有合适的资源?快使用搜索试试~ 我知道了~
直扩DS-BPSK抗干扰代码
共54个文件
m:33个
mat:19个
asv:2个
需积分: 0 20 下载量 117 浏览量
2023-11-15
19:47:05
上传
评论 1
收藏 54KB ZIP 举报
温馨提示
基于Matlab实现DS-BPSK在多种干扰样式下的误码率
资源推荐
资源详情
资源评论
收起资源包目录
DS-BPSK.zip (54个子文件)
DS-BPSK
BER_rec_CHDSBPSK.mat 271B
t0703_DSBPSK_baseband_rcos.m 4KB
DSBPSK_baseband_capture_track.m 6KB
CHDSBPSK_IF_tranceiver_ReactiveJamming.m 3KB
BER_rec_Jamming3_EbN0100.mat 374B
DSBPSK_tranceiver.m 3KB
CHDSBPSK_IF_tranceiver.m 3KB
BER_rec_ReacJam0_EbN0100.mat 305B
f_produce_jam.m 333B
BER_rec.mat 531B
BER_rec_Jamming4_EbN0100.mat 365B
BER_rec_ReacJam60_EbN0100.mat 370B
f_narrowbandnoise_jam.m 578B
LTMap.m 321B
t0320_DSBPSK_costas_demo1.m 4KB
figureset.m 134B
t0704_DSBPSK_baseband_capture_track_sub.m 6KB
t0703_CHDSBPSK_IF_tranceiver_HopPara.m 4KB
SigSpectrum.m 593B
DSBPSK_tranceiverLDPC.m 4KB
demo_DSBPSK_IF_transeiver.m 4KB
f_multi_jam.m 417B
Coef.mat 859B
t0704_BER_test_CHDSBPSK_Jamming.m 2KB
t0704_DSBPSK_baseband_capture_track.m 6KB
DSBPSK_baseband_capture.m 6KB
t0704_DSBPSK_baseband_capture_sub.m 5KB
t0704_BER_test_DSBPSK_Jamming.m 2KB
BER_rec_ReacJam40_EbN0100.mat 375B
t0704_BER_test_DSBPSK.m 1KB
BER_rec_LDPC.mat 265B
t0703_DSBPSK_baseband.m 3KB
t0704_BER_test_CHDSBPSK.m 951B
BER_rec_LDPC_nonk.mat 265B
t0703_CHDSBPSK_IF_tranceiver.m 3KB
DSBPSK_tranceiver_jamming.m 3KB
t0704_DSBPSK_baseband_capture.m 6KB
f_broadbandnoise_jam.m 542B
BER_rec_ReacJam80_EbN0100.mat 375B
BER_rec_Jamming2_EbN0100.mat 294B
BER_rec_LDPC_2.mat 265B
BER_rec_Jamming11_EbN0100.mat 264B
t0703_DSBPSK_baseband_Jamming.m 3KB
BER_rec_LDPC_nk.mat 274B
BER_rec_ReacJam20_EbN0100.mat 369B
f_single_jam.m 133B
BER_rec_ReacJam100_EbN0100.mat 375B
t0703_DSBPSK_baseband_antiJam.asv 3KB
BER_rec_Jamming1_EbN0100.mat 334B
t0703_CHDSBPSK_IF_tranceiver_ReactiveJamming.m 4KB
t0703_DSBPSK_IF_tranceiver.m 3KB
t0703_DSBPSK_baseband.asv 2KB
BER_rec_Jamming11_l_EbN0100.mat 233B
CodeHop.m 978B
共 54 条
- 1
资源评论
InterNerdFreeJoy
- 粉丝: 136
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功