尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

第【120】期--基于有效吞吐量最大化的自适应调制仿真研究--matlab完整代码

第【120】期--基于有效吞吐量最大化的自适应调制仿真研究--matlab完整代码 关注我追更更多通信仿真代码文章目录摘要1 引言2 算法原理2.1 传统吞吐量指标及其缺陷2.2 基于BSC容量的有效吞吐量2.3 自动切换决策准则3 仿真设计与分析3.1 仿真流程3.2 仿真图分析3.3 部分代码4 总结摘要针对传统自适应调制算法依赖预设SNR阈值且在低信噪比下易受高阶调制“虚假增益”干扰的问题给出了一种基于有效吞吐量最大化的自适应调制策略。该策略摒弃固定切换门限以有效吞吐量作为唯一判决依据通过蒙特卡洛仿真自动探测有效信噪比范围并依据实时信道质量在QPSK、16-QAM和64-QAM之间动态选择最优方案。仿真结果表明自适应方案的有效吞吐量曲线严格等于三种固定方案的上包络线验证了决策准则的数学正确性同时误码率曲线表明系统实现了“在保证可靠性的前提下尽可能提升速率”的设计目标。1 引言在无线通信系统中时变的信道环境如瑞利衰落对数据传输的可靠性和速率提出了严峻挑战。自适应调制技术通过根据信道质量动态调整调制编码方案被认为是应对信道衰落的有效手段。传统自适应调制方案通常依赖于预设的信噪比SNR切换阈值。然而实际信道条件复杂多变固定阈值难以保证全局最优性。更为关键的是在评估系统性能时常用的吞吐量指标存在理论缺陷当信道极度恶化导致误码率接近0.5时该指标仍会因高阶调制具有较大的调制阶数而给出虚高的评分从而误导系统选择不合适的调制方式。本文自适应调制方案不预设任何SNR切换点而是利用二进制对称信道BSC容量公式以有效吞吐量作为唯一判决依据实现了调制方式的优化选择。2 算法原理2.1 传统吞吐量指标及其缺陷上述结果意味着链路完全中断时传统吞吐量指标仍会得出64-QAM优于QPSK的错误结论。这种由于高阶调制具有较大 k 值而产生的虚假性能增益将导致自适应算法在低信噪比区域错误地选择高阶调制造成系统性能崩溃。该问题的本质在于k⋅(1−BER) 统计的是接收端符号与发送端符号一致的数量而非接收端从符号中获得的信息量。在随机猜测情况下符号一致完全是偶然事件并未传递任何实际信息。2.2 基于BSC容量的有效吞吐量本文将经过调制、信道传输、解调及硬判决后的整个链路等效为一个二进制对称信道。在该等效模型中输入为发射比特输出为接收端判决比特信道以误码率的概率将比特翻转。得到本文所采用的有效吞吐量定义传统吞吐量与有效吞吐量对比由表可见当 BER0.5 时传统吞吐量 T 仍给出非零值QPSK为164-QAM为3而有效吞吐量Teff严格为零。随着误码率从0.5逐渐降低两种指标的差异逐渐缩小最终在 BER→0 时趋于一致。这说明T eff指标在保留传统吞吐量在高信噪比区域有效性的同时修正了其在低信噪比区域的理论缺陷。2.3 自动切换决策准则3 仿真设计与分析3.1 仿真流程3.2 仿真图分析可以看到自适应方案的误码率曲线说明系统实现了“在保证可靠性的前提下尽可能提升速率”的设计目标。自适应方案的有效吞吐量曲线严格等于三种固定方案曲线的上包络线验证了 argmax 决策准则的数学正确性。两条切换点的横坐标对应于相邻 Teff曲线的交点与背景色块的分界吻合。3.3 部分代码clc;clear;close all;%全自动瑞利衰落信道自适应调制仿真 N1e5;%每试验比特数 numTrials6;%每个SNR点独立试验次数 searchN1.5e4;%粗搜索阶段使用的比特数 lowBER_ref0.45;%QPSK开始工作的BER参考值接近随机猜测基线0.5 highBER_ref1e-4;%64-QAM接近无误码的BER参考值 maxSearchSteps25;%粗搜索循环的安全上限 k_QPSK2;k_16QAM4;k_64QAM6;%%%步骤1自动探测有效SNR范围%fprintf(正在搜索SNR范围低端QPSK开始工作...\n);lowSNR0;step5;fori1:maxSearchSteps testBitsrandi([01],searchN,1);bsimulateQAM(testBits,1,lowSNR);%QPSKifblowBER_refbreak;end lowSNRlowSNR-step;end lowSNRlowSNR-step;%多退一步确保能看到尚未工作的边缘fprintf(正在搜索SNR范围高端64-QAM接近无误码...\n);highSNR0;fori1:maxSearchSteps testBitsrandi([01],searchN*2,1);bsimulateQAM(testBits,3,highSNR);%64-QAMifbhighBER_refbreak;end highSNRhighSNRstep;end highSNRhighSNRstep;%多进一步确保能看到完全饱和的边缘%自动设置网格分辨率无论范围多大保证约35~45个点 rangehighSNR-lowSNR;gridStepmax(1,round(range/40));SNR_dBlowSNR:gridStep:highSNR;fprintf(自动探测到的SNR范围%d dB 至%d dB步长%d dB共%d 个点\n\n,...lowSNR,highSNR,gridStep,length(SNR_dB));%%%步骤2在自动生成的范围内仿真所有三种调制方案%BER_QPSKzeros(size(SNR_dB));BER_16QAMzeros(size(SNR_dB));BER_64QAMzeros(size(SNR_dB));fors1:length(SNR_dB)SNRSNR_dB(s);berQzeros(numTrials,1);ber16zeros(numTrials,1);ber64zeros(numTrials,1);fort1:numTrials txBitsrandi([01],N,1);berQ(t)simulateQAM(txBits(1:floor(N/2)*2),1,SNR);ber16(t)simulateQAM(txBits(1:floor(N/4)*4),2,SNR);ber64(t)simulateQAM(txBits(1:floor(N/6)*6),3,SNR);endBER_QPSK(s)mean(berQ);BER_16QAM(s)mean(ber16);BER_64QAM(s)mean(ber64);end%%%步骤3基于容量的频谱效率真正的决策指标%SE_QPSKk_QPSK*(1-binaryEntropy(BER_QPSK));SE_16QAMk_16QAM*(1-binaryEntropy(BER_16QAM));SE_64QAMk_64QAM*(1-binaryEntropy(BER_64QAM));%%%步骤4全自动方案选择逐点取SE最大的方案%SE_all[SE_QPSK;SE_16QAM;SE_64QAM];%3xlength(SNR_dB)[SE_Adaptive,selIdx]max(SE_all,[],1);%selIdx:1QPSK,216QAM,364QAM modNames[QPSK,16-QAM,64-QAM];BER_Adaptivezeros(size(SNR_dB));fors1:length(SNR_dB)switchselIdx(s)case1,BER_Adaptive(s)BER_QPSK(s);case2,BER_Adaptive(s)BER_16QAM(s);case3,BER_Adaptive(s)BER_64QAM(s);endfprintf(SNR %3d dB | 自动选择方案 %-7s | 有效吞吐量 %.2f bits/s/Hz\n,...SNR_dB(s),modNames(selIdx(s)),SE_Adaptive(s));end%%%步骤5检测切换点SNR仅用于报告和绘图着色——%选择本身已在步骤4中由真实数据完成%threshold1findCrossoverSNR(SNR_dB,SE_QPSK,SE_16QAM);%QPSK-16-QAM threshold2findCrossoverSNR(SNR_dB,SE_16QAM,SE_64QAM);%16-QAM-64-QAMfprintf(\n);fprintf(\n);fprintf( 自动探测到的切换点\n);fprintf(\n);ifisnan(threshold1)fprintf( 在整个探测到的SNR范围内QPSK始终为最优方案。\n);elsefprintf( 低于%.1fdB QPSK 为更优方案\n,threshold1);endif~isnan(threshold1)isnan(threshold2)fprintf( 从%.1fdB 及以上 16-QAM 为更优方案\n,threshold1);elseif~isnan(threshold1)~isnan(threshold2)fprintf(%.1fdB 至%.1fdB 16-QAM 为更优方案\n,threshold1,threshold2);fprintf( 高于%.1fdB 64-QAM 为更优方案\n,threshold2);endfprintf(\n\n);%%%绘图在一个图窗中绘制两个子图 —— 误码率曲线吞吐量曲线%figure(Position,[100,100,1100,450]);%设置图窗大小左右排列%--------------------子图1误码率曲线--------------------subplot(1,2,1);hold on;yminmin([BER_QPSK,BER_16QAM,BER_64QAM])*0.3;ymax1;semilogy(SNR_dB,BER_QPSK,y-o,LineWidth,2);semilogy(SNR_dB,BER_16QAM,b-s,LineWidth,2);semilogy(SNR_dB,BER_64QAM,g-d,LineWidth,2);semilogy(SNR_dB,BER_Adaptive,r-*,LineWidth,2.5);set(gca,YScale,log);ylim([ymin ymax]);grid on;xlabel(信噪比 (dB));ylabel(误码率 (BER));title((a) 误码率性能);legend(QPSK,16-QAM,64-QAM,自适应调制,Location,southwest);%--------------------子图2吞吐量曲线--------------------subplot(1,2,2);hold on;semaxmax(SE_64QAM)*1.1;%按自动选择的方案着色shadeBySelection(SNR_dB,selIdx,0,semax,...{[0.200.550.85],[0.900.550.15],[0.850.750.15]});plot(SNR_dB,SE_QPSK,y-o,LineWidth,2);plot(SNR_dB,SE_16QAM,b-s,LineWidth,2);plot(SNR_dB,SE_64QAM,g-d,LineWidth,2);plot(SNR_dB,SE_Adaptive,r-*,LineWidth,2.5);ylim([0semax]);grid on;xlabel(信噪比 (dB));ylabel(吞吐量 (bits/s/Hz)基于BSC容量);title((b) 有效吞吐量性能);legend(QPSK区域,16-QAM区域,64-QAM区域,...QPSK,16-QAM,64-QAM,自适应调制,Location,northwest);4 总结本文针对传统自适应调制依赖预设SNR阈值、低信噪比下易受高阶调制“虚假增益”干扰的问题给出了一种基于有效吞吐量最大化的自适应调制策略。该策略摒弃固定切换门限以有效吞吐量作为唯一判决依据通过蒙特卡洛仿真自动探测有效信噪比范围并依据实时信道质量在QPSK、16-QAM和64-QAM之间动态选择最优方案。仿真结果表明自适应方案的有效吞吐量曲线严格等于三种固定方案的上包络线验证了决策准则的数学正确性同时误码率曲线表明系统实现了“在保证可靠性的前提下尽可能提升速率”的设计目标。完整仿真代码可见往期文章文末VX公众号包含往期博客所有代码所见即所得
返回列表