% function demo_DSH_process
% 请从LTE_main_gui_final.m文件开始运行
% 下行共享信道数据生成
% 基站的基带处理函数,该函数仅用户数据信道,PDSCH处理流程为:
% 产生信息-->CRC校验-->码块分割-->turbo编码-->速率匹配
% -->加扰-->层映射-->预编码-->子载波映射-->OFDM调制-->天线映射
%
% Author: 程式小组(徐萌 张妙 张晓庆)
% Date: 2010-07-11
% ==========================================================
global LTE_par
bar = WaitBar(0,'仿真开始>>>',gcf,550,320);
% 时间模拟标记 在19.8s处理完成,将数据保存待发送,否则丢弃
LTE_par.genFlag = 1;
fprintf('仿真起始帧号为 %d 子帧号为 %d \n',LTE_par.iFrame,LTE_par.iSubFrame);
LTE_schedule_subband % 此处只对用户分配到固定的子带上
for iSimu = 1:LTE_par.nTime
str = sprintf('当前进行第 %d 次仿真>>>',iSimu);
WaitBar(iSimu/LTE_par.nTime,bar,str);
nUE = LTE_par.nUE; % 用户总数
CP = LTE_par.CP; % 循环前缀长度
nTx = LTE_par.BS_par.nAnt; % 基站端天线数
RNTI = LTE_par.UE_par.RNTI; % 无线网络临时指示
cellID = LTE_par.BS_par.cellID; % 小区ID号
iSubFrame = LTE_par.iSubFrame; % 当前子帧号 取值为0~9
FFT_SIZE = LTE_par.FFT_SIZE; % FFT变换点数
transMod = LTE_par.UE_par.transMod; % 传输模式 1~7
preProcess = LTE_par.UE_par.preProcess; % 预处理模式 1:singleAnt,2:tranmitDiversity 3:spatialMultiplexing
% 基带处理起始时间
t0 = clock;
% 打印输出当前用户参数配置
show_par();
if LTE_par.errFlag == false
% ===================PRBS 数据产生器 ===============================
% PRBS起始时间
t0 = clock;
saveSendInfo = cell(nUE,1);
for iUE = 1:nUE
sizeTB = LTE_par.UE_par.sizeTB(:,iUE); % iUE的传输块大小
% 信息生成
sendInfoBit = info_gen(sizeTB);
saveSendInfo{iUE} = sendInfoBit;
end
% PRBS结束时间
time = etime(clock,t0);
if time < 0.2
pause(0.2-time); % 延时到指定时刻
end
fprintf('PRBS数据生成模块处理完成\n');
% =================== 基带处理模块 ===================================
for iUE = 1:nUE
nTB = LTE_par.UE_par.nCW(iUE); % iUE的TB数
nLayer = LTE_par.UE_par.nLayer(iUE); % iUE的层数
PMI = LTE_par.UE_par.PMI(iUE); % 第iUE个用户的预编码码本索引
M_0_SYMB = LTE_par.UE_par.M_0_SYMB(iUE);% 码字0调制符号数
cbConcatBit = cell(nTB,1); % 保存码块级联符号
modSymbCell = cell(nTB,1); % 保存调制符号
f = []; % 码块级联临时变量
sendInfoBit = saveSendInfo{iUE};
for iTB = 1:nTB
Qm = LTE_par.UE_par.Qm(iTB,iUE); % 调制方式对应的阶数
% 码块分割
segBit = codeblock_segment(sendInfoBit{iTB},iUE,iTB);
nCB = LTE_par.UE_par.nCB(iTB,iUE); % 获取当前用户CB数
for iCB = 1:nCB
% Turbo 编码
encodeBit = turbo_encoder(segBit{iCB});
if strcmp(LTE_par.setpar, 'loadPar');
saveCodeBit((iCB-1)*3+1:iCB*3,:) = encodeBit;
end
% 速率匹配
rateMatchBit = rate_match(encodeBit,iUE,iTB,iCB);
% 码块级联
f = cat(2,f,rateMatchBit);
end
% 加扰
scrambleBit = scramble(f,iTB,RNTI,iSubFrame,cellID);
% 调制
modSymb = modulation(scrambleBit,Qm);
modSymbCell{iTB} = modSymb;
cbConcatBit{iTB} = f;
f = [];
end
% 层映射
layerSymb = layer_mapping(modSymbCell,nTB,nLayer,preProcess);
% 预编码
precodedSymb = precoding(layerSymb,preProcess,transMod,nTx,PMI,M_0_SYMB);
% 子载波映射 得到天线端口上资源格形式的复值符号
% 输出为cell类型 举例:mapSymbCell{iTx}(iCarr,iOfdm)
mapSymbCell = sub_carr_mapping(precodedSymb,iUE);
% 频谱搬移 频域位置交换{B A}-->{A B}
for iTx = 1:nTx
mapSymbCell{iTx} = [mapSymbCell{iTx}(FFT_SIZE/2+1:FFT_SIZE,:);mapSymbCell{iTx}(1:FFT_SIZE/2,:)];
end
% % OFDM符号生成
ofdmSymb = ofdm_generation(mapSymbCell,FFT_SIZE,nTx,CP);
end
else
fprintf('当前子帧参数配置错误,等待下一帧!!!\n');
end
if strcmp(LTE_par.setpar, 'manuPar');
time = etime(clock,t0);
pause(5-time);
% ============== 从19.6s开始高层清零 产生新参数 并下发 ====================
fprintf('高层清零 产生新参数\n')
t0 = clock;
% 保存当前帧参数,用来估计业务复杂程度
save_par = LTE_par;
updata_parameter();
time = etime(clock,t0);
if time < 1
pause(1-time);
end
load NextPar;
LTE_par = next_LTE_par;
% =============== 从19.8s 检查参数合理性 =================================
fprintf('检查参数合理性 产生新参数\n')
% 检查参数合理性
errorMsg = [];
errNum = 1;
% 参数检查函数
currentErrFlag = LTE_par.errFlag;
LTE_check_parameters;
if errNum == 1
LTE_par.errFlag = false;
fprintf('下一个子帧参数配置正确\n')
else
LTE_par.errFlag = true;
fprintf('下一个子帧参数配置错误\n')
for iMsg = 1:errNum
disp(errorMsg{iMsg});
end
end
% =============== 根据业务复杂程度,模拟基带处理时间 ======================
if currentErrFlag == false
if sum(save_par.UE_par.nRB) > 0.8*save_par.RB_DL
overFlow = 0.5+rand;
if mean(mean(save_par.UE_par.Qm)) > 4;
overFlow = overFlowFlag + 0.3;
end
else
overFlow = 0.2+rand;
end
if overFlow > 1
fprintf('基带处理超时,数据抛弃 !\n')
else
fprintf('基带处理正常,数据保存 !\n')
LTE_par.genFlag = LTE_par.genFlag+1;
end
else
fprintf('参数配置错误,未做基带处理 !\n')
end
end
% 将'业务数据.dat'在各个模块的信息保存
if strcmp(LTE_par.setpar, 'loadPar');
saveSegBit1 = segBit{1}; % 第一个码块分割后数据 2进制
saveSegBit2 = segBit{2}; % 第二个码块分割后数据 2进制
saveCodeBit1 = saveCodeBit(1:3,:); % 第一个码块编码后数据 2进制
saveCodeBit2 = saveCodeBit(4:6,:); % 第二个码块编码后数据 2进制
saveConBit = cbConcatBit{1}; % 速率匹配后码块级联数据 2进制
saveScrambleBit = scrambleBit; % 加扰后的数据 2进制
saveModSymb = modSymb; % 经过调制的复值符号 复数
% 将各模块数据结果保存为.mat文件
save 各模块数据.mat saveSegBit1 saveSegBit2 saveCodeBit1 saveCodeBit2 saveConBit saveScrambleBit saveModSymb
% 将各模块数据结果保存为.dat文件
segment1 = '第一个码块分割后result.dat'; % 第一个码块分割后数据 16进制
write_result(saveSegBit1,segment1,0);
segment2 = '第二个码块分割后result.dat'; % 第二个码块分割后数据 16进制
write_result(saveSegBit2,segment2,0);
encode1 = '第一个码块编码后result.dat'; % 第一个码块编码后数据 16进制
zxc.zip_CRC24b_itb in matlab
版权申诉
9 浏览量
2022-09-24
04:08:41
上传
评论
收藏 5KB ZIP 举报
JonSco
- 粉丝: 77
- 资源: 1万+
最新资源
- 数据分析案例-顾客购物数据可视化分析(数据集+代码).rar
- 19613fc3f7378acf2787f12bbf7a34a1.JPG
- mmexport1718846385059.jpg
- 后缀表达式求值.pdf
- 微信小程序商城项目源码(仿拼夕夕)
- QGroundcontrol 四机协同编队飞行日志
- 海信智能电视刷机数据 LED43EC520UA(0000) 生产用软件数据 务必确认机编一致 强制刷机 整机USB升级程序
- DirSearch-master.zip
- 02块状物品推送机的机构综合与设计.docx
- js库实现中缀表达式(即日常使用的四则运算表达式)转换成后缀表达式(逆波兰式),方便计算机计算
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈