✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。
🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。
🔥 内容介绍
一、引言
随着智能交通系统(ITS)的飞速发展,IEEE - 802.11p 作为专用短程通信(DSRC)的无线通信标准,在车联网(V2X)中扮演着关键角色。准确的信道估计对于 IEEE - 802.11p 系统实现可靠的数据传输至关重要。传统的信道估计方法在复杂多变的车载通信环境下,性能往往受到限制。而深度学习凭借其强大的非线性建模能力,为 IEEE - 802.11p 标准下的信道估计提供了新的思路和解决方案。
二、IEEE - 802.11p 标准概述
(一)IEEE - 802.11p 的应用场景
IEEE - 802.11p 主要应用于车与车(V2V)、车与基础设施(V2I)之间的通信,旨在提供低延迟、高可靠性的短距离无线通信服务。例如,车辆通过 IEEE - 802.11p 可以实时交换速度、位置、行驶方向等信息,实现自适应巡航控制、碰撞预警等安全相关应用。
(二)IEEE - 802.11p 的物理层特性
该标准基于正交频分复用(OFDM)技术,将高速数据流分解为多个并行的低速子数据流,通过多个正交子载波进行传输。这种技术对信道的频率选择性衰落具有较强的抵抗能力,但同时也对信道估计的准确性提出了较高要求。IEEE - 802.11p 使用 5.9GHz 频段,数据传输速率可达 6 - 27Mbps,其物理层帧结构包含前导码(Preamble)和数据部分,前导码用于同步和信道估计。
三、传统信道估计方法及其局限性
(一)基于导频的信道估计方法
原理:在发送端插入已知的导频信号,接收端通过检测导频信号来估计信道响应。常见的基于导频的信道估计方法包括最小二乘法(LS)和最小均方误差法(MMSE)。LS 方法通过简单的数学运算,直接利用导频处的接收信号与发送导频信号的关系来估计信道,计算复杂度较低。MMSE 方法则考虑了信道的统计特性,通过最小化估计误差的均方值来获得更准确的信道估计,但计算复杂度较高。
局限性:在车载通信环境中,信道具有高度的时变性和多径衰落特性。基于导频的方法依赖于导频的密度和分布,当信道变化较快时,导频无法及时跟踪信道变化,导致估计误差增大。此外,过多的导频会占用宝贵的带宽资源,降低系统的数据传输效率。
(二)基于模型的信道估计方法
原理:通过建立信道的数学模型,如基于多径传播的物理模型,利用信号处理技术对信道进行估计。例如,基于卡尔曼滤波的信道估计方法,利用信道的状态空间模型,结合接收信号进行递归估计,能够较好地跟踪信道的时变特性。
局限性:实际的车载信道非常复杂,准确建立信道模型较为困难。而且,基于模型的方法通常对模型的准确性要求较高,一旦模型与实际信道不匹配,估计性能会显著下降。
四、深度学习在 IEEE - 802.11p 信道估计中的应用
(一)深度学习模型选择
卷积神经网络(CNN):CNN 在处理具有空间结构的数据方面表现出色。在 IEEE - 802.11p 信道估计中,可以将接收信号的时域或频域数据看作具有一定结构的图像数据。CNN 通过卷积层、池化层和全连接层等组件,自动提取信号中的特征,从而实现对信道的估计。例如,使用二维 CNN 对 OFDM 符号的时频域数据进行处理,能够有效捕捉信道的频率选择性和时间相关性。
循环神经网络(RNN)及其变体(LSTM、GRU):考虑到信道的时变特性,RNN 及其变体能够处理序列数据,记忆先前时刻的信息,适合用于跟踪信道随时间的变化。长短期记忆网络(LSTM)和门控循环单元(GRU)解决了传统 RNN 中的梯度消失和梯度爆炸问题,能够更好地处理长时间序列数据。在 IEEE - 802.11p 信道估计中,可以将连续的 OFDM 符号作为时间序列输入到 LSTM 或 GRU 网络中,学习信道的动态变化规律。
(二)基于深度学习的信道估计流程
数据预处理:收集 IEEE - 802.11p 系统的接收信号数据,包括导频信号和数据信号。对数据进行归一化处理,将其映射到特定的数值范围,如 [0, 1] 或 [-1, 1],以加快模型的收敛速度。同时,根据所选择的深度学习模型,将数据整理成合适的格式,例如对于 CNN,将信号数据转换为二维矩阵形式;对于 RNN 及其变体,将信号数据按时间序列排列。
模型训练:使用预处理后的数据对选定的深度学习模型进行训练。定义损失函数来衡量模型估计值与真实信道值之间的差异,常见的损失函数有均方误差(MSE)、平均绝对误差(MAE)等。通过反向传播算法调整模型的参数,使损失函数最小化。在训练过程中,通常采用随机梯度下降(SGD)及其变体(如 Adagrad、Adadelta、Adam 等)作为优化器,以提高训练效率和收敛速度。
信道估计:训练完成后,将新的接收信号数据输入到训练好的模型中,模型输出即为对信道的估计结果。根据估计的信道信息,可以对接收的数据信号进行均衡和解调,以恢复原始发送数据。
⛳️ 运行结果
📣 部分代码
scheme = 'STA';testing_samples = 20;if(isequal(modu,'QPSK'))nBitPerSym = 2;elseif (isequal(modu,'16QAM'))nBitPerSym = 4;elseif (isequal(modu,'64QAM'))nBitPerSym = 6;endM = 2 ^ nBitPerSym; % QAM Modulation OrderPow = mean(abs(qammod(0:(M-1),M)).^2); % Normalization factor for QAMload(['./',mobility,'_',ChType,'_',modu,'_simulation_parameters']);EbN0dB = (0:5:40)';nSym = 50;constlen = 7;trellis = poly2trellis(constlen,[171 133]);tbl = 34;scramInit = 93;nDSC = 48;nUSC = 52;dpositions = [1:6, 8:20, 22:31, 33:45, 47:52].';Interleaver_Rows = 16;Interleaver_Columns = (nBitPerSym * nDSC * nSym) / Interleaver_Rows;N_SNR = size(EbN0dB,1);Phf = zeros(N_SNR,1);Err_scheme_DNN = zeros(N_SNR,1);Ber_scheme_DNN = zeros(N_SNR,1);for n_snr = 1:N_SNR% Loading Simulation Parameters Resultsload(['./',mobility,'_',ChType,'_',modu,'_testing_simulation_',num2str(EbN0dB(n_snr)),'.mat']);% Loading scheme-DNN Resultsload(['./',mobility,'_',ChType,'_',modu,'_',scheme,'_DNN_Results_',num2str(EbN0dB(n_snr)),'.mat']);TestY = eval([scheme,'_DNN_test_y_',num2str(EbN0dB(n_snr))]);TestY = TestY.';TestY = TestY(1:nUSC,:) + 1i*TestY(nUSC+1:2*nUSC,:);TestY = reshape(TestY, nUSC, nSym, testing_samples);scheme_DNN = eval([scheme,'_DNN_corrected_y_',num2str(EbN0dB(n_snr))]);scheme_DNN = scheme_DNN.';scheme_DNN = scheme_DNN(1:nUSC,:) + 1i*scheme_DNN(nUSC+1:2*nUSC,:);scheme_DNN = reshape(scheme_DNN, nUSC, nSym, testing_samples);for u = 1:size(scheme_DNN,3)H_scheme_DNN = scheme_DNN(dpositions,:,u);Phf(n_snr) = Phf(n_snr) + mean(sum(abs(True_Channels_Structure(:,:,u)).^2));Err_scheme_DNN (n_snr) = Err_scheme_DNN (n_snr) + mean(sum(abs(H_scheme_DNN - True_Channels_Structure(dpositions,:,u)).^2));% IEEE 802.11p RxBits_scheme_DNN = de2bi((qamdemod(sqrt(Pow) * (Received_Symbols_FFT_Structure(dpositions ,:,u) ./ H_scheme_DNN),M)));%Bits_AE_DNN = de2bi((qamdemod(sqrt(Pow) * (EqualizedS(:,:,u) ),M)));Ber_scheme_DNN(n_snr) = Ber_scheme_DNN(n_snr) + biterr(wlanScramble(vitdec((matintrlv((deintrlv(Bits_scheme_DNN(:),Random_permutation_Vector)).',Interleaver_Columns,16).'),poly2trellis(7,[171 133]),34,'trunc','hard'),93),TX_Bits_Stream_Structure(:,u));endtoc;