✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
这是一个使用深度学习工具箱中的长短期记忆 (LSTM) 网络在接收端实现符号分类以在 OFDM 系统中进行信号检测的示例。基于 LSTM 的神经网络针对单个子载波进行训练,其中计算符号错误率 (SER) 并将其与最小二乘 (LS) 和最小均方误差 (MMSE) 估计进行比较。在初步调查中,假定无线信道在离线训练和在线部署阶段是固定的。为了测试神经网络的稳健性,对每个传输的 OFDM 数据包应用随机相移。考虑了导频符号的数量和循环前缀(CP)的长度的影响。
⛄ 部分代码
function ReceivedPacket = genTransmissionReceptionOFDM(TransmittedFrame,LengthCP,h,NoiseVar)
% This function is to model the transmission and reception process in OFDM systems.
% Extract parameters
[NumSym,NumSC,NumPacket] = size(TransmittedFrame);
%% Transmitter
PhaseShift = exp(-1j*rand(1,NumPacket)*2*pi);
for p = 1:NumPacket
% 1. IFFT
x1 = ifft(TransmittedFrame(:,:,p),NumSC,2);
% 2. Inserting CP
x1_CP = [x1(:,NumSC-LengthCP+1:end) x1];
% 3. Parallel to serial transformation
x2 = x1_CP.';
x = x2(:);
% 4. Channel filtering
y_conv = conv(h*PhaseShift(p),x);
y(:,p) = y_conv(1:length(x));
end
%% Adding noise
SeqLength = size(y,1);
% Calculate random noise in time domain
NoiseF = sqrt(NoiseVar)/sqrt(2).*(randn(NumPacket,NumSC)+1j*randn(NumPacket,NumSC)); % Frequency-domain noise
NoiseT = sqrt(SeqLength)*sqrt(SeqLength/NumSC)*ifft(NoiseF,SeqLength,2); % Time-domain noise
% Adding noise
y = y+NoiseT.';
%% Receiver
ReceivedPacket = zeros(NumPacket,NumSym,NumSC);
for p = 1:NumPacket
% 1. Serial to parallem transformation
y1 = reshape(y(:,p),NumSC+LengthCP,NumSym).';
% 2. Removing CP
y2 = y1(:,LengthCP+1:LengthCP+NumSC);
% 3. FFT, # x NymSym x 64
ReceivedPacket(p,:,:) = fft(y2,NumSC,2); % NumSym x 64
end
ReceivedPacket = permute(ReceivedPacket,[2,3,1]);
⛄ 运行结果
⛄ 参考文献
[1]丛珊. 基于深度学习的癫痫脑电信号分类方法研究[D]. 哈尔滨工程大学, 2017.
[2]黄亮等. "一种适用于基于长短期记忆网络的无线信号调制分类器可视化方法.", CN111680601A. 2020.