尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

OFDM技术解析:从多径对抗到5G/Wi-Fi 6的核心原理与实践

OFDM技术解析:从多径对抗到5G/Wi-Fi 6的核心原理与实践 1. 从“堵车”到“高速路”为什么我们需要OFDM如果你曾经在一条繁忙的单车道公路上开车前面一辆慢车压着速度你只能干着急那你就已经直观地理解了单载波传输的困境。在无线通信里数据就像车流信道就是那条公路。当数据速率越来越高符号周期越来越短时一个巨大的问题就出现了多径效应。想象一下你发出的信号不仅沿着直线到达接收端还会经过建筑物、山体的反射形成多个延迟不同的副本。在单载波系统里这些延迟的信号会像幽灵一样叠加到后续的符号上造成严重的码间干扰这就是所谓的“频率选择性衰落”。信道像一条坑坑洼洼、到处是水坑的路高速行驶的车辆高速数据很容易被颠簸得面目全非。那么怎么解决一个朴素的想法是既然一条路容易堵容易受坑洼影响那我们为什么不把一条宽马路划分成很多条并行的、窄窄的小路呢每条小路上跑的车速慢一点但可以同时跑很多辆车总运力不变而且每条窄路受到的坑洼影响频率选择性衰落会小得多。这就是正交频分复用技术的核心思想。它把高速的数据流拆分到大量相互正交的、低速的子载波上进行传输。每个子载波上的符号周期变长了多径时延相对于符号周期就显得很短码间干扰的影响就大大降低。OFDM就是把一条“高速单车道”改造成了一个“多车道并行高速公路网”每条车道子载波的速率不高但通过精密调度整体吞吐量惊人。我第一次接触OFDM是在调试一个早期的Wi-Fi模块时当时用频谱仪看它的发射信号发现不是传统的一个“大鼓包”而是一堆紧密排列的、平坦的“小鼓包”非常震撼。这背后是一整套精妙的数学和信号处理工程。理解OFDM不仅是理解一个调制技术更是理解现代高速无线通信从Wi-Fi 4/5/6到4G/5G蜂窝网甚至数字电视广播是如何在复杂的物理环境中“杀出一条血路”的。接下来我们就抛开复杂的公式用工程师的视角看看这条“高速公路”是怎么设计、施工和维护的。2. OFDM系统的核心骨架IFFT/FFT与循环前缀OFDM的实现在数字信号处理层面有一个极其巧妙且高效的核心快速傅里叶变换及其逆变换。这可以说是整个技术的“工程奇迹”它让理论上复杂无比的多载波系统变得在硬件上可行。2.1 从并行数据到时域波形IFFT的魔法传统实现多个载波需要为每个子载波配备一个独立的振荡器和调制器硬件复杂度是灾难性的。OFDM的聪明之处在于它发现在频域上的一组数据点经过逆傅里叶变换后在时域上得到的信号其频谱天然就是由这些数据点所对应的多个正交频率分量构成的。我们来拆解一下这个过程频域映射假设我们有N个子载波。发送端首先将待传输的二进制数据经过编码、交织、调制比如QPSK 16-QAM映射成一个个复数符号包含幅度和相位信息。这些符号每一个对应一个子载波。我们把所有N个子载波上的符号看作一个长度为N的复数向量这个向量就是在“频域”上的表示。IFFT变换对这个频域向量做N点的逆快速傅里叶变换。IFFT的输出是一个长度为N的时域离散序列。这个序列的物理意义就是它是由N个不同频率、相互正交的正弦波叠加而成的合成波形的一个采样点序列。这一步一次性生成了所有子载波叠加后的时域信号完全避免了为每个载波配备独立射频电路。并串转换与加窗将IFFT输出的并行时域序列转换成串行数据流然后经过数模转换变成模拟信号发射出去。这里有个关键点IFFT输出的时域样点其周期延拓的频谱正好就是我们预设的那些子载波。子载波之间的正交性由IFFT/FFT的数学性质天然保证只要子载波间隔等于符号周期的倒数。这比用模拟滤波器组来实现正交性要精确和稳定得多。注意IFFT点数N决定了系统的子载波总数。但并非所有子载波都用于传输数据。中间一部分子载波会被置零作为保护间隔防止带外泄漏边缘的一些子载波也可能不用因为滤波器滚降效应。实际用于传输数据的子载波数小于N。2.2 对抗多径的盾牌循环前缀IFFT解决了高效生成的问题但多径引起的码间干扰还在。OFDM的另一个核心武器是循环前缀。它的操作简单得令人惊讶但效果拔群。操作步骤在IFFT生成的、长度为N的时域符号块后面复制该块末尾的L个样点粘贴到整个符号块的开头。这样实际发送的符号块长度就变成了 N L。前面这L个额外的样点就是循环前缀。它为什么能抗多径多径效应导致接收端会收到原始信号的延迟版本。如果没有CP延迟的信号会侵入下一个符号块造成符号间干扰。加入CP后我们人为地创造了一个“保护间隔”。只要多径信道的最大时延扩展小于CP的长度L那么所有多径分量都会落在CP这个“缓冲区”内。更妙的是CP的“循环”特性。由于CP是末尾样点的复制当接收端收到信号后它会先丢弃前面长度为L的CP部分只取后面的N个样点去做FFT。只要多径时延小于CP长度那么经过信道后这N个样点部分其波形恰好相当于原始N点序列经过了一个循环卷积而不是线性卷积。而时域的循环卷积对应到频域就是简单的乘法。这意味着每个子载波上的衰落可以简化为一个简单的复数乘法乘以该子载波对应的信道频率响应值极大地简化了接收端的均衡操作。CP的长度选择是一个权衡CP太长保护能力越强能容忍更大的时延扩展但开销也越大L/(NL) 是开销比例降低了有效数据传输效率。CP太短无法完全覆盖多径时延会导致子载波间正交性被破坏产生载波间干扰系统性能急剧恶化。 在实际系统中比如LTECP长度是根据典型应用场景如宏蜂窝、微蜂窝的时延扩展统计特性来设计的并且有几种不同长度的CP配置可供选择。我在一次项目调试中就吃过CP的亏。当时为了追求极限吞吐量手动缩短了CP长度。在实验室静态环境下测试一切正常但一旦拿到有轻微多径的办公室环境误码率就飙升。用信道探测仪一看信道的时延扩展刚好超过了我们设置的CP长度一点点。这就是典型的“省了芝麻丢了西瓜”后来乖乖改回了标准值。3. OFDM的频谱特征与子载波安排看一个OFDM信号的频谱是理解其特性的最直观方式。它不像传统的单载波信号那样是一个“凸起”的谱峰而是一系列平坦的、像梳子一样的“子带”集合。3.1 理想的“矩形”频谱与现实的“Sinc”形从理论上讲每个子载波本身是一个在一定时间内持续的正弦波。一个时间有限的信号其频谱是无限宽的。具体来说一个持续时间为T的矩形窗调制的正弦波其频谱是Sinc函数形状。因此每个子载波的频谱主瓣宽度约为1/T并且有缓慢衰减的旁瓣。OFDM的神奇之处在于子载波的正交性。虽然每个子载波的频谱是Sinc形且相互重叠但在其他子载波的中心频率点上所有其他子载波的Sinc函数值恰好为零。这就保证了在采样点上没有干扰。所以OFDM的总体频谱可以看作是很多个Sinc函数的叠加在子载波中心点处叠加后的频谱看起来相对平坦但在带外由于Sinc旁瓣的叠加衰减较慢带外辐射较高。3.2 保护间隔与频谱成型正因为OFDM带外衰减慢在实际系统中必须采取措施虚拟子载波在IFFT的输入向量中将两边的若干个子载波对应最高和最低频率设置为0。这些不用于传输数据的子载波相当于在有效带宽两侧增加了保护带抑制了带外辐射。加窗/滤波对时域的OFDM符号进行加窗处理如升余弦窗让符号的起始和结束变得平滑而不是陡峭的跳变。这可以加速频域旁瓣的衰减。但加窗会引入符号间的微小重叠需要精细设计。下表对比了不同子载波安排策略的目的子载波类型作用处理方式数据子载波承载用户数据调制映射后的符号导频子载波用于信道估计与同步插入已知的固定或伪随机序列直流子载波通常位于频谱中心置零避免直流偏移对射频的影响保护子载波位于频谱两侧边缘置零形成保护带抑制带外泄漏导频子载波是系统能工作的关键。由于无线信道是时变的接收端必须知道每个子载波当前的信道状态幅度衰减和相位旋转才能正确解调。发送端会周期性地在某些固定的子载波位置上发送已知的导频符号。接收端通过比较接收到的导频符号和已知的发送导频符号就能估算出这些子载波位置的信道响应再通过插值算法估计出所有数据子载波的信道响应。这个过程就是信道估计。4. OFDM系统的阿喀琉斯之踵峰均比问题任何技术都有其代价OFDM最著名的“代价”就是高峰均功率比。这是一个让射频功放设计师头疼不已的问题。4.1 PAPR的成因多载波的相位叠加PAPR定义为信号峰值功率与平均功率的比值。在单载波系统中PAPR相对较低且稳定。但在OFDM中时域信号是多个独立调制的子载波的叠加。根据中心极限定理当子载波数量很大时时域信号的实部和虚部近似服从高斯分布其幅度则近似服从瑞利分布。这意味着时域信号会有很大的动态范围偶尔会出现远高于平均值的峰值。一个简单的例子想象一下如果所有子载波在某个时刻的相位都对齐指向同一个方向那么它们的幅度就会线性相加产生一个巨大的峰值。虽然这种情况概率不高但只要子载波数量够多在漫长的传输过程中几乎必然会出现。4.2 高PAPR带来的实际问题高PAPR对系统的影响是直接且严重的功放效率低下射频功率放大器通常工作在线性区才能保证信号不失真。为了容纳这些偶尔出现的峰值功放必须留有巨大的“回退”即平均工作功率要远低于其饱和功率。这导致功放的效率极低大部分能量变成了热量对于电池供电的终端设备是致命的。信号失真如果峰值超过了功放的线性范围就会产生非线性失真导致频谱再生带外辐射增加和带内失真误码率升高。这种失真会破坏子载波间的正交性引入载波间干扰。4.3 常见的PAPR抑制技术工程师们想出了各种办法来“削平”这些高峰限幅滤波最简单粗暴的方法。直接设定一个门限超过门限的峰值就被削掉。但这会引入带内失真和带外噪声。通常削幅后要跟一个带通滤波器来抑制带外辐射但滤波又会引起峰值再生需要迭代处理。选择性映射对同一组数据生成多个不同的OFDM符号例如对每个子载波引入不同的相位旋转序列然后选择其中PAPR最低的一个发送出去。接收端需要知道使用了哪种相位旋转序列才能正确解码。这种方法没有失真但增加了计算复杂度和边带信息。部分传输序列将输入数据块分成若干子块每个子块单独做IFFT然后对各个子块的IFFT结果进行加权组合寻找最优的加权因子以降低PAPR。原理和SLM类似。压扩变换在IFFT之前对数据符号进行一种非线性变换如μ律压扩降低大值提升小值从而在统计上降低PAPR。在接收端再进行反变换恢复。这种方法会影响所有信号而不仅仅是峰值。在实际的Wi-Fi或4G终端芯片中通常会采用多种技术的组合。例如先使用低复杂度的SLM或PTS进行初步优化再对残余的高峰进行轻微的、精心设计的限幅。调试功放线性度和PAPR性能是射频硬件工程师的日常工作。我曾参与的一个项目就因为早期忽视了PAPR问题导致终端在最大功率发射时耗电剧增且发热严重后期不得不重新选择功放器件并优化削波算法项目周期延误了好几个月。5. OFDM的同步难题时间与频率的精准捕捉OFDM系统对同步误差极其敏感这源于其内在结构。同步主要包括符号定时同步和载波频率同步。5.1 符号定时同步找到符号的起点接收端必须准确地知道每个OFDM符号从哪个采样点开始。定时偏差分为两种情况整数倍采样偏差相当于整个符号块发生了偏移。只要偏差在循环前缀长度内由于CP的循环特性不会破坏子载波正交性但会导致FFT窗口的相位旋转。这个相位旋转对所有子载波是一致的可以在信道均衡时一并补偿。小数倍采样偏差/定时漂移更为棘手。它相当于对信号进行了重采样会引入子载波间的干扰必须精确纠正。常用的定时同步方法基于循环前缀的自相关这是最经典的方法。利用CP是符号尾部副本的特性在接收信号中滑动窗口计算相隔N个样点的两个窗口的相关性。当滑动窗口对齐到CP起始位置时相关性会出现峰值。这种方法实现简单但精度受多径影响较大。基于训练序列的互相关在帧头或特定符号插入已知的训练序列前导码。接收端用本地存储的训练序列与接收信号做互相关寻找相关峰来确定符号起始。这种方法精度高抗多径能力强是主流方案。例如Wi-Fi的PLCP前导码就用于此目的。5.2 载波频率同步纠正“跑调”的载波发射机和接收机之间的晶振不可能完全一致会产生载波频率偏移。此外移动带来的多普勒效应也会引起频偏。CFO的危害极大破坏子载波正交性即使很小的CFO也会导致子载波间的能量泄漏产生严重的载波间干扰。相位旋转CFO还会引起采样点之间的相位连续旋转。CFO估计也分两步整数倍频偏会导致子载波索引整体偏移。例如偏移了2个子载波间隔那么接收端会把原本在第k个子载波上的数据误认为是在第k2个子载波上。这需要通过特殊的训练序列如具有特定梳状结构的频域序列来检测。小数倍频偏通常利用CP的自相关特性来估计。因为CP是重复的如果存在频偏相隔N点的两个相同片段之间会有一个固定的相位差这个相位差正比于CFO。通过计算这个相位差就能估计出小数倍CFO。在实际系统中同步是一个闭环过程先利用前导码进行粗同步包括粗定时和粗频偏估计然后在数据部分利用CP或导频进行持续的精细跟踪和校正。我调试接收机算法时最常看的就是同步模块输出的定时误差和频偏估计曲线。在低信噪比或高速移动场景下这条曲线如果跳动剧烈解调性能肯定会崩掉这时候就需要调整同步环路的带宽和算法参数了。6. OFDM在现实标准中的应用与演进OFDM不是停留在课本上的理论它已经深刻塑造了我们今天的无线世界。我们来看看几个关键标准中的OFDM。6.1 Wi-Fi从802.11a/g/n到ax/beWi-Fi是OFDM技术最成功的民用普及案例之一。802.11a/g (Wi-Fi 4的早期基础)在5GHz/2.4GHz频段使用OFDM子载波数52个其中48个数据子载波4个导频符号周期4微秒其中CP长度0.8微秒。它首次将Wi-Fi速率提升到54Mbps。802.11n (Wi-Fi 4)引入了MIMO技术与OFDM结合即MIMO-OFDM。通过多根天线同时发送多个空间流成倍提高数据速率。同时支持更短的CP0.4微秒和更宽的信道绑定40MHz。802.11ac (Wi-Fi 5)进一步扩展支持最高160MHz信道带宽更高阶的调制256-QAM以及更强大的多用户MIMO理论速率突破Gbps。802.11ax (Wi-Fi 6)这是一次重大革新。在OFDM的基础上引入了正交频分多址。传统的OFDM是给一个用户分配全部子载波在时间上共享。而OFDMA则将子载波资源块划分给多个用户同时使用极大地提升了多用户并发效率降低了延迟特别适合物联网和密集用户场景。Wi-Fi 6还引入了更长的符号周期12.8μs和更灵活的CP配置以更好地应对室外和多径环境。6.2 4G LTE与5G NR蜂窝网络的基石在蜂窝移动通信中OFDM同样扮演着核心角色。4G LTE的下行采用OFDMA。子载波间隔固定为15kHz根据信道带宽不同如20MHz使用1200个子载波。资源在时域时隙和频域子载波上被划分成一个个“资源块”灵活调度给不同用户。4G LTE的上行出于终端功放效率的考虑没有使用OFDMA而是采用了单载波频分多址。SC-FDMA在发射前先对信号做一次FFT使其在频域上具有类似OFDM的“单峰”特性从而获得了更低的PAPR节省了手机电量。5G NR为了支持更丰富的场景如毫米波、大规模物联网5G引入了灵活的参数集。子载波间隔不再是固定的15kHz而是可以缩放15, 30, 60, 120, 240 kHz。更大的子载波间隔对应更短的符号周期对相位噪声和多普勒频移的容忍度更高适合高频段和高移动速度场景。同时5G NR的帧结构也变得更加灵活。从Wi-Fi和蜂窝网络的演进可以看出OFDM本身也在不断发展。它从一个单纯的调制复用技术演变成一个灵活的空中接口资源调度框架。其核心思想——将宽频带划分为正交的窄带子信道——始终未变但围绕它构建的编码、多址接入、多天线技术则在持续革新。7. 动手实践用Python仿真一个简单的OFDM系统理论说了这么多不如动手写几行代码感受一下。下面我们用Python和NumPy来搭建一个极简的OFDM发射与接收链路忽略编码、交织等环节聚焦于核心过程。import numpy as np import matplotlib.pyplot as plt # 参数配置 N 64 # FFT/IFFT点数子载波总数 CP 16 # 循环前缀长度 N_data 48 # 实际用于传输数据的子载波数中间部分两边为保护带 pilot_interval 6 # 导频插入间隔 pilot_value 10j # 导频符号已知的BPSK符号 mod_order 4 # QPSK调制 (4) # 发射端 print(1. 发射端处理...) # 1.1 生成随机数据并QPSK调制 data_bits np.random.randint(0, 2, N_data * int(np.log2(mod_order))) # 将比特映射到QPSK符号00-(11j), 01-(1-1j), 10-(-11j), 11-(-1-1j) data_symbols 1 - 2*data_bits[0::2] 1j*(1 - 2*data_bits[1::2]) data_symbols / np.sqrt(2) # 归一化功率 # 1.2 构造频域OFDM符号IFFT输入向量 ofdm_freq np.zeros(N, dtypecomplex) # 放置数据子载波假设放在中间避免直流 data_indices np.arange(N//2 - N_data//2, N//2 N_data//2) ofdm_freq[data_indices] data_symbols # 1.3 插入导频在数据子载波中每隔几个插入一个已知符号 pilot_indices data_indices[::pilot_interval] for idx in pilot_indices: ofdm_freq[idx] pilot_value # 注意这里为了简单导频覆盖了原有数据位置。实际中会预留专门位置。 # 1.4 IFFT变换到时域 ofdm_time np.fft.ifft(ofdm_freq) * np.sqrt(N) # 乘以sqrt(N)保证功率不变 # 1.5 添加循环前缀 ofdm_symbol_with_cp np.concatenate([ofdm_time[-CP:], ofdm_time]) print(f 发射符号长度: {len(ofdm_symbol_with_cp)} (N{N} CP{CP})) # 信道模拟 print(\n2. 模拟多径信道...) # 简单模拟一个两径信道 channel_taps np.array([1.0, 0.3]) # 主径和一条弱反射径 channel_delay [0, 3] # 反射径延迟3个采样点 # 通过信道卷积 rx_signal np.convolve(ofdm_symbol_with_cp, channel_taps, modefull) # 截取到与发送长度一致忽略拖尾 rx_signal rx_signal[:len(ofdm_symbol_with_cp)] # 添加高斯白噪声 SNR_dB 25 signal_power np.mean(np.abs(rx_signal)**2) noise_power signal_power / (10**(SNR_dB/10)) noise np.sqrt(noise_power/2) * (np.random.randn(len(rx_signal)) 1j*np.random.randn(len(rx_signal))) rx_signal_noisy rx_signal noise print(f 信道模拟完成主径增益{channel_taps[0]}多径增益{channel_taps[1]}延迟{channel_delay[1]}采样点) # 接收端 print(\n3. 接收端处理...) # 3.1 同步这里理想同步精确去除CP rx_symbol_no_cp rx_signal_noisy[CP: CPN] # 3.2 FFT变换回频域 rx_freq np.fft.fft(rx_symbol_no_cp) / np.sqrt(N) # 3.3 信道估计使用导频 # 提取接收到的导频符号 rx_pilots rx_freq[pilot_indices] # 已知发送的导频符号全为 pilot_value tx_pilots np.full_like(pilot_indices, pilot_value, dtypecomplex) # 计算导频位置的信道响应 H_est_at_pilots rx_pilots / tx_pilots # 3.4 信道插值这里使用简单的线性插值实际会用更复杂的算法如MMSE # 对所有子载波索引进行插值 all_indices np.arange(N) # 使用numpy的插值函数 from scipy import interpolate # 分别对实部和虚部插值确保结果是复数 H_est_real interpolate.interp1d(pilot_indices, H_est_at_pilots.real, kindlinear, fill_valueextrapolate)(all_indices) H_est_imag interpolate.interp1d(pilot_indices, H_est_at_pilots.imag, kindlinear, fill_valueextrapolate)(all_indices) H_est H_est_real 1j*H_est_imag # 3.5 信道均衡迫零均衡 rx_freq_eq rx_freq / H_est # 3.6 提取数据子载波并解调 rx_data_symbols rx_freq_eq[data_indices] # 简单硬判决到最近的QPSK星座点 decision_table { (11j)/np.sqrt(2):0, (1-1j)/np.sqrt(2):1, (-11j)/np.sqrt(2):2, (-1-1j)/np.sqrt(2):3 } rx_bits [] for sym in rx_data_symbols: # 找到最近的星座点 distances [np.abs(sym - pt) for pt in decision_table.keys()] nearest_idx np.argmin(distances) nearest_pt list(decision_table.keys())[nearest_idx] # 将星座点映射回2个比特 val decision_table[nearest_pt] rx_bits.extend([(val1)1, val1]) # 假设映射00-0, 01-1, 10-2, 11-3 rx_bits np.array(rx_bits) # 性能评估 print(\n4. 性能评估...) ber np.sum(data_bits ! rx_bits[:len(data_bits)]) / len(data_bits) print(f 比特错误数: {np.sum(data_bits ! rx_bits[:len(data_bits)])}) print(f 误码率: {ber:.6f}) # 可视化 fig, axes plt.subplots(2, 3, figsize(15, 10)) # 发射频域符号 axes[0,0].stem(np.arange(N), np.abs(ofdm_freq)) axes[0,0].set_title(发射端频域符号 (含导频)) axes[0,0].set_xlabel(子载波索引) axes[0,0].set_ylabel(幅度) axes[0,0].grid(True) # 发射时域信号 (CP部分高亮) axes[0,1].plot(np.abs(ofdm_symbol_with_cp)) axes[0,1].axvspan(0, CP, alpha0.3, colorred, label循环前缀(CP)) axes[0,1].set_title(发射端时域信号 (含CP)) axes[0,1].set_xlabel(采样点) axes[0,1].set_ylabel(幅度) axes[0,1].legend() axes[0,1].grid(True) # 信道频率响应真实值与估计值 H_true np.fft.fft(channel_taps, N) # 真实信道频率响应 axes[0,2].plot(np.arange(N), np.abs(H_true), b-, label真实信道) axes[0,2].stem(pilot_indices, np.abs(H_est_at_pilots), r, markerfmtro, basefmt , label导频估计) axes[0,2].plot(np.arange(N), np.abs(H_est), g--, label插值后估计) axes[0,2].set_title(信道频率响应估计) axes[0,2].set_xlabel(子载波索引) axes[0,2].set_ylabel(幅度) axes[0,2].legend() axes[0,2].grid(True) # 接收均衡前后星座图 axes[1,0].scatter(rx_data_symbols.real, rx_data_symbols.imag, alpha0.6) axes[1,0].set_title(均衡前数据子载波星座图) axes[1,0].set_xlabel(同相分量 (I)) axes[1,0].set_ylabel(正交分量 (Q)) axes[1,0].grid(True) axes[1,0].axis(equal) # 理想发射星座图作为对比 axes[1,1].scatter(np.real(data_symbols), np.imag(data_symbols), alpha0.6) axes[1,1].set_title(发射端数据符号星座图 (理想)) axes[1,1].set_xlabel(同相分量 (I)) axes[1,1].set_ylabel(正交分量 (Q)) axes[1,1].grid(True) axes[1,1].axis(equal) # 误码对比前100个比特 axes[1,2].stem(np.arange(100), data_bits[:100], linefmtb-, markerfmtbo, basefmt , label发送比特) axes[1,2].stem(np.arange(100), rx_bits[:100], linefmtr--, markerfmtrx, basefmt , label接收比特) axes[1,2].set_title(前100个比特对比 (红叉表示错误)) axes[1,2].set_xlabel(比特序号) axes[1,2].set_ylabel(比特值) axes[1,2].legend() axes[1,2].grid(True) plt.tight_layout() plt.show()运行这段代码你可以直观地看到频域上数据符号和导频是如何排列的。时域上CP是如何被添加到符号前面的。经过一个简单的两径信道后信道频率响应如何变化以及我们如何通过少数几个导频点估计出整个信道的响应。均衡前后星座图的变化以及最终的误码情况。这个仿真忽略了很多实际因素比如同步、采样钟偏差、相位噪声、更复杂的信道模型和信道编码。但它提供了一个理解OFDM核心流程的绝佳起点。你可以尝试修改参数比如把CP长度改到小于多径延迟比如设为2看看误码率会如何飙升或者降低SNR观察信道估计误差如何影响性能。动手调一调比读十页书印象更深刻。
返回列表