▲基于OFDM+QPSK的完整通信链路matlab性能仿真,包含LDPC,频偏估计和信道估计
目录
✅1.本系统整体构架
整个程序,我们采用如下的流程图实现:

一个完整可运行的端到端OFDM链路仿真。链路包含:LDPC编码→QPSK调制→OFDM映射(前导 + 梳状导频)→多径信道+载波频偏(CFO)+AWGN→CFO估计补偿→信道估计/均衡→软解调 LLR→LDPC译码,并输出误码率曲线、星座图、信道频响等。
✨2.各个模块基本原理
2.1 OFDM
OFDM将高速串行数据分配到N个相互正交的子载波上并行传输,把频率选择性信道转化为多个并行的平坦衰落子信道。
调制(IFFT):频域符号Xk经IDFT得到时域信号

代码中用sqrt(NFFT)*ifft(...)实现酉变换,使时域、频域噪声功率一致,便于LLR计算。
循环前缀(CP):将符号末尾Lcp个样点复制到开头。只要Lcp≥信道时延扩展,线性卷积等效为循环卷积,从而在频域有:

即每个子载波只需一阶(单抽头)均衡,这是OFDM对抗多径的核心优势。
这个部分MATLAB程序如下:
% OFDM 调制: 酉变换 IFFT + 加 CP
txTime = sqrt(NFFT) * ifft(gridF, NFFT); % NFFT x totalSym
txCP = [txTime(end-CPlen+1:end, :); txTime];% 加循环前缀
txSig = txCP(:);
2.2 QPSK调制
每2bit映射为一个复符号(Gray映射),s=1/sqrt(2)*((1−2b0)+j(1−2b1)),能量归一Es=1。I/Q两路独立,等价两路BPSK,AWGN下误比特率
![]()
这个部分MATLAB程序如下:
% QPSK 调制 (Gray 映射): b0->实部符号, b1->虚部符号
b0 = codeBits(1:2:end);
b1 = codeBits(2:2:end);
txSym = ((1-2*b0) + 1j*(1-2*b1))/sqrt(2); % 32400 个符号, Es=1
2.3 导频与信道估计

这个部分MATLAB程序如下:
% ---- 信道估计(前导 LS) ----
Hhat = ones(NFFT, 1);
Hhat(activeBins)= Y(activeBins, 1) ./ preSym; % LS 估计
2.4 均衡
频域接收Yk=Hk*Xk+Wk。

这个部分MATLAB程序如下:
% ---- 信道估计(前导 LS) ----
Hhat = ones(NFFT, 1);
Hhat(activeBins)= Y(activeBins, 1) ./ preSym; % LS 估计
代码用ZF,并据∣Hk∣^2调节LLR可靠度。
2.5 载波频偏(CFO)补偿
发收振荡器失配导致频偏ε(归一化到子载波间隔),时域呈现旋转相位e^j2πεn/N,破坏子载波正交性引起ICI。 利用CP与符号尾部相同、相隔N个样点这一特性:

这个部分MATLAB程序如下:
% ---- 接收端: CFO 估计与补偿(基于 CP 自相关) ----
rxMtx = reshape(rxSig, NFFT+CPlen, totalSym);
corrSum = 0;
for c = 1:totalSym
r1 = rxMtx(1:CPlen, c); % CP 部分
r2 = rxMtx(NFFT+1:NFFT+CPlen, c); % 体末尾(与 CP 相同)
corrSum = corrSum + sum(conj(r1).*r2); % 相隔 NFFT 的自相关
end
cfoHat = angle(corrSum)/(2*pi); % 分数 CFO 估计
rxSig = rxSig .* exp(-1j*2*pi*cfoHat*n/NFFT);% 频偏补偿
2.6 LDPC编译码
LDPC是一类稀疏校验矩阵H定义的线性分组码,满足Hc^T=0。本例用DVB-S.2(64800, 32400)、码率1/2。
编码:由H推出生成矩阵生成校验位。
译码:基于Tanner图的置信传播/和积算法(BP/SPA),在变量节点与校验节点间迭代传递LLR:

迭代逼近最大似然,性能逼近香农极限。软输入LLR由均衡后符号计算:

这个部分MATLAB程序如下:
msgBits = randi([0 1], K, 1); % 信息比特
codeBits = ldpcEncode(msgBits, cfgEnc); % LDPC 编码 -> 64800
💡3.仿真结果
完整OFDM基带链路分为发送端、无线信道、接收端三大部分。发送端完成原始比特信源生成、信道编码、数字调制、OFDM成帧(前导训练序列+梳状离散导频+数据子载波映射);信道叠加多径频率选择性衰落、整数+小数载波频偏CFO、加性高斯白噪声AWGN;接收端依次执行CFO粗/细估计与时域补偿、基于梳状导频的频域信道插值估计、频域均衡、QPSK软比特LLR对数似然解调、LDPC置信传播软译码,最后统计不同信噪比SNR下系统误码率BER,同步绘制接收端QPSK星座分布图、多径信道频域幅频响应曲线。
仿真参数如下:
%LDPC + QPSK + OFDM(前导/导频) + 多径 + CFO + 信道估计/均衡 + LDPC译码
%系统参数配置
NFFT = 64; % FFT 点数 (子载波总数)
CPlen = 16; % 循环前缀(CP)长度
bitsPerSym= 2; % QPSK: 每符号 2 bit
%802.11a 风格子载波分配(逻辑频点, 0 为直流不使用) ---
dataIdx_log = [-26:-22, -20:-8, -6:-1, 1:6, 8:20, 22:26]; % 48 个数据子载波
pilotIdx_log = [-21 -7 7 21]; % 4 个导频子载波
allIdx_log = sort([dataIdx_log pilotIdx_log]); % 52 个有效子载波
%逻辑频点 -> FFT bin (1-based) ---
log2bin = @(idx) mod(idx, NFFT) + 1;
dataBins = log2bin(dataIdx_log);
pilotBins = log2bin(pilotIdx_log);
activeBins= log2bin(allIdx_log);
nData = numel(dataBins); % 48
nPilot = numel(pilotBins); % 4
nActive = numel(activeBins); % 52
pilotVal = ones(nPilot,1); % 导频符号 (BPSK +1)
%LDPC 编/译码器
H = dvbs2ldpc(1/2); % DVB-S.2 LDPC 校验矩阵, 码率 1/2
cfgEnc = ldpcEncoderConfig(H);
cfgDec = ldpcDecoderConfig(H);
K = cfgEnc.NumInformationBits;% 32400 信息位
Ncode = cfgEnc.BlockLength; % 64800 码字位
R = K / Ncode; % 实际码率 = 1/2
maxIter= 25; % LDPC 最大迭代次数
% 一个码字 -> 32400 QPSK 符号 -> 32400/48 = 675 个 OFDM 数据符号(整除)
numOFDM = Ncode / bitsPerSym / nData; % = 675
assert(mod(Ncode/bitsPerSym, nData)==0, '子载波数与码长需匹配');
%信道与仿真参数
EbN0_dB = 0:1:16; % 仿真 Eb/N0 范围
numFrames = 2500; % 每个 SNR 点仿真帧数(码字数)
cfo = 0.04; % 归一化载波频偏(占子载波间隔比例)
仿真结果如下图所示:



👇4.完整程序下载
完整可运行代码,博主已上传至CSDN,使用版本为matlab2022a/matlab2024b:
(本程序包含程序操作步骤视频)
基于OFDM+QPSK的完整通信链路matlab性能仿真,包含LDPC,频偏估计和信道估计【包括程序,中文注释,程序操作视频】资源-CSDN下载
更多推荐
所有评论(0)