☰
基于MATLAB的MIMO-OFDM仿真:信道估计与BER性能分析
2026/10/3 8:51:15 网站建设 项目流程

简介:面向MIMO-OFDM系统信道估计研究的MATLAB仿真程序,适合通信工程专业学生与算法研究人员用于学习慢变环境下基于训练序列的多天线信道估计方法。程序聚焦多个发射信号叠加场景下的信道辨识问题,通过仿真演示特殊训练序列的设计与估计算法选择,帮助理解为何常规SISO-OFDM或MIMO算法在叠加信号下会产生较大误差,并直观展现从叠加信号中提取各发射天线至同一接收天线间并行信道特性的过程。压缩包体积十分精简,仅含1个m脚本文件,大小约2KB,便于直接运行和逐行分析,可作为入门或对比实验的轻量代码模板。目前已有1411人学习或下载,说明该仿真思路对同类学习者有参考价值。运行脚本,可结合多天线叠加模型掌握训练序列与估计算法的配合逻辑,并以此为基础扩展误码率、均方误差等更多性能仿真。

1. 这篇 MIMO-OFDM MATLAB 仿真,到底在仿什么

很多刚接触无线通信仿真的读者,拿到 OFDM_MIMO_MIMO-OFDM_MATLAB仿真_ 这个标题,第一反应是找代码,第二反应是跑通了但看不懂图。其实这套仿真解决的是一个很具体的问题:把 OFDM 的抗频率选择性衰落能力,和 MIMO 的空间复用/分集增益放到同一个基带模型里验证,最终输出 BER-SNR 曲线、星座图、信道估计误差这几张能写进论文或汇报里的图。适合三类人:做物理层算法验证的研究生、要评估链路性能的系统工程师、以及刚入门想搞懂 OFDM 子载波间隔和 MIMO 信道容量到底怎么在代码里体现的学生。

先立住一个反直觉结论:仿真的难点从来不在 OFDM 或 MIMO 本身,而在收发两端怎么把「符号」和「天线」的维度对齐。MIMO 引入后,每个子载波上跑的不再是一个 QAM 符号,而是一个符号向量。矩阵维度对不上,后面所有结果都是错的。这篇文章会按「信道模型怎么选 → 最小可跑工程怎么搭 → 参数怎么调 → 坑在哪」的顺序,把这个标题背后的完整落地路径讲清楚。

2. 先把系统模型定下来:OFDM 子载波间隔、导频图案与 MIMO 映射

写仿真代码之前,先搭数学框架。没有这一步,你只是在拼函数,不是在仿真。

2.1 为什么仿真链路里必须有子载波间隔这个概念

OFDM 的核心思想是把宽带信道切成多个窄带子信道。子载波间隔 Δf 直接决定符号持续时间 Ts = 1/Δf,也决定循环前缀 CP 的最大长度。仿真里最常见的一组参数是:FFT 点数 64,子载波间隔 15 kHz,CP 长度 4 或 16 个采样点。为什么用 15 kHz?因为这是 LTE 的标准值,很多教材和论文的对比曲线都基于这个值,你后续和别人结果对齐时不用重新换算。

具体到代码里,子载波间隔不直接出现在公式中,而是通过采样率和 FFT 点数隐含在信号生成里。比如你设定采样率 fs = 960 kHz,FFT 点数 NFFT = 64,那么 Δf = fs / NFFT = 15 kHz。这个换算关系是仿真和实测对不上的常见原因——很多人改了 fs 但忘了同步改 CP 长度和导频间隔。

2.2 MIMO 维度的两种理解方式:空间复用与空时编码

MIMO 在仿真里可以做成两种模型。第一种是空间复用,发送端把两个独立数据流分别从两根天线发出去,接收端用迫零或 MMSE 检测把两路数据分离开,目标是提高传输速率。第二种是 Alamouti 空时编码,两根天线发送同一信息的正交编码版本,接收端只需要线性合并就能获得分集增益,目标是提高可靠性。

这两种模型在 MATLAB 里的复杂度完全不同。Alamouti 的接收端算法很简单,两发一收时只需要做一次共轭转置和线性合并;空间复用的接收端需要求解一个线性方程组,涉及矩阵求逆。常见做法是先把 Alamouti 跑通,再做空间复用,因为 Alamouti 能帮你验证发端天线映射是否正确,而不会引入 ZF/MMSE 检测器的变量。MIMO-OFDM 系统的性能差异在低 SNR 时主要由分集增益决定,高 SNR 时才由复用增益拉开差距,用仿真曲线来验证这一点是个很好的入门练习。

2.3 信道模型:为什么不能只用 AWGN

MIMO-OFDM 仿真的核心价值在于验证系统对抗「频率选择性衰落」的能力。常用的信道模型是带抽头延迟线的多径瑞利信道,每条路径独立衰落,同时存在时延扩展。OFDM 把这种信道转换成每个子载波上的平坦衰落信道,MIMO 则把每个子载波上的信道标量变成信道矩阵。

仿真里最常用的做法是使用 MATLAB 的 comm.MIMOChannel 对象,配置为每条收发天线对之间独立的多径瑞利信道。但要注意,这个对象的输出信号增益和理论信道矩阵 H 之间存在一个缩放差异,后面信道估计时会被放大。要绕开这个问题,我一般建议直接手动生成信道矩阵 H:对每个子载波、每对收发天线,生成一组复高斯抽头,做 FFT 得到频域响应。这样做的好处是信道矩阵完全可控,做信道估计性能分析时你能知道理论最优性能在哪里。实际链路里,信道是时变的,仿真里通常假设一个 OFDM 符号内信道不变,但跨符号可以变化。这个假设会直接影响导频插入密度。

2.4 收发端映射关系:从符号流到天线帧

发射端做映射时,维度顺序特别容易搞乱。一个 OFDM 符号里有 NFFT 个子载波,MIMO 场景下每个子载波承载 Nt 个符号(空间复用)或 Nt 个编码符号(Alamouti)。所以一个符号时间内,发射端要生成 Nt × NFFT 个频域符号,经过 IFFT 后得到 Nt 个时域 OFDM 符号,每个符号加 CP 后从对应天线发出。

接收端的逆操作顺序是:去 CP → FFT → 取出数据子载波 → 按天线索引排列成向量 → 用信道估计得到的 H 矩阵做检测。这里最容易犯的错是接收端把天线索引和子载波索引的循环次序搞反。先固定子载波循环天线,还是先固定天线循环子载波,两种写法结果完全不同,但语法上都对。

这个环节的检验标准是:发射端导频符号和接收端导频位置的排列方式必须能直接映射回 H 矩阵的维度。导频在子载波 k 上占用所有发射天线时,接收端第 j 根天线收到的导频是 y_j(k) = Σ_i H_ji(k) * p_i(k) + n,其中 p_i 是第 i 根天线上的导频符号。如果你用这个公式推导代码,数据结构就不会错。

3. 搭一个最小可跑的 MIMO-OFDM 仿真工程:文件结构、主脚本与模块函数

这一章给出能直接运行的工程骨架。目标不是堆功能,而是让你在半小时内看到一条 BER-SNR 曲线,并且理解每行代码存在的意义。

3.1 工程文件组织方式

我一般把 MIMO-OFDM 仿真拆成四个文件,避免把算法写在一个巨型脚本里。首先是 config.m,存放所有参数,包括子载波数、CP 长度、调制阶数、天线配置、SNR 扫描范围。其次是 transmitter.m,实现 QAM 映射、串并转换、导频插入、MIMO 编码、IFFT 和加 CP。然后是 channel.m,生成频域信道矩阵 H 并叠加 AWGN。最后是 receiver.m,实现同步补偿、去 CP、FFT、信道估计、MIMO 检测和 BER 统计。

用脚本而不是 Simulink 模型的好处是:你可以方便地做蒙特卡洛循环,一键跑完整个 SNR 扫描,还能把中间变量存下来画星座图。Simulink 适合做实时验证或硬件在环,但做参数扫描和算法迭代时,脚本的灵活性高得多。对于这个标题的仿真目标,脚本是正确选择。

3.2 主脚本:参数初始化与蒙特卡洛循环

主脚本的核心是两层循环:外层遍历 SNR,内层跑若干个帧(每个帧包含多个 OFDM 符号),统计误码数,最后除以总比特数得到 BER。

%% config.m % 系统参数 NFFT = 64; % FFT 点数 CP_LEN = 16; % 循环前缀长度,单位:采样点 N_DATA = 48; % 数据子载波数,其余为导频和空子载波 N_PILOT = 4; % 导频子载波数 MOD_ORDER = 4; % 4QAM,每个符号 2 bit N_TX = 2; % 发射天线数 N_RX = 2; % 接收天线数 FRAME_LEN = 20; % 一帧内的 OFDM 符号数 N_FRAMES = 20; % 每个 SNR 点仿真的帧数 SNR_DB = 0:2:20; % SNR 扫描范围 % 推导参数 N_BITS_PER_SYM = N_DATA * log2(MOD_ORDER);

这段代码的关键是 N_DATA 和 N_PILOT 之和必须小于 NFFT,剩余的是空子载波,用于防止频谱混叠。LTE 下行实际配置是 64 个 FFT 点里 52 个有效子载波,其中数据 48 个、导频 4 个。直接把这套参数搬进仿真,是因为它经过协议验证,不会出边界问题。

主循环里要注意重置随机数生成器,否则每次仿真结果无法复现。我习惯在每个 SNR 点开始时用rng(42 + snr_idx)固定种子,这样改参数后对比曲线时,能确定性能变化是参数引起的还是随机噪声引起的。

3.3 发射机:从比特到天线的完整映射

发射机的核心函数是 QAM 调制、子载波映射和 Alamouti 编码。下面这段代码实现了 2 发 2 收 Alamouti 方案的发射端:

%% transmitter.m function tx_frame = transmitter(bits, cfg) % bits: 二进制数据流 % tx_frame: N_TX x (NFFT + CP_LEN) x N_SYM 的时域帧 N_SYM = length(bits) / (cfg.N_DATA * log2(cfg.MOD_ORDER) * cfg.N_TX / 2); % 1. QAM 调制 symbols = qammod(bits, cfg.MOD_ORDER, 'InputType', 'bit', 'UnitAveragePower', true); % 2. 串并转换:把符号流分到不同 OFDM 符号和不同天线上 % Alamouti 编码每次取两个符号,编码矩阵为 [s1 -s2*; s2 s1*] sym_matrix = reshape(symbols, cfg.N_DATA, N_SYM, 2); s1 = sym_matrix(:, :, 1); s2 = sym_matrix(:, :, 2); % 3. 构造两个天线的频域符号 % 天线1:奇数OFDM符号发[s1 s2],偶数发[-s2* s1*],按符号交替 % 天线2:同理 freq_frame = zeros(cfg.N_TX, cfg.NFFT, 2*N_SYM); for m = 1:N_SYM % 天线1,第 2*m-1 个 OFDM 符号(偶) freq_frame(1, cfg.DATA_IDX, 2*m-1) = s1(:, m); freq_frame(1, cfg.PILOT_IDX, 2*m-1) = cfg.PILOT_SYMS(1, :).'; % 天线1,第 2*m 个 OFDM 符号(奇) freq_frame(1, cfg.DATA_IDX, 2*m) = -conj(s2(:, m)); freq_frame(1, cfg.PILOT_IDX, 2*m) = cfg.PILOT_SYMS(1, :).'; % 天线2,第 2*m-1 个 OFDM 符号 freq_frame(2, cfg.DATA_IDX, 2*m-1) = s2(:, m); freq_frame(2, cfg.PILOT_IDX, 2*m-1) = cfg.PILOT_SYMS(2, :).'; % 天线2,第 2*m 个 OFDM 符号 freq_frame(2, cfg.DATA_IDX, 2*m) = conj(s1(:, m)); freq_frame(2, cfg.PILOT_IDX, 2*m) = cfg.PILOT_SYMS(2, :).'; end % 4. IFFT 和加 CP tx_frame = zeros(cfg.N_TX, cfg.NFFT + cfg.CP_LEN, 2*N_SYM); for t = 1:cfg.N_TX for n = 1:2*N_SYM ifft_out = ifft(freq_frame(t, :, n), cfg.NFFT); tx_frame(t, :, n) = [ifft_out(end-cfg.CP_LEN+1:end), ifft_out]; end end end

这段代码里最值得说明的是UnitAveragePower, true这个参数。QAM 调制如果不指定单位平均功率,符号能量的期望值会随调制阶数变化,导致 SNR 计算时信噪比定义混乱。用单位平均功率后,每个符号的能量恒为 1,叠加噪声时可以直接按 Es/N0 换算。

另一个需要理解的是 Alamouti 的编码方式。它按两个 OFDM 符号周期编码,第一个符号周期天线 1 发 s1、天线 2 发 s2,第二个符号周期天线 1 发 -s2*、天线 2 发 s1*。这要求发射端把数据符号按两个一组编码,接收端按两符号联合解码。所以上面代码里 N_SYM 是编码前的数据块数,编码后的 OFDM 符号数是 2*N_SYM,这一点非常容易算错。

3.4 信道与接收机:包括信道估计和 Alamouti 解码

信道生成时,为每个子载波独立生成一个 2x2 矩阵是不对的,因为频率选择性信道相邻子载波之间存在相关性。正确做法是先生成时域冲激响应的抽头,再做 FFT 得到频域响应,这样相邻子载波自然相关。

%% channel.m function [H, rx_frame] = channel(tx_frame, cfg, snr_linear) % 多径信道参数 TAPS = [0, 1, 2] * 1e-6; % 路径时延,单位秒 POW = [0, -3, -6]; % 路径平均功率,单位 dB N_TAPS = length(TAPS); % 为每对收发天线生成信道冲激响应 fs = cfg.NFFT * 15e3; % 采样率 = 子载波间隔 x FFT点数 tap_samples = round(TAPS * fs) + 1; H = zeros(cfg.N_RX, cfg.N_TX, cfg.NFFT); % 生成时域冲激响应对每个天线对 for rx = 1:cfg.N_RX for tx = 1:cfg.N_TX h_time = zeros(1, max(tap_samples) + 4); for tap = 1:N_TAPS coef = (10^(POW(tap)/20)) * (randn(1) + 1j*randn(1)) / sqrt(2); h_time(tap_samples(tap)) = coef; end % FFT 转到频域,得到该天线对的信道向量 H(rx, tx, :) = fft(h_time, cfg.NFFT); end end end

接收端做 Alamouti 解码时,最关键的是同一个数据子载波上,两个连续 OFDM 符号的 H 矩阵不能变化。如果每符号都重新生成信道,Alamouti 的正交性就破坏了。所以信道生成在帧级完成:一个帧内所有符号共享同一组 H,帧与帧之间重新生成。这个假设是静态信道模型,符合慢衰落场景的假设。

Alamouti 解码的核心算法是线性合并。两个接收符号 y1、y2 和信道系数 h1、h2 的关系是 y1 = h1s1 + h2s2 + n1,y2 = -h1s2+ h2s1+ n2。解码时对 y2 取共轭后构造方程组,利用 Gram 矩阵的正交性一次性解出 s1 和 s2 的软值。这里补充一句,实际实现时建议用等效信道矩阵的伪逆代替直接共轭合并,因为伪逆在信道估计存在误差时更稳定。

4. 参数怎么调才合理:从导频间隔到 SNR 定义,5 个影响曲线走向的关键旋钮

仿真参数不是随便填的,每个参数都对应实际系统的某个约束。这一章把决定曲线好坏的关键参数逐一拆开。

4.1 子载波间隔和 CP 长度的匹配原则

子载波间隔决定 OFDM 符号持续时间,CP 长度必须大于信道最大时延扩展,否则会产生符号间干扰。仿真里最常见的一组匹配是 Δf = 15 kHz,CP = 4.687 μs,对应最大时延扩展容忍约 4.6 μs。你在 channel.m 里设置的 TAPS 参数,最大时延必须小于 CP 长度,否则无论 SNR 多高,BER 曲线都会出现平台。

如何检查平台是不是 CP 不足引起的?把 CP 长度加大一倍,看 BER 是否明显下降。如果明显下降,说明多径时延超过 CP 容忍范围;如果不变,说明瓶颈在别处。

4.2 导频数量和插值方式对信道估计的影响

导频子载波的数量决定信道估计的采样密度。频域插值要求导频间隔小于信道的相干带宽。相干带宽约等于 1/(最大时延扩展),对于 TAPS = [0, 1, 2] 微秒、最大时延 2 μs 的信道,相干带宽约 500 kHz。你的信号带宽是 NFFT * Δf = 960 kHz,导频间隔要小于 500 kHz 才能保证插值不混叠。所以如果用 4 个导频均匀分布在 48 个数据子载波之间,导频间隔为 240 kHz,勉强满足要求。

要提高信道估计精度,最直接的做法是导频符号正交化。对 2 发天线,天线 1 在偶数字载波发导频、天线 2 在奇数字载波发导频,接收端可以分离两路信道响应。但这样会牺牲一半的导频开销。另一种做法是天线 1 和天线 2 发送相同导频符号但乘以正交码,通过码分区分天线,导频占用不增加但正交码长度需大于天线数。

4.3 Es/N0 与 Eb/N0 的换算:BER 曲线的横轴到底画什么

这是仿真里最容易被审稿人问的问题。BER 曲线的横轴有三种画法:SNR、Es/N0、Eb/N0。三者换算关系是 Es/N0 = Eb/N0 + 10*log10(mod_order),其中 mod_order 是每个调制符号携带的比特数。但 MIMO-OFDM 里还有额外开销:CP 占用的能量、导频占用的能量、空子载波的功率损失。如果你画的是 Es/N0,就需要把实际数据符号能量从总能量里剥离。

我通常会画 Eb/N0 作为横轴,因为论文里习惯用这个指标,不同调制阶数和编码率之间可比。计算方法是先确定每个信息比特能量,然后用总发射功率除以信息比特速率。具体到代码里,AWGN 噪声方差应该用10^(-snr_db/10)乘以符号能量再除以 2(每维度),而不是直接用10^(-snr_db/10)。这个 2 的因子会导致 3 dB 偏移,是 BER 曲线里最常见的错误。

4.4 天线间相关性对 MIMO 性能的影响

很多初学者的仿真里,MIMO 信道矩阵的每个元素都是独立同分布的复高斯变量。这在散射环境足够丰富的假设下是对的,但实际场景存在天线相关性,相关导致信道矩阵秩亏缺,空间复用增益显著下降。

仿真里加相关性的常见做法是用 Kronecker 模型:H_corr = R_r^(1/2) * H_iid * R_t^(1/2),其中 R_r 和 R_t 分别是接收端和发射端的相关矩阵。相关矩阵的对角线为 1,非对角线元素为相关系数 ρ。ρ = 0.9 时,MIMO 信道容量会下降一半以上。如果不想引入 Kronecker 模型,至少要在结果讨论里说明你的仿真假设是完全独立信道,性能是理想上界。

4.5 均衡方式的选择:ZF、MMSE 还是最大比合并

Alamouti 分集用最大比合并,空间复用用 ZF 或 MMSE 检测。ZF 实现简单但会放大噪声,MMSE 在低 SNR 时明显更好。MIMO-OFDM 里,每个子载波独立检测,所以可以直接在每个子载波上调用linsolve或手动实现检测器。

ZF 检测在这种场景下的问题很明显:当信道矩阵条件数很大时,求逆后的噪声放大效应导致 BER 曲线在低 SNR 区几乎无分集增益。MMSE 检测通过引入噪声方差的回归项避免了这个缺点,实现只比 ZF 多一行代码,性能却好很多。我的习惯是:先跑 ZF 确认链路通断,再换成 MMSE 出最终曲线。

5. 避坑指南:MIMO-OFDM 仿真最容易翻车的 10 个细节

5.1 星座图旋转:同步偏差导致的相位累积

现象:接收端星座图相对理论位置旋转了一定角度,BER 曲线在低 SNR 时正常、高 SNR 时出现不可归零的平台。 原因:OFDM 符号定时偏差导致 FFT 窗位置偏移,时域的循环移位在频域表现为相位旋转,且子载波索引越大相位旋转越明显。 解决:接收端必须先做符号同步,找到 FFT 窗的起始位置。最小实现是用循环前缀和符号尾部的相关性做粗同步。中信科技大学的 OFDM 同步仿真通常用两个相同的训练符号做 Schmidl-Cox 算法,仿真里也可以直接在帧前加一个已知序列,用互相关定位。

5.2 导频位置错位:信道估计结果全错但曲线形状正常

现象:BER-SNR 曲线形状正常,但性能比理论差 3~6 dB,且误码率不随 SNR 增大而快速下降。 原因:发射端的导频子载波索引和接收端取出的导频索引不一致。这属于维度映射错误,不会导致仿真崩溃,但会让信道估计结果变成错误值。 解决:在发射端和接收端分别打印find(cfg.PILOT_MASK == 1)的结果,人工确认导频索引集合是否一致。更严谨的做法是用归一化相关系数检查估计的 H_est 和真实的 H 是否接近,相关系数应大于 0.9。

5.3 FFT 窗偏移半个采样点:BER 出现非 Gaussian 分布的底部

现象:高 SNR 时 BER 不再按指数下降,而是趋于一个常数,且等于 1/调制阶数对应的值。 原因:FFT 窗偏移导致子载波正交性破坏,载波间干扰成为主导因素,信号功率和干扰功率同时增加,信干比不再是单调函数。 解决:用同步序列精确估计符号起始位置。如果采用循环前缀相关法,相关峰峰值可以作为粗同步起点,再用频域导频相位差做精同步。在仿真的静态信道模型里,也可以让发射端把帧起始位置作为已知量传给接收端,先跑通算法再引入同步误差。

5.4 SNR 定义混乱:等效 3 dB 的恒定偏移

现象:BER 曲线形状正确但往右偏移约 3 dB。 原因:复噪声的方差定义不统一。MATLAB 的awgn函数对复信号的 SNR 定义为信号功率与总噪声功率之比,而手工加噪声时如果写成noise = sqrt(N0/2) * (randn + 1j*randn),N0 的单边谱密度会导致总噪声功率是 N0 而不是 N0/2。 解决:统一用comm.AWGNChannel对象,设置SNR和SignalPower参数,避免手工加噪声。如果你的自定义检测器需要采样噪声方差,再用var(noise)实测校准。

5.5 多径时延跨越 CP:BER 平台由信道本身决定

现象:无论如何提高 SNR,BER 无法低于某个下限。 原因:多径时延扩展超过 CP 长度,前一个符号的尾部泄漏到当前符号的 FFT 窗内,产生不可消除的符号间干扰。 解决:调整 TAPS 参数,使最大时延小于 CP_LEN / fs。具体计算是:CP_LEN = 16,fs = 960 kHz,CP 时间约为 16.7 μs,TAPS 最大值应小于 16 μs。如果你的实测信道时延超出该值,加大 CP_LEN 而不是减小子载波间隔——前者的代价是频谱效率下降,后者的代价是子载波间隔变小、对多普勒频移更敏感。

5.6 Alamouti 解码时信道矩阵排序错误

现象:2x2 系统 BER 曲线和 1x1 几乎一样,没有分集增益。 原因:接收端解码时,将 H 矩阵的两个时隙对应的信道系数用反了。Alamouti 编码矩阵和信道矩阵的乘法顺序需要严格匹配,否则 Gram 矩阵的交叉项无法抵消。 解决:写一个单符号单元测试,固定 H 为已知矩阵,发送两组已知符号手动计算期望输出,和代码输出对比。这比在完整链路里排查快得多。

6. 用一条 BER 曲线验证你的仿真:从单发单收到 2x2 MIMO 的完整对照实验

最后给出一个验证方法:在同一套参数下,分别做 SISO、Alamouti 1x1、2x2 空间复用三组仿真,对比 BER-SNR 曲线。如果三组曲线没有按预期顺序排列(分集增益在低 SNR 区体现斜率变化、复用增益在高 SNR 区体现水平位移),说明仿真模型有问题。

三组实验的参数表如下:

配置场景发射天线接收天线编码方式检测器预期分集阶数
SISO11无单抽头均衡1
Alamouti 2x121Alamouti线性合并2
空间复用 2x222无MMSE2(但编码增益不同)

判断标准的经验值:4QAM 调制、无编码、多径瑞利信道下,BER=1e-4 时 Alamouti 2x1 应比 SISO 好 8~10 dB。空间复用 2x2 在高 SNR 区(BER<1e-3)的斜率与 Alamouti 相近,但绝对性能约差 2~4 dB,因为它没有发射分集。注意这些数值只作为参考,不同信道实现和导频开销会带来一定浮动。

实际跑仿真时,我会额外保存信道矩阵 H 的条件数分布。如果 K 因子过高(条件数接近 20 dB 以上),说明这个信道实现不利于 MIMO 传输,用它做 BER 对比会对 μ 不公平。建议跑 1000 帧后统计条件数的累积分布,取中位数作为报告的参考值。

写完代码后有一个习惯:用一组极端参数做冒烟测试。比如把噪声设为零,此时 BER 应为 0;把调制阶数改成 2(BPSK),BER 性能应比 4QAM 好 3 dB 左右。这两个测试过了,再跑正式的 SNR 扫描。这篇方案里所有参数都是按常见 LTE 基带配置给出的,你可以直接把 config.m 里的参数换成自己的系统指标,但要记住子载波间隔和 CP 长度必须先满足信道时延约束。希望帮到你。

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

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

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

立即咨询