认识LTE(六): LTE中的信道特征以及信道估计技术

文章目录

  • 认识LTE(六): LTE中的信道特征以及信道估计技术
  • 零.代码地址
  • 一.LTE中的信道特征
    • 1.信道的输入输出
    • 2.LTE 特征信道模型
  • 二.LTE的信道估计流程
    • 1.LTE中的CSR位置
    • 2.利用CSR进行信道估计
    • 3.根据CSR插值整个时频信道
    • 4.信道响应提取
    • 5.题外话:理想信道估计

零.代码地址

https://github.com/liu-zongxi/LTE_simulation

请大家看完觉得有用别忘了点赞收藏,github项目给star哦

一.LTE中的信道特征

1.信道的输入输出

输入x的大小是(nSamp, nTX)

信道的大小是(nSamp, nTX, nRX)

考虑多径则是(nSamp, L, nTX, nRX)

输出的大小是(nSamp, nRX)

2.LTE 特征信道模型

LTE的中信道可调参数

  1. 多普勒频移:低中高分别对应5,70,300Hz
  2. 多径时延和功率:看表
  3. 相关性:一个特殊形状的矩阵

二.LTE的信道估计流程

1.LTE中的CSR位置

既然要估计信道,首先我们要知道CSR的位置,在多TX中,他是这样的

注意到,四天线的情况下3 4 天线是与众不同的,这在后面的代码中会反复显示出这一点

2.利用CSR进行信道估计

注意到,在MIMO中永远只有一个RE在发送CSR,其他则发送0,被称为频谱零值,为什么呢?

只有这样,才仍然满足简单的除法的信道计算

由此,我们就得到了CSR的估计值

function hD = ChanEstimate_mTx(prmLTE, Rx, Ref, Mode)
%#codegen
% 基本的参数
Nrb           = prmLTE.Nrb;     % Number of resource blocks
Nrb_sc      = prmLTE.Nrb_sc;                 % 12 for normal mode
Ndl_symb = prmLTE.Ndl_symb;        % 7    for normal mode
numTx      = prmLTE.numTx;
numRx      = prmLTE.numRx;
% Initialize output buffer
switch numTx% 单天线情况case 1                                                                                       % Case of 1 Tx% hd的大小和网格是一致的hD = complex(zeros(Nrb*Nrb_sc, Ndl_symb*2,numRx));   % Iniitalize Output% size(Rx) = [2*Nrb,  4,numRx]  size(Ref) = [2*Nrb, 4] % 这个是四个符号的起始值% 这是一个RB中CSR的位置前后的空缺,要从下往上看!看我ppt里的图Edges=[0,3,0,3];for n=1:numRx                                                                     Rec=Rx(:,:,n);hp= Rec./Ref;% 根据CSR的位置生成全部的频谱了,三种方法都是非常巧妙的,值得学习!hD(:,:,n)=gridResponse(hp, Nrb, Nrb_sc, Ndl_symb, Edges,Mode);end% 两天线case 2                                                           % Case of 2 Tx% 多一维发射天线hD = complex(zeros(Nrb*Nrb_sc, Ndl_symb*2,numTx, numRx));% size(Rx) = [4*Nrb,  4,numRx]  size(Ref) = [2*Nrb, 4, numTx] for n=1:numRx% Rec=Rx(:,:,n);for m=1:numTx% 这个函数从CSR中取出了当前天线的CSR位置[R,Edges]=getBoundaries2(m, Rec);T=Ref(:,:,m);hp= R./T;% 得到完整的估计hD(:,:,m,n)=gridResponse(hp, Nrb, Nrb_sc, Ndl_symb, Edges,Mode);endend% 四天线case 4hD = complex(zeros(Nrb*Nrb_sc, Ndl_symb*2,numTx, numRx));% size(Rx) = [4*Nrb,  4,numRx]  size(Ref) = [2*Nrb, 4, numTx] for n=1:numRxRec=Rx(:,:,n);for m=1:numTx% 取出当前天线的CSR[R,idx3, Edges]=getBoundaries4(m, Rec);T=Ref(:,idx3,m);hp= R./T;% 获得完整的hDhD(:,:,m,n)=gridResponse(hp, Nrb, Nrb_sc, Ndl_symb, Edges,Mode);endend
end
end
%% Helper function
function [R,idx3, Edges]=getBoundaries4(m,  Rec)
coder.varsize('Edges');coder.varsize('idx3');
% 和2是类似的
% idx3也是为了三四天线特殊处理的
numPN=size(Rec,1);
idx_0=(1:2:numPN);
idx_1=(2:2:numPN);
Edges=[0,3,0,3];
idx3=1:4;
switch mcase 1index=[idx_0,  2*numPN+idx_1, 3*numPN+idx_0,  5*numPN+idx_1]';Edges=[0,3,0,3];   idx3=1:4;case 2index=[idx_1,  2*numPN+idx_0, 3*numPN+idx_1,  5*numPN+idx_0]';Edges=[3,0,3,0];    idx3=1:4;case 3index=[numPN+idx_0,  4*numPN+idx_1]';Edges=[0,3];           idx3=[1 3];case 4index=[numPN+idx_1,  4*numPN+idx_0]';Edges=[3,0];          idx3=[1 3];
end
R=reshape(Rec(index),numPN/2,numel(Edges));
end
%% Helper function
%
function [R, Edges]=getBoundaries2(m, Rec)
% numPN是一个符号中CSR的个数
% 首先区分出第一个和第二个天线的CSR,因为他是两种拼起来的
numPN=size(Rec,1);
idx_0=(1:2:numPN);
idx_1=(2:2:numPN);
Edges=[0,3,0,3];
switch mcase 1index=[idx_0,  numPN+idx_1, 2*numPN+idx_0, 3*numPN+idx_1]';Edges=[0,3,0,3]; case 2index=[idx_1,  numPN+idx_0, 2*numPN+idx_1,  3*numPN+idx_0]';Edges=[3,0,3,0];
end
% 取出当前天线的CSR,然后reshape成正确的形状
R=reshape(Rec(index),numPN/2,4);
end

3.根据CSR插值整个时频信道

插值书上提供了三种方法,他们的思路整体是类似的,先把频域插值,然后在时域上填充,三种方法分别使用了不同的手段

  1. 在有CSR的符号上插值,间隔为6,插值满后以这两个符号为基础,进行加权填充,类似模糊pid中的清晰化
  2. 在一个时隙内,首先把CSR所在的两个符号交替排列起来,这样插值间隔为3,然后认为时隙上信道不变化,复制
  3. 在一个子帧上,交替排列再平均,然后认为在子帧上信道不变化,复制

具体代码如下

function hD=gridResponse_averageSlot(hp, Nrb, Nrb_sc, Ndl_symb, Edges)
% Average over the two same Freq subcarriers, and then interpolate between
% them - get all estimates and then repeat over all columns (symbols).
% The interpolation assmues NCellID = 0.
% Time average two pilots over the slots, then interpolate (F)
% between the 4 averaged values, repeat for all symbols in sframe
% 首先把两个拼起来,然后插值
Separation=3;
hD = complex(zeros(Nrb*Nrb_sc, Ndl_symb*2));
N=numel(Edges);
% Compute channel response over all resource elements of OFDM symbols
switch N% 四天线34天线特殊情况case 2% Interpolate between subcarriersIndex=1:Ndl_symb;for n=1:N E=Edges(n);Edge=[E, 5-E];% 在频域插值y = InterpolateCsr(hp(:,n),  2* Separation, Edge);% Repeat between OFDM symbols in each slot% 复制这一列yR=y(:,ones(1,Ndl_symb));% 先完成这一时隙hD(:,Index)=yR;Index=Index+Ndl_symb;end% 正常情况case 4Edge=[0 2];% 把两个CSR拼起来h1_a_mat = [hp(:,1),hp(:,2)].';% 非常巧妙,这样一抽就把12一个个交叉起来了,和频域是符合的h1_a = h1_a_mat(:);% 同理h2_a_mat = [hp(:,3),hp(:,4)].';h2_a = h2_a_mat(:);% 两个拼起来hp_a=[h1_a,h2_a];Index=1:Ndl_symb;for n=1:size(hp_a,2) % 插值出频域的y = InterpolateCsr(hp_a(:,n),  Separation, Edge);% Repeat between OFDM symbols in each slot% 复制到每一个plot,也就是还是只有第一列有用yR=y(:,ones(1,Ndl_symb));hD(:,Index)=yR;Index=Index+Ndl_symb;endotherwiseerror('Wrong Edges parameter for function gridResponse.');
end
function hD=gridResponse_averageSubframe(hp, Ndl_symb, Edges)
% Average over the two same Freq subcarriers, and then interpolate between
% them - get all estimates and then repeat over all columns (symbols).
% The interpolation assmues NCellID = 0.
% Time average two pilots over the slots, then interpolate (F)
% between the 4 averaged values, repeat for all symbols in sframe
Separation=3;
N=numel(Edges);
Edge=[0 2];
% Compute channel response over all resource elements of OFDM symbols
switch N% 特殊情况case 2% 这里是直接把整个子帧交织起来了,非常巧妙,利用了matlab的特性h1_a_mat = hp.';h1_a = h1_a_mat(:);% Interpolate between subcarriers% 频域插值y = InterpolateCsr(h1_a,  Separation, Edge);% Repeat between OFDM symbols% 复制hD=y(:,ones(1,Ndl_symb*2));% 正常情况case 4% 一样的道理,先平均再交织起来,也是在整个子帧上h1_a1 = mean([hp(:, 1), hp(:, 3)],2);h1_a2 = mean([hp(:, 2), hp(:, 4)],2);h1_a_mat = [h1_a1 h1_a2].';h1_a = h1_a_mat(:);% Interpolate between subcarriersy = InterpolateCsr(h1_a,  Separation, Edge);% Repeat between OFDM symbols% 复制hD=y(:,ones(1,Ndl_symb*2));otherwiseerror('Wrong Edges parameter for function gridResponse.');
end
function hD=gridResponse_interpolate(hp, Nrb, Nrb_sc, Ndl_symb, Edges)
% Average over the two same Freq subcarriers, and then interpolate between
% them - get all estimates and then repeat over all columns (symbols).
% The interpolation assmues NCellID = 0.
% Time average two pilots over the slots, then interpolate (F)
% between the 4 averaged values, repeat for all symbols in sframe
%
Separation=6;
hD = complex(zeros(Nrb*Nrb_sc, Ndl_symb*2));
N=numel(Edges);
% Compute channel response over all resource elements of OFDM symbols
switch N% 边界为2,这是针对四天线的34天线的case 2% 所在的符号Symbols=[2, 9];% Interpolate between subcarriersfor n=1:N% 为什么是5,12中间隔着6然后再加上本身两个CSRE=Edges(n);Edge=[E, 5-E];% 频域插值y = InterpolateCsr(hp(:,n),  Separation, Edge);% 得到了CSR的那两列的全频域的信道hD(:,Symbols(n))=y;end% Interpolate between OFDM symbols% m是还未被填充的列,即符号for m=[1,3:8,10:14]% 2,9之间间隔7,加权平均% 这应该加绝对值吧。。。alpha=(1/7)*(m-2);beta=1-alpha;hD(:,m)    = beta*hD(:,2) + alpha*hD(:,  9);end% 有四个起始idx,这是针对正常情况case 4%  类似的Symbols=[1, 5, 8, 12];% Interpolate between subcarriersfor n=1:NE=Edges(n);Edge=[E, 5-E];y = InterpolateCsr(hp(:,n),  Separation, Edge);hD(:,Symbols(n))=y;end% Interpolate between OFDM symbolsfor m=[2, 3, 4, 6, 7]alpha=0.25*(m-1);beta=1-alpha;hD(:,m)    = beta*hD(:,1) + alpha*hD(:,  5);hD(:,m+7) =beta*hD(:,8) + alpha*hD(:,12);endotherwiseerror('Wrong Edges parameter for function gridResponse.');
end

4.信道响应提取

这一步的意思是我估计了全时频域的信号,现在,要把data对应的信道找出来使用

这就很简单了

function hD=ExtChResponse(chEst, idx_data, prmLTE)
% 这个函数的作用是当你得到全部的hD后,要把CSR等东西都去掉,只留下data的信道
%#codegen
numTx = prmLTE.numTx;
numRx = prmLTE.numRx;
% 取出,再放进去
if (numTx==1)hD=complex(zeros(numel(idx_data),numRx));for n=1:numRxtmp=chEst(:,:,n);hD(:,n)=tmp(idx_data);end
elsehD=complex(zeros(numel(idx_data),numTx,numRx));for n=1:numRxfor m=1:numTxtmp=chEst(:,:,m,n);hD(:,m,n)=tmp(idx_data);endend
end

5.题外话:理想信道估计

这是利用了matlab算出来的pathG,在时间上平均后放入信道再做FFT得到了,类似我早起博客里OFDM仿真的信道生成

function H = IdChEst(prmLTEPDSCH, prmMdl, chPathG)
% 理想信道估计
% Ideal channel estimation for LTE subframes
%
%   Given the system parameters and the MIMO channel path Gains, provide
%   the ideal channel estimates for the RE corresponding to the data.
%   Limitation - will work for path delays that are multiple of channel sample
%   time and largest pathDelay < size of FFT
%   Implementation based on FFT of channel impulse response
persistent hFFT;
if isempty(hFFT) hFFT = dsp.FFT;
end
% get parameters
% 基本参数
numDataTones = prmLTEPDSCH.Nrb*12; % Nrb_sc = 12
N                        = prmLTEPDSCH.N;
cpLen0               = prmLTEPDSCH.cpLen0;
cpLenR               = prmLTEPDSCH.cpLenR;
Ndl_symb           = prmLTE.Ndl_symb;        % 7    for normal mode
slotLen               = (N*Ndl_symb + cpLen0 + cpLenR*6);
% Get path delays
pathDelays = prmMdl.PathDelays;
% Delays, in terms of number of channel samples, +1 for indexing
sampIdx = round(pathDelays/(1/prmLTEPDSCH.chanSRate)) + 1;
% 获得信道的参数
[~, numPaths, numTx, numRx] = size(chPathG);
% Initialize output
% 信道的大小
H = complex(zeros(numDataTones, 2*Ndl_symb, numTx, numRx));
for i= 1:numTxfor j = 1:numRx% 获得当前两天线之间的增益link_PathG = chPathG(:, :, i, j);% Split this per OFDM symbolg = complex(zeros(2*Ndl_symb, numPaths));% 先解决1和7的OFDMfor n = 1:2 % over two slots% First OFDM symbolIndex=(n-1)*slotLen + (1:(N+cpLen0));% 得到一个符号时间内的平均增益g((n-1)*Ndl_symb+1, :) = mean(link_PathG(Index, :), 1);           % Next 6 OFDM symbols% 其他的OFDM符号for k = 1:6Index=(n-1)*slotLen+cpLen0+k*N+(k-1)*cpLenR + (1:(N+cpLenR));g((n-1)*Ndl_symb+k+1, :) = mean(link_PathG(Index, :), 1);endend% h的时域hImp = complex(zeros(2*Ndl_symb, N));% assign pathGains at impulse response sample locations% 获得时域hhImp(:, sampIdx) = g; % FFT of impulse responseh = step(hFFT, hImp.'); % Reorder, remove DC, Unpack channel gains% fftshifth = [h(N/2+1:N, :); h(1:N/2, :)];% 取出需要的频率H(:, :, i, j) = [h(N/2-numDataTones/2+1:N/2, :); h(N/2+2:N/2+1+numDataTones/2, :)];end
end

认识LTE(六): LTE中的信道特征以及信道估计技术相关推荐

  1. LTE:LTE双连接技术简介

    主要术语: 双连接:DC, Dual-Connectivity MeNB:提供S1-MME连接的eNodeB称为主eNodeB SeNB:另一个eNodeB用于提供额外的资源,称为次eNodeB MC ...

  2. [4G5G专题-75]:流程 - 4G LTE无线接入网中运营商标识、基站标识、终端标识大全

    目录 第1章 L3层信令架构 1.1 RAN协议栈 1.2 信令流与数据流 1.3 信道映射 1.4 连接管理 第2章 运营商标识标识 2.1 PLMN概述 2.2 PLMN组成 2.3 终端侧对PL ...

  3. 【LTE】LTE中RNTI介绍

    RNTI定义 RNTI,Radio Network Tempory Identity,无线网络临时标识符,在UE和eNB之间的信号信息内部的作为不同UE的标识. RNTI类型 在LTE中,定义了多种不 ...

  4. 室外型LoRa网关RAK7249仅工作于LTE和LoRa(8信道和16信道)时的平均功耗是多少?

    室外型LoRa网关RAK7249仅工作于LTE和LoRa(8信道和16信道)时的平均功耗是多少? 要测试室外型LoRa网关RAK7249仅工作于LTE和LoRa时候的平均功耗,就需要关闭GPS和WiF ...

  5. 星星之火-39: 什么是LTE物理层“时频”资源以及与物理层信道帧结构、物理层信道的关系?

    1. 时频资源 由子载波和时间组合而成的二维的矩阵,矩阵中的每个单元是可以调制二进制比特的符号(子载波). 频率维度:1200个单元格,最小单元是单载波的RE, 也称为符号:每个子载波之间的间隔是15 ...

  6. 【LTE】LTE轻松进阶学习笔记-接口协议(4)

    接口协议栈 接口是指不同网元之间的信息交互方式,用于信息交互双方的"语言",就是接口协议,而接口协议的架构称为协议栈. 根据无线通信制式接口所处的物理位置,可以将接口分为空中接口和 ...

  7. 信道特征(码元、比特、波特率等概念)

    信道特征 1,信道带宽 模拟信道带宽 W=f2-f1,其中f2为信道能通过的最高频率,f1为信道能通过的最低频率. 单位一般为Hz(赫兹) 码元--一个数字脉冲信号. 在数字通信中常常用时间间隔相同的 ...

  8. 无线网络-LTE (01) LTE Overview

    01 LTE网络结构 LTE 网络与UMTS和CDMA相比网络结构更加的扁平化.它大致分为非漫游和漫游两种结构,但其基本的网元都没有变化,不同在于归属位置. LTE 非漫游网络结构 LTE 漫游网络结 ...

  9. HLAB:从 ProtBert 编码的蛋白质中学习 BiLSTM 特征,用于 I 类 HLA 肽结合预测

    目录 1.背景 2.数据与方法 2.1 数据集摘要 2.2 预训练的 ProtBert 模型 2.3 BiLSTM(Bi-directional Long Short-Term Memory) 2.4 ...

最新文章

  1. python官网下载步骤手机-一招解决:各种版本的Python下载安装教程
  2. mat opencv 修改roi_OpenCV中如何提取不规则ROI区域
  3. 字符编码转换_进制转换(GB2312,GBK,JNI,HexTOStr)
  4. 好插件·用户造【CSND超好用插件】·【机械键盘大放送】
  5. 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)
  6. 怎样让友情链接更加有效果
  7. 产品经理和开发打起来了
  8. Mac远程控制软件哪款好用?Remote Desktop manager for mac「专业」
  9. 部门级服务器一般支持几个cpu,部门级服务器简介
  10. systemtap gui
  11. TF-tf.keras.layers.MaxPool1D
  12. 二阶系统的性能分析(开环相幅和阶跃响应)——自动控制原理基础补充(三)
  13. ico生成工具ico制作工具ico在线制作
  14. Spark Steaming快速入门
  15. 网页在线 运行 html 代码
  16. 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...
  17. 多段线简化算法,看这一篇就够了
  18. win10 iso安装包中的两个setup.exe如何使用
  19. 1951-2021年高考数学试题
  20. 良心推荐5款Python编辑器,请择优选用!

热门文章

  1. SwitchHosts的使用
  2. 计算机学院学生工作办公室,上海交通大学-电子信息与电气工程学院-学生工作办公室...
  3. 哈工大计算机学院考研复试分数线2021,哈工大考研分数线2021什么时候出来?
  4. 王道计算机网络第三章
  5. java conversion_java.util.UnknownFormatConversionException: Conversion = ''';
  6. 北师大计算机专业课代号,2020北京师范大学计算机改考,不是408
  7. 梅科尔工作室-Django保姆教程-1
  8. android o 红米4x,Redmi新机开始预热,会不会是年度最佳游戏手机?
  9. javaweb基础搭建及导入包报错Cannot resolve org.codehaus.plexus:plexus-utils:3.0.5
  10. android studio 成长历程