认识LTE(六): LTE中的信道特征以及信道估计技术
认识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的中信道可调参数
- 多普勒频移:低中高分别对应5,70,300Hz
- 多径时延和功率:看表
- 相关性:一个特殊形状的矩阵
二.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插值整个时频信道
插值书上提供了三种方法,他们的思路整体是类似的,先把频域插值,然后在时域上填充,三种方法分别使用了不同的手段
- 在有CSR的符号上插值,间隔为6,插值满后以这两个符号为基础,进行加权填充,类似模糊pid中的清晰化
- 在一个时隙内,首先把CSR所在的两个符号交替排列起来,这样插值间隔为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中的信道特征以及信道估计技术相关推荐
- LTE:LTE双连接技术简介
主要术语: 双连接:DC, Dual-Connectivity MeNB:提供S1-MME连接的eNodeB称为主eNodeB SeNB:另一个eNodeB用于提供额外的资源,称为次eNodeB MC ...
- [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 ...
- 【LTE】LTE中RNTI介绍
RNTI定义 RNTI,Radio Network Tempory Identity,无线网络临时标识符,在UE和eNB之间的信号信息内部的作为不同UE的标识. RNTI类型 在LTE中,定义了多种不 ...
- 室外型LoRa网关RAK7249仅工作于LTE和LoRa(8信道和16信道)时的平均功耗是多少?
室外型LoRa网关RAK7249仅工作于LTE和LoRa(8信道和16信道)时的平均功耗是多少? 要测试室外型LoRa网关RAK7249仅工作于LTE和LoRa时候的平均功耗,就需要关闭GPS和WiF ...
- 星星之火-39: 什么是LTE物理层“时频”资源以及与物理层信道帧结构、物理层信道的关系?
1. 时频资源 由子载波和时间组合而成的二维的矩阵,矩阵中的每个单元是可以调制二进制比特的符号(子载波). 频率维度:1200个单元格,最小单元是单载波的RE, 也称为符号:每个子载波之间的间隔是15 ...
- 【LTE】LTE轻松进阶学习笔记-接口协议(4)
接口协议栈 接口是指不同网元之间的信息交互方式,用于信息交互双方的"语言",就是接口协议,而接口协议的架构称为协议栈. 根据无线通信制式接口所处的物理位置,可以将接口分为空中接口和 ...
- 信道特征(码元、比特、波特率等概念)
信道特征 1,信道带宽 模拟信道带宽 W=f2-f1,其中f2为信道能通过的最高频率,f1为信道能通过的最低频率. 单位一般为Hz(赫兹) 码元--一个数字脉冲信号. 在数字通信中常常用时间间隔相同的 ...
- 无线网络-LTE (01) LTE Overview
01 LTE网络结构 LTE 网络与UMTS和CDMA相比网络结构更加的扁平化.它大致分为非漫游和漫游两种结构,但其基本的网元都没有变化,不同在于归属位置. LTE 非漫游网络结构 LTE 漫游网络结 ...
- HLAB:从 ProtBert 编码的蛋白质中学习 BiLSTM 特征,用于 I 类 HLA 肽结合预测
目录 1.背景 2.数据与方法 2.1 数据集摘要 2.2 预训练的 ProtBert 模型 2.3 BiLSTM(Bi-directional Long Short-Term Memory) 2.4 ...
最新文章
- python官网下载步骤手机-一招解决:各种版本的Python下载安装教程
- mat opencv 修改roi_OpenCV中如何提取不规则ROI区域
- 字符编码转换_进制转换(GB2312,GBK,JNI,HexTOStr)
- 好插件·用户造【CSND超好用插件】·【机械键盘大放送】
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)
- 怎样让友情链接更加有效果
- 产品经理和开发打起来了
- Mac远程控制软件哪款好用?Remote Desktop manager for mac「专业」
- 部门级服务器一般支持几个cpu,部门级服务器简介
- systemtap gui
- TF-tf.keras.layers.MaxPool1D
- 二阶系统的性能分析(开环相幅和阶跃响应)——自动控制原理基础补充(三)
- ico生成工具ico制作工具ico在线制作
- Spark Steaming快速入门
- 网页在线 运行 html 代码
- 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...
- 多段线简化算法,看这一篇就够了
- win10 iso安装包中的两个setup.exe如何使用
- 1951-2021年高考数学试题
- 良心推荐5款Python编辑器,请择优选用!
热门文章
- SwitchHosts的使用
- 计算机学院学生工作办公室,上海交通大学-电子信息与电气工程学院-学生工作办公室...
- 哈工大计算机学院考研复试分数线2021,哈工大考研分数线2021什么时候出来?
- 王道计算机网络第三章
- java conversion_java.util.UnknownFormatConversionException: Conversion = ''';
- 北师大计算机专业课代号,2020北京师范大学计算机改考,不是408
- 梅科尔工作室-Django保姆教程-1
- android o 红米4x,Redmi新机开始预热,会不会是年度最佳游戏手机?
- javaweb基础搭建及导入包报错Cannot resolve org.codehaus.plexus:plexus-utils:3.0.5
- android studio 成长历程