1.算法描述
随着无线通信的快速发展,5G正逐渐成长为支撑全社会各行业运作的大型基础性互联网络,其服务范围的大幅扩展对底层技术提出了诸多挑战,尤其是作为物理层关键技术之一的正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)。近来,深度学习因其在计算机视觉以及自然语言处理领域中的优异表现而备受关注,其极强的普适性也为传统通信提供了新的发展空间。就OFDM系统中的信道估计问题展开深入研究,探索深度学习在该领域的应用可能。
信道估计器是接收机一个很重要的组成部分。在OFDM系统中,信道估计器的设计上要有两个问题:一是导频信息的选择,由于无线信道的时变特性,需要接收机不断对信道进行跟踪,因此导频信息也必须不断的传送: 二是既有较低的复杂度又有良好的导频跟踪能力的信道估计器的设计,在确定导频发送方式和信道估计准则条件下,寻找最佳的信道估计器结构。 **在实际设计中,导频信息的选择和最佳估计器的设计通常又是相互关联的,因为估计器的性能与导频信息的传输方式有关。正交频分复用(orthogonalfrequencydivisionmultiplexing,ofdm)调制因其频带利用率高、抗频率选择性衰落的性能在通信系统中得到了广泛的应用,但ofdm解调对信道估计、时频偏估计、采样起始时刻偏差的估计精度要求很高,尤其是当使用高阶调制时,这一问题更为明显。信道估计和均衡是ofdm系统设计中的关键技术之一,通常ofdm系统的信道估计方法分为非盲信道估计方法和盲信道估计方法。非盲信道估计方法通常采用插入训练序列的方式或者插入导频的方式,盲信道估计方法则是在接收端采用相应的信号处理技术来获得信道时域或频域响应的估计值,有基于判决反馈的估计方法和基于相位的信道估计方法。
OFDM信号检测
OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(Multi Carrier Modulation),多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰落的能力,能够支持多用户接入。 OFDM技术由MCM(Multi-Carrier Modulation,多载波调制)发展而来。OFDM技术是多载波传输方案的实现方式之一,它的调制和解调是分别基于IFFT和FFT来实现的,是实现复杂度最低、应用最广的一种多载波传输方案。
OFDM主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰(ISI) 。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上可以看成平坦性衰落,从而可以消除码间串扰,而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。
OFDM技术是HPA联盟(HomePlug Powerline Alliance)工业规范的基础,它采用一种不连续的多音调技术,将被称为载波的不同频率中的大量信号合并成单一的信号,从而完成信号传送。由于这种技术具有在杂波干扰下传送信号的能力,因此常常会被利用在容易受外界干扰或者抵抗外界干扰能力较差的传输介质中。
通常的数字调制都是在单个载波上进行,如PSK、QAM等。这种单载波的调制方法易发生码间干扰而增加误码率,而且在多径传播的环境中因受瑞利衰落的影响而会造成突发误码。若将高速率的串行数据转换为若干低速率数据流,每个低速数据流对应一个载波进行调制,组成一个多载波的同时调制的并行传输系统。这样将总的信号带宽划分为N个互不重叠的子通道(频带小于Δf),N个子通道进行正交频分多重调制,就可克服上述单载波串行数据系统的缺陷。在向B3G/4G演进的过程中,OFDM是关键的技术之一,可以结合分集,时空编码,干扰和信道间干扰抑制以及智能天线技术,最大限度的提高了系统性能。包括以下类型:V-OFDM, W-OFDM, F-OFDM, MIMO-OFDM,多带-OFDM。
OFDM系统中二进制数据比特以PSK或苦QAM等调制方式调制到相应的子载波上。为了在接收端进行数据恢复,需要知道调制值的参考相位和幅度。在实际系统中,由于载波频率偏移、定时偏差以及信道的频率选择性衰落等的影响,信号会受到破坏,导致相位偏移和幅度变化等。为了准确恢复信号,接收端存在两种信号检测方法,差分检测和相干检测。相干检测利用信号的参考值来检测信号,所以对相干检测而言,如何在不引入过多训练序列的前提下得到检测所需的爹考值是我们需要考虑的问题,重点在于相干检测所需的信道估计算法。无线通信系统中经常采用差分检测或相干检测,在完善信道估计的前提下,为得到相同的误码率、后者所需要的信噪比比前者低3~4dB。 此外,差分检测方法比较适合于较低传输速率的OFDM系统,如欧洲的DAB系统,而对于要求高的传输速率和频谱效率的OFDM系统,相于检测则更合适。
在信号检测中另外一个重要工作是同步问题。OFDM系统中,在接收机对子载波解调之前必须进行两项同步工作:第一, 找出符号边界的位置和最佳的时间间隔使得信道间干扰(ICI)和符号间于扰(ISI)达到最小;第二,估计和纠正接收信号的载波频率偏移,因为任何的偏移会引入子载波间干扰和符号间干扰。尽管OFDM系统相对于单载汲系统来说对相位噪声和频率偏差更为敏感,但是事实证明,利用循环前缀和加入特殊的OFDM训练符号等方法,可以获得较好的时间同步和频率同步。
dnn
在信道变化迅速的系统中,通常依靠频域的导频子载波进行信道估计。导频子载波按照特定的规则插入到时频两维资源中。导频子载波处的信道响应可以通过最小二乘法(least-square,ls)和线性最小均方误差法(linearminimummeansquareerror,lmmse)进行估计,其他子载波处的信道响应则通过插值得到。基于判决反馈的盲信道估计方法将判决后的数据反馈至信道估计器进行去除调制信息操作,从而得到信道响应结果。基于相位的估计算法利用dqpsk调制信号幅度恒定相位为的整数倍的特性,利用接收信号相位在乘4、模2π、除以4的操作后,所有星座点都将变换到正实轴上(相位为0,幅度为1),这一操作相当于去除了dqpsk的调制信息,无需对信号进行判决。
近几年,人工智能尤其是深度学习在无线通信物理层中也得到了广泛的应用。深度学习(Deep Learning, DL),由Hinton等人于2006年提出,是机器学习(MachineLearning, ML)的一个新领域。深度学习被引入机器学习使其更接近于最初的目标----人工智能(AI,Artificial Intelligence)。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字、图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在语言和图像识别方面取得的效果,远远超过先前相关技术。它在搜索技术、数据挖掘、机器学习、机器翻译、自然语言处理、多媒体学习、语音、推荐和个性化技术,以及其它相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
for snr = 1:length(NoiseVar)
[i,snr]
% 1. Testing data generation
noiseVar = NoiseVar(snr);
% OFDM pilot symbol (can be interleaved with random data symbols)
PilotSym = 1/sqrt(2)*complex(sign(rand(NumPilotSym,NumSC,NumPacket)-0.5),sign(rand(NumPilotSym,NumSC,NumPacket)-0.5));
PilotSym(1:PilotSpacing:end) = FixedPilotAll;
% OFDM data symbol
DataSym = 1/sqrt(2)*complex(sign(rand(NumDataSym,NumSC,NumPacket)-0.5),sign(rand(NumDataSym,NumSC,NumPacket)-0.5));
% Transmitted OFDM frame
TransmittedPacket = [PilotSym;DataSym];
% Received OFDM frame
ReceivedPacket = genTransmissionReceptionOFDM(TransmittedPacket,LengthCP,h,noiseVar);
% Collect the data labels for the selected subcarrier
DataLabel = zeros(size(DataSym(:,idxSC,:)));
for c = 1:NumClass
DataLabel(logical(DataSym(:,idxSC,:) == 1/sqrt(2)*Mod_Constellation(c))) = Label(c);
end
DataLabel = squeeze(DataLabel);
% Testing data collection
XTest = cell(NumPacket,1);
YTest = zeros(NumPacket,1);
for c = 1:NumClass
[feature,label,idx] = getFeatureAndLabel(real(ReceivedPacket),imag(ReceivedPacket),DataLabel,Label(c));
featureVec = mat2cell(feature,size(feature,1),ones(1,size(feature,2)));
XTest(idx) = featureVec;
YTest(idx) = label;
end
YTest = categorical(YTest);
%% 2. DL detection
YPred = classify(Net,XTest,'MiniBatchSize',MiniBatchSize);
SER_DL(snr,i) = 1-sum(YPred == YTest)/NumPacket;
% 3. LS & MMSE detection
% Channel estimation
wrapper = @(x,y) performChanEstimation(x,y,RHH,noiseVar,NumPilot,NumSC,NumPath,idxSC);
ReceivedPilot = mat2cell(ReceivedPacket(1,:,:),1,NumSC,ones(1,NumPacket));
PilotSeq = mat2cell(FixedPilotAll,1,NumPilot,ones(1,NumPacket));
[EstChanLS,EstChanMMSE] = cellfun(wrapper,ReceivedPilot,PilotSeq,'UniformOutput',false);
EstChanLS = cell2mat(squeeze(EstChanLS));
EstChanMMSE = cell2mat(squeeze(EstChanMMSE));
% Symbol detection
SER_LS(snr,i) = getSymbolDetection(ReceivedPacket(2,idxSC,:),EstChanLS,Mod_Constellation,Label,DataLabel);
SER_MMSE(snr,i) = getSymbolDetection(ReceivedPacket(2,idxSC,:),EstChanMMSE,Mod_Constellation,Label,DataLabel);
end
end