Rayleigh信道下4-FSK与4-QAM误码率对比仿真与工程选型分析
2026/9/13 18:41:38 网站建设 项目流程

简介:在无线通信系统中,调制方式的选择直接影响传输可靠性与频谱效率。这份资源针对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 是正交信号集,M=4,每个符号携带 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/N0,4-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 相干(理想 CSI)0.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-QAM

3.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 = [1+1j, -1+1j, -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;

代码里有几个参数值得说明。Ns=64只是把 FSK 符号在离散时间上采样,只要频率间隔是1/Ts的整数倍,Ns 的大小不影响误码率结果,只影响仿真时长;取 64 是为了让频点落在 FFT 栅格附近、相关计算更干净。numSym=2e5决定了统计精度,蒙特卡洛误差大致与误码率的平方根同量级,想看到 1e-4 以下的点必须把符号数加到位。N0的计算把k=2放在分母上,这是每比特信噪比和每符号噪声功率之间的正确桥接。

如果要在 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-2
20约 7e-3约 2.5e-3
30约 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/(1+EbN0),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、其余元素接近 0,FSK 的正交性才算真正成立,仿真结果才有讨论价值。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询