基于LTE的通信链路matlab仿真,上行为SC-FDMA和下行为OFDMA最近在折腾LTE系统仿真发现上下行链路设计真有意思。手机发数据用SC-FDMA单载波频分多址基站下传用OFDMA正交频分多址这俩兄弟看着像但脾气完全不同。今天咱们用Matlab撸个简易版链路仿真边写代码边聊门道。先看手机上行发射流程。SC-FDMA核心操作是DFT预编码目的就是降低峰均比PAPR。毕竟手机电池有限信号功率波动太大会哭晕在厕所。上代码% SC-FDMA发射端 dataBits randi([0 1], 1024, 1); % 生成随机比特 qamSymbols qammod(dataBits, 16, InputType, bit); % 16QAM调制 dftOut fft(qamSymbols); % 做DFT预编码 subcarrierMapping [zeros(100,1); dftOut; zeros(924,1)]; % 中间放有效数据 ifftOut ifft(subcarrierMapping); % 变时域信号 txSignal ifftOut(end-144:end); % 加循环前缀(CP)这段代码有个骚操作——把DFT后的数据塞到总带宽中间位置。这样做相当于给信号套了个防护带防止相邻频段干扰。注意看ifft前的子载波映射前后补零就像给数据块加了缓冲垫。再看看基站下行怎么玩OFDMA% OFDMA发射端 userData qammod(randi([0 15], 1200, 1), 16); % 多个用户数据复用 parallelData reshape(userData, 1024, []); % 串并转换 subcarriers ifft(parallelData); % 直接做IFFT cpLength round(0.07*1024); % 循环前缀长度7% txSymbol [subcarriers(end-cpLength1:end,:); subcarriers]; % 加CP对比上下行代码发现没SC-FDMA多了一步DFT预处理。正是这个步骤让手机信号包络更平稳。画个星座图看看区别scatterplot(txSignal(1:100:end)); % SC-FDMA时域信号 title(SC-FDMA时域包络); scatterplot(subcarriers(:)); % OFDMA时域信号 title(OFDMA时域包络);跑完仿真你会发现SC-FDMA的星座点聚成一团而OFDMA的像烟花般散开——这就是低PAPR的直观体现。不过天下没有免费午餐SC-FDMA的复杂度更高毕竟要多做一次FFT运算。基于LTE的通信链路matlab仿真,上行为SC-FDMA和下行为OFDMA信道建模咱们简单来个多径channel [0.8, 0, 0, 0.2]; % 两径信道 rxSC conv(txSignal, channel); % 上行信号过信道 rxOFDM conv(txSymbol(:), channel); % 下行信号过信道接收端处理更有意思。SC-FDMA需要先去掉CP再做FFT% SC-FDMA接收端 rxWithoutCP rxSC(145:end); % 去CP fftRx fft(rxWithoutCP); equalized fftRx ./ fft(channel, 1024).; % 频域均衡 dataRecovered qamdemod(ifft(equalized(101:1124)), 16); % IDFT解码而OFDMA接收则是经典流程% OFDMA接收端 rxOFDM reshape(rxOFDM(73:end), 1100, []); fftRx fft(rxOFDM(1:1024,:)); equalized fftRx ./ fft(channel,1024); dataRecovered qamdemod(equalized(:), 16);重点注意均衡环节。SC-FDMA在频域均衡后要做IDFT还原信号这步相当于把预处理时的DFT抵消掉。而OFDMA直接在各子载波上处理这也是两者系统架构的根本差异。最后放个彩蛋——用误码率验证仿真是否靠谱scBer sum(dataBits ~ dataRecovered)/1024 ofdmBer sum(userData ~ dataRecovered)/1200跑完发现SC-FDMA误码率略高于OFDMA别慌这符合理论预期——单载波系统对频偏更敏感。实际系统中会有更复杂的同步算法咱们的简易版就当抛砖引玉了。折腾完这波仿真终于明白为啥LTE要搞双工模式切换。上行要省电就牺牲点性能下行拼速度就使劲堆带宽这产品思维真是把用户心理拿捏得死死的。