✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
Link 16是一种军事数据链网络,用于在战场上实现实时通信和共享战术数据。对于Link 16通信的战术数据链分析,主要包括以下方面:
-
数据链性能分析:评估Link 16数据链的性能参数,如传输速率、带宽、误码率、时延等。通过对这些参数的分析,可以确定Link 16数据链在特定环境下的表现和限制。
-
链路质量评估:对于Link 16通信链路的质量进行评估,包括信号强度、接收功率、信噪比等。这有助于判断通信链路的可靠性和稳定性,并为进一步分析提供基础。
-
障碍物影响分析:分析障碍物(如地形、建筑物等)对Link 16信号传播的影响。这涉及信号衰落、多径效应、阻塞和干扰等问题的识别和分析。
-
通信容量分析:评估Link 16数据链的容量,即支持数据传输的能力。这包括对链路资源的利用率、数据传输需求的估计以及数据链网络负荷的分析。
-
网络拓扑和节点分析:分析Link 16数据链的网络拓扑结构,包括节点配置和连接关系等。这有助于确定通信节点之间。
-
网络安全分析:对Link 16通信的网络安全性进行评估和分析,识别潜在威胁和安全漏洞,并提出相应的安全措施和防御策略。
通过对Link 16通信的战术数据链进行综合分析,可以为军事作战和指挥决策重要的支持。这些分析结果可用于优化通信资源分配、改进通信策略、增强战场态势感知能力以及改善指挥与控制效能。
⛄ 部分代码
%% 简易跳频系统误比特率统计分析
% 调制-->跳频-->信道-->解跳-->解调-->误码分析
tic
clc;clear;close all;
%% 参数设置
FH = 1; % 0: 不跳频传输 1:跳频传输
XINGZUO = 4;%BPSK:0 QPSK:1 '16QAM':2 '64QAM':3 'MSK':4
CRC_CODE = 0;%1: CRC编码 0:不CRC编码
DatainCode = 1;%'NO': 0 不编码 || 'rs':1 RS(31,15)编码 || 'juanji':2 (2,1,7)卷积编码
interwine = 1;
CCSK = 1;
% ******************** 系统参数设置*****************%
Rb = 5e4; % 速率:50Kb/s
Tb = 1 / Rb; % bit间隔
% ********************跳频参数设置 *****************%
hopping = 1000; % 跳频速率
bitsPerHop = Rb / hopping; % 每跳bit数目(必须为整数)
samp = 20; % 过采样倍数
fs = samp*Rb; % 采样率
BW = 5e6; % 跳频带宽
freqNum = floor(BW / (Rb*4)); % 跳频频点数目
freqInterval = BW / freqNum; % 频点间隔
freqSeq = ([0:freqNum-1] - floor(freqNum/2)) * freqInterval; % 跳频频点序列
carrier = 3e6; % 跳频中心频率
carrierSeq = carrier + freqSeq; % 发送时跳频频点序列
ts = 1/fs;
fd = 300; %多普勒频偏
pathPower = [-1.0 -1.0 -1.0 0 0 0 -3.0 -5.0 -7.0];
pathDelays = [0 50 120 200 230 500 1600 2300 5000]*1e-8;
rchan = comm.RayleighChannel('SampleRate',fs, ...
'PathDelays',pathDelays,'AveragePathGains',pathPower, ...
'MaximumDopplerShift',fd,'FadingTechnique','Sum of sinusoids');
switch FH
case 0
FIG_FH = '非跳频传输';
case 1
FIG_FH = '跳频传输';
end
% ********************调制参数设置 *****************%
switch XINGZUO
case 0 %'BPSK'
xz_n = 1;
FIG_XINGZUO = 'BPSK';
case 1 %'QPSK'
xz_n = 2;
FIG_XINGZUO = 'QPSK';
case 2 %'16QAM'
xz_n = 4;
FIG_XINGZUO = '16QAM';
case 3 %'64QAM'
xz_n = 6;
FIG_XINGZUO = '64QAM';
case 4 %'MSK'
xz_n = 4;
FIG_XINGZUO = 'MSK';
end
M = 2^xz_n;
% ***************CRC(237,225) X^12+1 *****************%
switch CRC_CODE
case 0 %不采取检错编码
crc_n = 1;
case 1 %(237,225)检错编码
crc_n = 225;
end
% ***************RS(31,15)编码参数*****************%
switch DatainCode
case 0 %0:不编码
% rs_m = 1;rs_k = 1;
rs_m = 5; rs_n = 2^rs_m - 1;
rs_t = 8; rs_k = rs_n - 2*rs_t ;%t: 能纠正的符号错误个数 k: 信息段长度
FIG_code = '无纠错编码';
case 1 %1: RS(31,15)编码
rs_m = 5; rs_n = 2^rs_m - 1;
rs_t = 8; rs_k = rs_n - 2*rs_t ;%t: 能纠正的符号错误个数 k: 信息段长度
FIG_code = 'RS(31,15)编码';
case 2 %2: (2,1,7)卷积编码
% rs_m = 1;rs_k = 1;
rs_m = 5; rs_n = 2^rs_m - 1;
rs_t = 8; rs_k = rs_n - 2*rs_t ;%t: 能纠正的符号错误个数 k: 信息段长度
FIG_code = '(2,1,7)卷积编码';
end
% ************************产生信源信号*******************%
MSG_len = rs_m * rs_k * xz_n*crc_n; % 输入大小最好为rs_m * rs_k*xz_n的整数倍(后面会每rs_m位转换为十进制,然后gf的输入的列数必须为rs_k)
% ***************** 传输信息参数设置*****************%
SYNC_BIT_NUM = 0; % 同步bit数目
frameNum = 1; % 传输帧数目
PACKET_NUM = 3; % 每一帧的包数目
BIT_PER_PACKET = MSG_len*bitsPerHop; %每一包的比特数
MSG_BIT_NUM = BIT_PER_PACKET*PACKET_NUM; % 有效消息bit数目
TX_BIT_NUM = SYNC_BIT_NUM + MSG_BIT_NUM; % 需要发送的bit数目
%% 构造发送序列
SYNC = randi([0 ,1] , 1 , SYNC_BIT_NUM); % 同步二进制序列(用一串随机序列代替)
MSG = randi([0,1] ,1 ,TX_BIT_NUM - SYNC_BIT_NUM); % 消息字符号
dataIn = [SYNC , MSG]; % 构造整个发送bit序列 %
%% CRC检错编码
switch CRC_CODE
case 0
dataIn_crc = dataIn';
FIG_CRC_CODE = 'no CRC';
case 1 %(237,225)检错编码
poly = 'z12+1'; %多项式
ChecksumsPerFrame = length(dataIn)/crc_n;%将传入帧细分为ChecksumsPerFrame个等长的子帧。因为每crc_n位数据编码一次
crcgenerator = comm.CRCGenerator(poly,'ChecksumsPerFrame',ChecksumsPerFrame);%CRC编码生成器
crcdetector = comm.CRCDetector(poly,'ChecksumsPerFrame',ChecksumsPerFrame);%CRC解码生成器
dataIn_crc = crcgenerator(dataIn'); %CRC编码 输入应是列向量
FIG_CRC_CODE = 'CRC(237,225)';
end
dataIn_crc = dataIn_crc';%转换回行向量
%% 信源纠错编码
switch DatainCode
case 0
encoded_msg = dataIn_crc; %1*30 0000
case 1 %'rs' 每kk位编码为nn位
%下面是(31,15)RS编码(每15个用31个来表示)
nn = rs_n; %编码后码字长度(信息段+监督段)
kk = rs_k; %信息段长度
encoded_msg = LSY_RSCode(dataIn_crc,nn,kk);%1 * 62 0000
case 2 %'juanji' 每k位编码为n位
%(n,k,m) n为输出长度 k为输入长度 m为编码约束度 n*(m+1)为约束长度 k/n为码率
%下面是(2,1,7)卷积码
L = 7; %约束长度
tbdepth = 42; % Traceback depth for Viterbi decoder Viterbi译码器回溯深度 一般是约束长度的5-9倍
trel = poly2trellis(L,[171,133]); %卷积码生成多项式
encoded_msg = convenc(dataIn_crc,trel); %卷积编码 1*60 0000
end
%% 交织 (对原数据分块进行处理:只是改变数据位置 不改变数据数量)
interwine_msg = zeros(1,length(encoded_msg));
switch interwine
case 0
interwine_msg = encoded_msg;
FIG_interwine = 'NO interwine';
case 1
rows = 10;cols = 100;%设定交织的深度与宽度 rows*cols应该等于输入矩阵的行数(因为交织按列取来做填充)
division = length(encoded_msg)/(rows*cols);%交织次数
for i =1:division
temp_data_1 = encoded_msg(1,(((i-1)*(rows*cols))+1):(i*(rows*cols)));%通过按列填充矩阵,并按行输出符号来恢复符号排序 https://www.jianshu.com/p/ac6c18fc3545
temp_data_2 = matintrlv(temp_data_1,rows,cols);
interwine_msg(1:i*rows*cols) = horzcat(interwine_msg(1:(i-1)*rows*cols),temp_data_2);
end
FIG_interwine = 'interwine';
end
%% CCSK软扩频 CCSK序列为32位
switch CCSK
case 0
ccsk_msg = interwine_msg;
FIG_CCSK = 'NO CCSK';
case 1
% ccskcode=[0 1 1 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0]';%Link16的CCSK序列 自相关性并不是最优
ccskcode=[1 0 1 1 1 0 1 0 0 0 1 1 1 1 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 1 1 0]';%优化后的CCSK序列 相关性更好 Link16 关键技术研究及系统建模
%n_ccsk = 32;%CCSK序列长度
ccsk_msg = LSY_CCSK32(interwine_msg,ccskcode);
FIG_CCSK = 'NO CCSK';
end
%% 星座映射
data_xz= reshape(ccsk_msg,log2(M),[])'; %以每组log2(M)比特进行分组,M=4
data_xzde= bi2de(data_xz,'left-msb'); %二进制转化为十进制
data = rcvBB1dim(1:end-EXCEED_BIT); %去掉末尾的0
[ii jj]
end
% 计算误bit率
ber(ii) = sumErrBit / (frameNum*TX_BIT_NUM);
berPacket(ii) = sumErrPacket/(frameNum*PACKET_NUM);
end
%% 误码输出
figure
semilogy(snr,ber,'-*')
save MSK+RS+CCSK+FH ber
hold on
grid on
BER_qpsk = duibizu_qpsk(dataIn,snr,PACKET_NUM);
save MSK+RS+CCSK BER_qpsk
semilogy(snr,BER_qpsk,'-o')
hold on
BER_16qam = duibizu_16qam(dataIn,snr,PACKET_NUM);
save MSK+CCSK BER_16qam
semilogy(snr,BER_16qam,'-x')
hold on
BER_64qam = duibizu_64qam(dataIn,snr,PACKET_NUM);
save MSK BER_64qam
semilogy(snr,BER_64qam,'-s')
hold on
grid on
xlabel('Eb/No (dB)')%如果不进行转换就是SNR
ylabel('误比特率')%如果不进行转换就是误码率
legend('MSK+RS+CCSK+FH','MSK+RS+CCSK','MSK+CCSK','MSK')
toc
⛄ 运行结果
⛄ 参考文献
[1] 宋南莹温东刘翠海.Link-16战术数据链系统纠错性能分析[J].数字技术与应用, 2018, 036(010):210-211,213.
[2] 朱天杰,刘强,潘杨杨,等.基于Link16的战术数据链网络规划平台[J].火力与指挥控制, 2015, 40(11):6.DOI:10.3969/j.issn.1002-0640.2015.11.043.
[3] 殷璐,严建钢,樊严.Link-16战术数据链抗干扰性能评估与仿真[J].航天电子对抗, 2007.DOI:JournalArticle/5aeadaeec095d70944f61c1f.