基于MATLAB的OFDM通信系统全链路仿真与误码率分析
项目介绍
本项目是一个高保真的正交频分复用(OFDM)通信系统仿真模型,完全基于MATLAB环境开发。该项目旨在完整复现从信源产生、信号处理、信道传输到信宿接收的全过程。与简单的基带包络仿真不同,本模型特别注重信号的物理层特性,构建了实信号(Real-valued Signal)传输模型,并引入了过采样、共轭对称频谱构建、时域加窗以及多径衰落信道等高级特性,以更贴近实际硬件实现的通信场景。
通过本仿真工具,用户可以直观地观察OFDM信号在各个处理阶段的时频域特性,评估系统在不同信噪比(Eb/N0)和多径环境下的误码率(BER)性能。
功能特性
- 全链路仿真:涵盖信源生成、调制、插值、成型、传输、同步(理想)、均衡、解调及误码统计。
- 实信号生成机制:通过频域共轭对称(Hermitian Symmetry)处理,确保IFFT后的时域信号为实数,模拟真实的射频发射波形。
- 过采样与频谱成型:支持配置过采样因子(Oversample Factor),通过频域补零模拟模拟域波形,提高时域分辨率。
- 复杂的帧结构设计:
* 支持自定义循环前缀(CP)以抵抗ISI。
* 支持自定义循环后缀(CS)。
* 集成时域加窗(Raised Cosine Windowing)以优化频谱旁瓣衰减。
- 多径衰落信道模型:内置多径滤波器模型,模拟频率选择性衰落环境。
- 自适应QAM调制:支持QPSK和16QAM等多种调制阶数,采用自定义的映射逻辑。
- Zero-Forcing均衡:接收端基于理想信道状态信息(CSI)实施迫零均衡算法。
- 性能可视化:自动统计并在仿真结束时调用可视化函数展示波形、星座图、频谱及BER曲线。
系统要求
- MATLAB R2018a 及以上版本
- Signal Processing Toolbox(推荐,用于滤波器设计等潜在扩展,但核心逻辑已通过原生代码实现)
使用方法
- 确保所有脚本文件位于MATLAB的当前工作路径中。
- 直接运行主函数即可启动仿真。
- 系统将自动遍历预设的信噪比范围(默认0-20dB),在控制台输出当前SNR下的误码率信息。
- 仿真结束后,系统将弹出窗口显示时域波形、收发星座图对比、发送信号频谱以及信道频率响应。
参数配置可在主函数的 sys_params 结构体中进行修改,例如调整 N_fft(FFT点数)、M(调制阶数)或 Multipath_Taps(多径时延参数)。
---
仿真逻辑与实现细节
本节详细阐述代码内部的具体实现逻辑,涵盖发射端、信道与接收端的关键算法。
1. 系统参数配置与初始化
仿真开始前,代码定义了全局系统参数。核心参数包括:
- 载波配置:使用256点FFT,其中单边有效子载波为64个(用于构建共轭对称)。
- 保护间隔:定义了32点循环前缀(CP)和8点循环后缀(CS)。
- 过采样:设置了4倍过采样因子,直接影响FFT的总点数和采样率。
- 信道参数:定义了一个4抽头的时域冲击响应
[1, 0.2, 0.1, 0.05]。
2. 发射机处理流程 (Tx)
发射链路采用逐块处理的方式,具体步骤如下:
- 信源产生:生成足够数量的随机二进制比特流(0-1分布)。
- 数字调制 (Mapping):
* 将比特流分组成符号索引。
* 根据设定的阶数(如QPSK或16QAM)将比特映射为复数星座点。映射逻辑直接在代码内部实现,支持格雷码或自然映射的变体。
- 共轭对称频谱构建 (Conjugate Symmetry):
* 为了生成实数时域信号,频域数据结构被设计为:
[直流(0), 正频率数据, 奈奎斯特(0), 负频率数据]。
* 负频率部分由正频率数据的
共轭翻转(
conj(flipud(...)))生成。
* 若过采样因子大于1,代码通过在中间频段补零的方式扩展频谱。
* FFT变换的点数随之扩大(例如
256 * 4 = 1024 点),从而在时域获得更密集的采样点。
- IFFT 变换:执行逆快速傅里叶变换,并取实部(
real())以消除计算精度的微小虚部残留,得到时域OFDM符号。 - 添加 CP/CS 与加窗:
* 根据过采样后的比例,复制符号尾部作为CP,复制头部作为CS。
* 对包含CP和CS的完整符号应用升余弦窗(Raised Cosine Window),以平滑符号边缘,减少带外辐射。
- 并串转换 (P/S):将处理好的独立符号拼接成连续的时间序列。
3. 信道模型 (Channel)
- 多径效应:利用
filter 函数将定义好的多径冲激响应作用于发送信号,产生频率选择性衰落。 - AWGN 噪声:
* 根据目标
Eb/N0 计算线性信噪比。
* 考虑了过采样率、CP/CS开销等因素推导噪声方差。
* 向通过多径信道的信号叠加高斯白噪声。
4. 接收机处理流程 (Rx)
接收端假设实现了理想的符号同步:
- 理想信道估计:代码直接通过对多径抽头进行FFT变换(补零至总子载波长度)来获取频域信道响应(
H_freq),用于后续均衡。 - 串并转换与去保护间隔:
* 按照计算好的接收符号长度截取数据块。
* 精确移除头部的CP和尾部的CS,提取核心数据段。
- FFT 变换:将时域信号变换回频域。
- 下采样与数据提取:
* 从过采样的频谱中提取对应的正频率有效子载波部分,忽略补零区域和负频率镜像。
- 迫零均衡 (Zero-Forcing Equalizer):
* 利用已知(理想)的频域信道响应,执行
Rx_syms ./ H_channel 操作,消除多径信道带来的幅度和相位失真。
* 采用最小欧几里得距离法,计算接收符号与标准星座点的距离,判决出最接近的星座点并还原为二进制比特。
5. 性能评估
- 误码率统计:系统逐位比对发送比特流与接收比特流,统计错误比特数,计算并输出BER。
- 数据记录:在最高信噪比的最后一次迭代中,系统会记录时域波形、频谱数据及收发星座点数据,供可视化模块使用。
---
关键算法简述
实信号构建算法
代码并未直接传输复数基带信号,而是利用傅里叶变换的性质:
实信号的频谱具有共轭对称性。通过在IFFT前人工构造满足 $X(k) = X^*(N-k)$ 关系的频谱向量,确保了输出的 $x(n)$ 为纯实数。
频域过采样
不同于时域插值,本项目采用了频域补零法实现过采样。这种方法在数学上等价于利用理想低通滤波器进行插值,能够以极高的精度模拟高采样率下的模拟波形。
窗函数处理
为了降低OFDM符号间的不连续性对频谱的影响,代码在添加CP和CS后,对整个扩展符号乘以升余弦窗函数。这是一种平滑技术,能有效降低旁瓣电平,减少对邻近信道的干扰。