Rayleigh信道下4-FSK与4-QAM误码率对比仿真与工程选型分析
简介在无线通信系统中调制方式的选择直接影响传输可靠性与频谱效率。这份资源针对4-FSK与4-QAM两种调制方式在Rayleigh衰落信道下的性能比较需求提供一套可直接运行的MATLAB仿真脚本面向通信工程专业学生、课程设计者以及需要评估链路性能的工程师。脚本通过统计不同信噪比下的误符号率SER与误比特率BER绘制性能曲线直观揭示衰落环境中4-FSK抗噪声、抗深衰落更稳定而4-QAM在信道质量良好时可获得更高数据速率的特点可辅助读者在不同信道条件下合理选择调制方案。压缩包整体仅1012B包含1个m文件体积紧凑、参数清晰便于二次修改与复用。已有458人学习使用适合用于验证教材理论、支撑毕业设计实验也可作为通信系统性能优化与选型判断的基础工具。1. 4-FSK 与 4-QAM 在 Rayleigh 信道下的性能对比到底在比什么拿到Rayleigh.rar_4-FSK_4-QAM和4-FSK_FSK 性能_fsk rayleigh_rayleigh FSK这类压缩包第一反应通常是里面有一组能在 Rayleigh 衰落信道下跑 4-FSK 误码率的仿真代码顺手把 4-FSK 和 4-QAM 的曲线画在同一张图上。这个对比本身就值一篇技术笔记。4-QAM 带宽效率高星座点只有四个接收端却必须知道信道相位否则星座整体旋转后判决全错4-FSK 靠频率区分符号可以用非相干包络检测接收机不需要载波相位同步代价是占用带宽成倍增加。两者在 AWGN 下的差距大家都熟但换到没有直视径的 Rayleigh 信道里曲线斜率、所需信噪比、对信道估计的依赖都会变。下面把这套对比拆成信道模型、理论误码率、MATLAB 蒙特卡洛实现、结果判读和验证技巧五个部分适合通信方向学生、做无线自组网或 Sub-GHz 链路调试的工程师照着复现也适合想快速看懂这类仿真包在跑什么的人。2. Rayleigh 衰落信道模型与 4-FSK、4-QAM 的理论误码率2.1 Rayleigh 信道的复基带表示与符号级衰落Rayleigh 衰落描述的是没有直视径、只有大量反射径叠加的场景室内走廊、城市峡谷、仓库这类环境都很典型。接收信号写成复基带形式是y h*x n其中 x 是能量归一化的发射符号n 是复高斯噪声h 是均值为 0 的循环对称复高斯随机变量包络|h|服从 Rayleigh 分布相位在[0, 2π)均匀分布。仿真里一般把 h 的功率归一化到 1这样信道的平均增益是 0 dB曲线上的信噪比才能直接用。生成方式是h (randn 1j*randn) / sqrt(2); % E[|h|^2] 1功率归一化不是可有可无的细节。如果不做1/sqrt(2)这一项E[|h|^2]就是 2相当于给所有信噪比点人为加了 3 dB 增益对比两种调制时会把差距看偏。信道模型上还要区分快衰落和块衰落符号级独立衰落是每个符号重新采一个 h适合做无记忆信道的蒙特卡洛统计块衰落是一帧内 h 不变、帧间独立更接近慢速移动的窄带系统。做 4-FSK 与 4-QAM 的基准对比时符号级独立衰落最简单统计效率也最高。2.2 4-FSK 与 4-QAM 的调制结构对比4-FSK 是正交信号集M4每个符号携带 2 bit。4 个符号对应 4 个不同的载波频率频率间隔必须满足正交条件。复基带上用离散时间实现时基函数写成fskBase exp(1j*2*pi*(0:M-1)*t); % t 是归一化时间取 0 到 1 的 Ns 个点只要频率间隔取符号周期倒数1/Ts的整数倍任意两个符号在一个符号周期内的内积为零。这个正交性是非相干检测能工作的前提也是仿真里最容易埋坑的地方频率间隔设小了相关峰值互相串扰误码率会明显抬高而且问题不会随信噪比变好因为串扰是确定性的。4-FSK 的带宽随 M 线性增长这是它最大的代价4 个频点加上保护间隔带宽利用率远低于 QAM 系列。4-QAM 在这个语境下通常指 QPSK星座点是±1±j归一化后平均功率为 1。它把 2 bit 拆到 I、Q 两路带宽效率是 4-FSK 的好几倍。代价是信息全在相位上Rayleigh 信道随机的相位旋转会把整个星座转掉一个角度所以必须做信道估计、均衡或差分检测。而 4-FSK 的频率差异不受乘性相位影响非相干接收时连信道相位都不需要知道这是工程上选它的核心理由。2.3 理论误码率公式与瑞利平均后的差异AWGN 信道下非相干 4-FSK 的误符号率有闭合级数这里直接给常用主项近似并把两种调制放在一起对照。设 γb 为平均每比特信噪比Eb/N04-FSK 非相干在格雷映射下的误比特率主项约为0.75*exp(-γb)4-QAM 相干检测在格雷映射下约为0.5*erfc(sqrt(γb))。把 AWGN 的条件误码率对 Rayleigh 衰落分布做平均指数项变成一个有理分式这是理解仿真曲线形状的关键相干 BPSK/QPSK 在 Rayleigh 下渐近为1/(4γb)非相干 4-FSK 渐近为0.75/(1γb)两者都随信噪比线性下降但分子差距约有 4.8 dB。换句话说理想信道估计下 4-QAM 在 Rayleigh 信道里反而比非相干 4-FSK 好约 5 dB和 AWGN 下的结论方向一致只是优势被衰落压缩了一些。调制/检测方式AWGN 误比特率主项近似Rayleigh 平均误比特率高信噪比主项是否需要信道相位4-FSK 非相干0.75*exp(-γb)0.75/(1γb)不需要4-QAM 相干理想 CSI0.5*erfc(sqrt(γb))1/(4γb)需要非相干 2FSK 在 Rayleigh 下有一个更精确的标尺公式Pb 1/(2γb)常被用来校验仿真链路4-FSK 因为每符号携带 2 bit比 2FSK 有明显增益所以上表中的0.75/(1γb)可以当作 4-FSK 的调试标尺。需要强调的是4-QAM 那列写的是理想信道状态信息下的性能如果换成差分检测或带估计误差的相干检测曲线会右移甚至在高信噪比出现错误平层。3. 用 Monte Carlo 仿真实现 Rayleigh 信道下的 4-FSK 与 4-QAM3.1 仿真参数约定Es、Eb/N0、噪声功率与瑞利系数蒙特卡洛仿真的第一步是把信噪比口径统一。这里约定每符号能量Es 1两种调制都是每符号 2 bit所以Es/N0 k * Eb/N0其中k log2(M) 2。信噪比扫描用每比特信噪比Eb/N0换算噪声功率时用N0 1 / (k * 10^(EbN0_dB/10)); % Es 1符号信噪比 k * EbN0很多初版代码直接把 N0 写成1 / 10^(EbN0_dB/10)等于把每符号信噪比当成了每比特信噪比曲线整体左移 3 dB。这个错误在单条曲线上不容易发现一旦拿 4-FSK 和 4-QAM 对比会把两者的相对差距看反。复基带的复高斯噪声每维I 路或 Q 路方差是N0/2两个维度合并起来总功率才是 N0所以生成噪声时要用sqrt(N0/2)*(randn 1j*randn)不要只乘sqrt(N0)。瑞利系数每个符号独立重新采样h (randn 1j*randn)/sqrt(2)。仿真开始前固定随机种子例如rng(2024)保证结果可复现。符号数numSym建议不小于 2e5这样误码率落到 1e-4 量级时仍有约 20 个错误比特曲线不会剧烈抖动。如果机器跑得动4e5 到 1e6 的统计稳定性会更好代价是低信噪比点的仿真时间变长。3.2 MATLAB 快速实现4-FSK 非相干接收与 4-QAM 相干接收%% Rayleigh 信道下 4-FSK 与 4-QAM 误码率对比MATLAB rng(2024); % 固定随机种子 M 4; % 调制阶数 k log2(M); % 每符号比特数 2 EbN0_dB 0:2:24; % 每比特信噪比扫描范围 numSym 2e5; % 每个信噪比点的符号数 Ns 64; % 每个 FSK 符号的采样点数 t (0:Ns-1) / Ns; % 归一化时间 fskBase exp(1j*2*pi*(0:M-1)*t); % 4-FSK 正交基频偏 1/Ts qamMap [11j, -11j, -1-1j, 1-1j] / sqrt(2); % 4-QAM 星座平均功率 1 BER_F zeros(size(EbN0_dB)); BER_Q zeros(size(EbN0_dB)); for ii 1:length(EbN0_dB) EbN0 10^(EbN0_dB(ii)/10); % 线性值 N0 1 / (k * EbN0); % Es 1符号信噪比 k * EbN0 errF 0; errQ 0; % 累计错误比特数 for n 1:numSym bits randi([0 1], k, 1); % 生成 2 bit idx bi2de(bits) 1; % 符号索引 1..4 % ---- 4-FSK 发射、衰落、加噪 ---- xF fskBase(idx,:); % 1 x Ns 符号波形 h (randn 1j*randn) / sqrt(2); % Rayleigh 衰落系数 yF h*xF sqrt(N0/2)*(randn(1,Ns)1j*randn(1,Ns)); % ---- 非相干检测取相关包络最大值 ---- rF abs(yF * fskBase); % 与 4 个基函数的相关值 [~, estF] max(rF); % ---- 4-QAM 发射、衰落、加噪 ---- xQ qamMap(idx); % 星座点 yQ h*xQ sqrt(N0/2)*(randn 1j*randn); % ---- 相干检测理想信道均衡后最小欧氏距离 ---- zQ yQ / h; [~, estQ] min(abs(zQ - qamMap)); errF errF sum(bits ~ de2bi(estF-1, k)); errQ errQ sum(bits ~ de2bi(estQ-1, k)); end BER_F(ii) errF / (numSym * k); BER_Q(ii) errQ / (numSym * k); end semilogy(EbN0_dB, BER_F, o-, EbN0_dB, BER_Q, s-); xlabel(E_b/N_0 (dB)); ylabel(BER); legend(4-FSK 非相干,4-QAM 相干理想CSI); grid on;代码里有几个参数值得说明。Ns64只是把 FSK 符号在离散时间上采样只要频率间隔是1/Ts的整数倍Ns 的大小不影响误码率结果只影响仿真时长取 64 是为了让频点落在 FFT 栅格附近、相关计算更干净。numSym2e5决定了统计精度蒙特卡洛误差大致与误码率的平方根同量级想看到 1e-4 以下的点必须把符号数加到位。N0的计算把k2放在分母上这是每比特信噪比和每符号噪声功率之间的正确桥接。如果要在 Python 里复现逻辑完全一致用 numpy 的randn生成复高斯变量argmax做相关判决argmin做距离判决FSK 基函数写成exp(1j*2*pi*np.arange(M)[:,None]*t)即可。差别只在语法不在算法。3.3 代码里的统计口径为什么用比特 Hamming 距离而不是符号错误统计错误时代码里用的是sum(bits ~ de2bi(estF-1, k))也就是解调出的符号索引与发送符号索引之间逐位比较累计 Hamming 距离。直接比较estF ~ idx统计的是误符号率两者在同一份代码里能差出接近 k 倍的关系拿去和文献里的 BER 曲线比对就会对不上。4-FSK 和 4-QAM 的符号在本例中没有做严格格雷映射星座顺序与自然二进制索引的相邻符号差异为 1 或 2 bit。用 Hamming 距离逐位统计可以公平地反映两种调制在相同比特流下的真实误比特率也避免误符号率换算带来的近似误差。如果想更贴近工程可以自己按格雷码重排星座顺序重排后误符号率到误比特率的换算会更接近Ps/k但这不会改变两种调制相对位置的结论。4. 从误码率曲线看 FSK 与 QAM 的性能边界及参数调整4.1 仿真结果会看到的三个区段把上面的代码跑完两条曲线在 Rayleigh 信道下不是简单平移而是在不同信噪比区间表现出不同的相对关系。低信噪比区Eb/N0 小于 6 dB两条曲线贴得很近此时噪声功率远大于信号功率星座距离和正交性的差异都被淹没曲线斜率主要来自 Rayleigh 衰落的概率密度尾巴。中高信噪比区10~20 dB曲线逐渐拉开4-QAM 相干检测比 4-FSK 非相干大约好 3~5 dB这个差距来自相干检测充分利用了信道相位信息而 FSK 非相干的主项在瑞利平均后保留了更大的分子。超过 20 dB 后两条曲线都以约 10 dB/十倍频的代数斜率下降也就是在对数坐标下接近 -1 斜率这正是无分集 Rayleigh 信道的典型特征。Eb/N0 (dB)4-FSK 非相干量级参考4-QAM 相干理想 CSI量级参考10约 7e-2约 2.5e-220约 7e-3约 2.5e-330约 7e-4约 2.5e-4这个表只是渐近主项的量级标尺实际数值依赖映射方式、符号数和随机种子但相对关系很稳定无分集时两种调制的渐进斜率相同4-QAM 领先约 5 dB。真正拉开差距的是分集增益、信道估计误差和带宽约束这三者才是选型时的主要考量。4.2 分集、调制阶数与信噪比之间的取舍无分集的 Rayleigh 信道里误码率只随信噪比线性下降想把误码率从 1e-2 压到 1e-4需要增加约 20 dB 功率这在链路预算里往往不可接受。常见做法是加二重或四重分集4-QAM 配合最大比合并分集阶数 N 让曲线斜率变为 -N改善非常明显4-FSK 则用平方律合并对非相干接收来说实现更容易不需要估计每条支路的相位只需要对各支路包络平方求和。分集支路数相同时4-QAM 的优势会随 N 增大变得更明显因为相干合并能充分利用每一路的幅度和相位信息。反过来如果系统里没有导频或频偏补偿条件差4-QAM 的相干检测优势会被信道估计误差吃掉此时 4-FSK 的非相干方案反而更稳。调制阶数继续往上走8-FSK 与 16-QAM 的对比规律类似但 FSK 带宽随 M 线性增长通常只用在带宽充裕的窄带速率链路里。4.3 回到工程LoRa 与 FSK 混合、ROS 小车控制中的 FSK 链路FSK 在 Rayleigh 信道下的这些特性直接映射到两个常见工程场景。第一是 LoRa 与 FSK 混合技术许多 Sub-GHz 物联网模组在 LoRa 调制之外保留 FSK 模式LoRa 负责超远距离低速率上行FSK 模式做本地高速下发或固件升级切换时共用射频前端和天线匹配。FSK 的恒包络特性让发射机功放可以工作在饱和区附近发射效率高这对电池供电的节点很关键。第二是 FSK 协议的 ROS 小车控制设计。遥控、底盘遥测这类低速率链路大量使用 2FSK/4FSK原因很实际小车电机和 PWM 带来的宽带干扰大非相干 FSK 接收机不需要载波相位同步抗频偏能力强且误码率性能与信道估计误差无关。这类系统一般把Eb/N0设计在 15~20 dB留出 8~10 dB 的衰落裕量与上面表格里 4-FSK 在此区间的误码率量级刚好对得上。若同样的链路用 4-QAM接收端必须先解决相位同步硬件成本和调试复杂度都会上升。5. 让 4-FSK / 4-QAM 瑞利仿真结果可信的 5 个验证技巧5.1 先用 AWGN 信道校验两套调制链把 Rayleigh 衰落系数固定为h 1跑同一份代码得到的就是 AWGN 下的误码率曲线。4-FSK 非相干应该贴合0.75*exp(-EbN0)的量级4-QAM 相干应该贴合0.5*erfc(sqrt(EbN0))。只要 AWGN 阶段对得上说明调制、解调、信噪比换算三部分都没问题再松开 h 进入 Rayleigh后续结果才值得信任。这一步最常见的坑是 numSym 不足。10 dB 以下误码率较高2e5 符号足够但想看 1e-4 以下的点如果错误比特数少于 20曲线会抖成锯齿状。增加 numSym 是唯一解法也可以在低信噪比和高信噪比分段设置不同的符号数节省总仿真时间。记住一个经验值误码率的相对标准差约等于1/sqrt(N_err)N_err 是累计错误比特数低于 20 时曲线基本不可读。5.2 用半解析法验证瑞利段的渐进斜率蒙特卡洛在低误码率区非常费时可以用半解析法做交叉验证。原理是对 AWGN 误码率公式在 Rayleigh 分布上做数值平均例如 4-FSK 非相干主项经过平均后近似为0.75/(1EbN0)4-QAM 相干近似为1/(4*EbN0)。这两个式子虽然粗糙但足够用来验证仿真曲线在高信噪比区间的斜率是否为 -1、绝对位置是否在合理范围内。EbN0 10^(20/10); % 20 dB 线性值 Pb_fsk_analytic 0.75 / (1 EbN0); % 4-FSK 非相干渐近主项 Pb_qam_analytic 1 / (4 * EbN0); % 4-QAM 相干渐近主项运行后和蒙特卡洛读数对比误差在 10%~20% 以内就算正常因为主项近似本身就有偏差。另一个常用技巧是固定信道实现、只换噪声重复多次取平均能减小衰落带来的方差但要注意这时的置信区间不等于多次独立信道仿真的置信区间。最后检查一遍fskBase * fskBase的相关矩阵对角线为 1、其余元素接近 0FSK 的正交性才算真正成立仿真结果才有讨论价值。本文还有配套的精品资源点击获取