function recLayerSymb = de_precoding(recPrecodedSymb,HfreqCell,iUE,SNRdB)
% 功能:根据估计的信道矩阵和发端预编码向量,计算等效的信道,并是用MMSE、ZF算法估计发送信号
global LTE_par
nTx = LTE_par.BS_par.nAnt;
nRx = LTE_par.UE_par.nAnt;
CFI = LTE_par.CFI;
scPerRB = LTE_par.scPerRB;
nOfdmSymb = LTE_par.nOfdmSymb;
nRB = LTE_par.UE_par.nRB(iUE);
M_0_SYMB = LTE_par.UE_par.M_0_SYMB(iUE);
cellID = LTE_par.BS_par.cellID;
iSubFrame = LTE_par.iSubFrame;
ns = iSubFrame*2;
nLayer = LTE_par.UE_par.nLayer(iUE);
detecAlg = LTE_par.UE_par.detecAlg;
preProcess = LTE_par.UE_par.preProcess;
nSubCarr = nRB*scPerRB;
pilotLocation = find_pilot(cellID,nTx,scPerRB,nOfdmSymb,nRB,ns);
if strcmp(preProcess,'singleAnt')
recLayerSymb = zeros(nLayer,M_0_SYMB);
iSymb = 1;
for iOfdm = CFI+1:nOfdmSymb
for iCarr = 1:nSubCarr
if pilotLocation(iCarr,iOfdm) == 0
r = zeros(nRx,1);
H = HfreqCell{iCarr};
for iRx = 1:nRx
r(iRx) = recPrecodedSymb{iRx}(iCarr,iOfdm);
end
xEst = mmse_detect(r,H,SNRdB); % MMSE检测
recLayerSymb(:,iSymb) = xEst;
iSymb = iSymb+1;
end
end
end
elseif strcmp(preProcess,'spatialMultiplexing')
recLayerSymb = zeros(nLayer,M_0_SYMB);
load CodeBook
PMI = LTE_par.UE_par.PMI(iUE);
PMI = PMI+1+(nLayer-1)*2^nTx;
if nTx == 2
iSymb = 1;
for iOfdm = CFI+1:nOfdmSymb
for iCarr = 1:nSubCarr
if pilotLocation(iCarr,iOfdm) == 0
H = HfreqCell{iCarr};
W = W_SM_2Tx(:,1:nLayer,PMI);
Heq = H*W;
r = zeros(nRx,1);
for iRx = 1:nRx
r(iRx) = recPrecodedSymb{iRx}(iCarr,iOfdm);
end
xEst = mmse_detect(r,Heq,SNRdB); % MMSE检测
recLayerSymb(:,iSymb) = xEst;
iSymb = iSymb+1;
end
end
end
elseif nTx == 4
iSymb = 1;
for iOfdm = CFI+1:nOfdmSymb
for iCarr = 1:nSubCarr
if pilotLocation(iCarr,iOfdm) == 0
H = HfreqCell{iCarr};
W = W_SM_4Tx(:,1:nLayer,PMI);
Heq = H*W;
r = zeros(nRx,1);
for iRx = 1:nRx
r(iRx) = recPrecodedSymb{iRx}(iCarr,iOfdm);
end
xEst = mmse_detect(r,Heq,SNRdB)
recLayerSymb(:,iSymb) = xEst;
iSymb = iSymb+1;
end
end
end
end
elseif strcmp(preProcess,'tranmitDiversity')
if nTx == 2
iSymb = 1;
recLayerSymb = zeros(nLayer,M_0_SYMB/2);
for iOfdm = CFI+1:nOfdmSymb
availableDataCarr = find(pilotLocation(:,iOfdm)==0);
len = length(availableDataCarr);
groupSize = 2;
if nRx == 1
for iGroup = 1:2:len
r = zeros(groupSize,nRx);
for itd = 1:groupSize
for iRx = 1:nRx
r(itd,iRx) = recPrecodedSymb{iRx}(availableDataCarr(iGroup+itd-1),iOfdm);
end
end
rTrans = [r(1);r(2)'];
H = 1/2*(HfreqCell{availableDataCarr(iGroup)}+HfreqCell{availableDataCarr(iGroup+1)});
Heq = [H(1,1) -H(1,2);H(1,2)' H(1,1)'];
xEst = mmse_detect(rTrans,Heq,SNRdB);
xEst(2) = xEst(2)';
iLayerSymb = xEst*sqrt(nLayer);
recLayerSymb(:,iSymb) = iLayerSymb;
iSymb = iSymb+1;
end
elseif nRx == 2
for iGroup = 1:2:len
r = zeros(groupSize,nRx);
for itd = 1:groupSize
for iRx = 1:nRx
r(itd,iRx) = recPrecodedSymb{iRx}(availableDataCarr(iGroup+itd-1),iOfdm);
end
end
rTrans = [r(1);r(2)';r(3);r(4)'];
H = 1/2*(HfreqCell{availableDataCarr(iGroup)}+HfreqCell{availableDataCarr(iGroup+1)});
Heq = [H(1,1) -H(1,2);H(1,2)' H(1,1)';H(2,1) -H(2,2);H(2,2)' H(2,1)'];
xEst = mmse_detect(rTrans,Heq,SNRdB);
xEst(2) = xEst(2)';
iLayerSymb = xEst*sqrt(nLayer);
recLayerSymb(:,iSymb) = iLayerSymb;
iSymb = iSymb+1;
end
end
end
elseif nTx == 4
if mod(M_0_SYMB,4) ~= 0
recLayerSymb = zeros(nLayer,(M_0_SYMB+2)/4);
else
recLayerSymb = zeros(nLayer,M_0_SYMB/4);
end
iSymb = 1;
for iOfdm = CFI+1:nOfdmSymb
availableDataCarr = find(pilotLocation(:,iOfdm)==0);
len = length(availableDataCarr);
groupSize = 4;
if nRx == 1
for iGroup = 1:4:len
r = zeros(groupSize,nRx);
for itd = 1:groupSize
for iRx = 1:nRx
r(itd,iRx) = recPrecodedSymb{iRx}(availableDataCarr(iGroup+itd-1),iOfdm);
end
end
xEst = zeros(groupSize,1);
rTrans = [r(1);r(2)'];
H = 1/2*(HfreqCell{availableDataCarr(iGroup+0)}...
+ HfreqCell{availableDataCarr(iGroup+2)});
H1 = H(:,[1 3]);
Heq = [H1(1,1) -H1(1,2);H1(1,2)' H1(1,1)'];
xEst([1 2]) = mmse_detect(rTrans,Heq,SNRdB);
xEst(2) = xEst(2)';
rTrans = [r(3);r(4)'];
H = 1/2*(HfreqCell{availableDataCarr(iGroup+1)}...
+ HfreqCell{availableDataCarr(iGroup+3)});
H2 = H(:,[2 4]);
Heq = [H2(1,1) -H2(1,2);H2(1,2)' H2(1,1)'];
xEst([3 4]) = mmse_detect(rTrans,Heq,SNRdB);
xEst(4) = xEst(4)';
recLayerSymb(:,iSymb) = xEst*sqrt(2);
iSymb = iSymb+1;
end
elseif nRx == 2
for iGroup = 1:4:len
r = zeros(groupSize,nRx);
for itd = 1:groupSize
for iRx = 1:nRx
r(itd,iRx) = recPrecodedSymb{iRx}(availableDataCarr(iGroup+itd-1),iOfdm);
end
end
xEst = zeros(groupSize,1);
rTrans = [r(1,1);r(2,1)';r(1,2);r(2,2)'];
H = 1/2*(HfreqCell{availableDataCarr(iGroup+0)}...
+ HfreqCell{availableDataCarr(iGroup+2)});
H1 = H(:,[1 3]);
没有合适的资源?快使用搜索试试~ 我知道了~
基于matlab实现的维也纳大学,LTE-A下行链路matlab链路级仿真程序 .rar
共45个文件
m:37个
mat:3个
mexw64:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 17 浏览量
2024-05-04
20:36:08
上传
评论
收藏 110KB RAR 举报
温馨提示
基于matlab实现的维也纳大学,LTE-A下行链路matlab链路级仿真程序。.rar
资源推荐
资源详情
资源评论
收起资源包目录
基于matlab实现的维也纳大学,LTE-A下行链路matlab链路级仿真程序。.rar (45个子文件)
基于matlab实现的维也纳大学,LTE-A下行链路matlab链路级仿真程序。
LTE_Downlink
send_process.m 3KB
rsc_encode.m 582B
sub_carr_mapping.m 1KB
codeblock_segment.m 2KB
LTE_rx_siso_decode.mexw32 14KB
de_subcarr_mapping.m 595B
LTE_rx_siso_decode.mexmaci64 17KB
crcCheck24b.m 455B
de_ofdm.m 607B
gen_channel.m 896B
TransblockPar.mat 3KB
scramble.m 705B
turbo_encoder.m 1KB
mmse_detect.m 572B
modulation.m 832B
rate_match.m 3KB
de_layer_mapping.m 3KB
main.m 6KB
InLeaverPar.mat 1022B
precoding.m 5KB
channel_est_real.m 1KB
encode_bit.m 261B
de_precoding.m 9KB
codebook_select.m 3KB
DSH_process.m 4KB
layer_mapping.m 2KB
info_gen.m 900B
LTE_rx_siso_decode.mexa64 18KB
WaitBar.m 597B
CodeBook.mat 1KB
rec_process.m 3KB
crcCheck24a.m 436B
internal_leaver_par.m 423B
de_scramble.m 851B
ofdm_generation.m 680B
de_modulate.m 829B
turbo_decoder.m 1KB
crc24a.m 438B
LTE_schedule_subband.m 525B
crc24b.m 440B
channel.m 1003B
de_rate_match.m 2KB
LTE_rx_siso_decode.mexw64 15KB
find_pilot.m 1KB
维也纳大学,LTE-A下行链路matlab链路级仿真程序。.rar 53KB
共 45 条
- 1
资源评论
依然风yrlf
- 粉丝: 909
- 资源: 3118
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功