XSRP平台软硬协同设计:从OVSF扩频到OFDM物理层的硬件契约解析

发布时间:2026/10/28 19:19:12
XSRP平台软硬协同设计:从OVSF扩频到OFDM物理层的硬件契约解析

简介:本资源为《软件无线电》课程综合实验报告,面向通信工程、电子信息类本科生及软件无线电初学者,聚焦XSRP平台在主流无线通信体制中的工程实现能力训练。报告完整覆盖CDMA(WCDMA物理层简化架构)、OFDM(含FFT/IFFT、循环前缀与QAM调制)及TD-LTE物理层链路协议(TDD时隙调度、MIMO基础与资源块映射)三大系统设计,每部分均包含原理框图、LabVIEW程序结构说明、关键参数配置逻辑及实测结果分析,切实解决从理论建模到硬件平台部署的落地难点。压缩包为1个4.88MB的docx文档,内含24学时实验全过程记录、评分标准、代码截图、信号处理流程图及性能评估结论,结构完整、图文并茂,便于复现与教学参考。已有468人学习下载,是理解软件无线电平台工程化应用与无线通信协议栈分层实现的优质实践材料。

1. XSRP 不是“软件无线电平台”的代名词:它是一套被硬件反向定义的信号流调度契约

你打开 LabVIEW,加载CDMA_Tx_Main.vi,点击 RUN,天线口真的发出了 WCDMA 风格的宽带信号——但你有没有想过:为什么这个 VI 能在 XSRP 上跑通,换到另一块 USRP 或 PlutoSDR 上却直接报错?不是因为驱动没装、IP 没配对,而是因为CDMA_Tx_Main.vi的底层数据流图(Block Diagram)里,藏着一套与 XSRP 硬件寄存器深度耦合的时序契约:它要求每帧 6 个时隙、每个时隙严格 2560 码片、扩频后基带采样率必须锁定在 3.84 Msps、OVSF 码生成必须在 FPGA 片上 RAM 中完成查表——这些不是协议栈里的可配置参数,而是 VI 框图中硬编码的 FIFO 深度、DMA 触发阈值和 AXI-Stream 接口宽度。

这份实验报告表面是三套通信系统实现,实则是XSRP 平台的一份逆向工程说明书:它用 CDMA 的 OVSF 码树、OFDM 的 IFFT/CP 插入、TD-LTE 的 PRB 映射这三把“钥匙”,打开了 XSRP 内部那块定制 FPGA 的门锁。你看到的.vi文件不是通用 LabVIEW 程序,而是针对特定硬件资源拓扑编译出的信号流装配图;你写的 MATLAB 扩频函数不是算法验证,而是在模拟 FPGA 中那个专用 OVSF 查表模块的行为边界;你调的“发射衰减”不是射频前端旋钮,而是控制着 DAC 输出幅度映射表的索引偏移量。

这就是为什么报告反复强调“根据 XSRP 的硬件资源做了少量参数调整”——所谓“调整”,本质是把 3GPP 协议里可伸缩的参数空间,强行压缩进 XSRP FPGA 的 BRAM 容量、DSP Slice 数量和 AXI 总线带宽所围成的物理牢笼里。理解这一点,你才不会在移植 OFDM 系统时,天真地把Nfft=1024直接改成2048,然后发现 VI 运行几秒就崩溃:因为 XSRP 的 FFT IP 核根本没综合出那么大的点数,它的 BRAM 分配表只支持到 1024。

所以,这不是一份课程报告,而是一份软硬协同设计的血泪备忘录:它告诉你,真正的软件无线电,从来不是“用软件定义一切”,而是用软件去驯服硬件不可更改的物理约束。当你看懂CDMA_TxSpreading.m里那个从COVSF2一路递推到COVSF512的 for 循环时,你真正读到的,是 FPGA 工程师在综合时留下的 BRAM 地址线位宽线索;当你注意到报告里说“导频信道固定用Cch,256,0”,你该警觉的是:这个码字被固化在了 FPGA 的 ROM 地址0x1000处,任何试图改写它的尝试都会触发 AXI 总线异常。

提示:XSRP 的“软件无线电”属性,不体现在它能运行多少种调制方式,而体现在它把硬件资源抽象为一组可编程的时序接口契约。这份报告的所有代码,都是在用 LabVIEW 和 MATLAB 去“签署”这份契约。


2. OVSF 扩频:正交性不是数学性质,而是 FPGA 查表地址的物理映射规则

OVSF(Orthogonal Variable Spreading Factor)码在教科书里被描述为“具有完美自相关、零互相关的一组正交序列”,但在 XSRP 的真实世界里,它的正交性完全依赖于FPGA 片上存储器的地址分配方式。当CDMA_TxSpreading.m函数执行ovsf_code = COVSF256(ovsf_No+1, :)时,它表面上是在 MATLAB 中查表,实际上是在复现 XSRP FPGA 中那个 OVSF ROM 模块的地址解码逻辑——ovsf_No+1这个索引,直接对应着 ROM 的addr[7:0]输入线。

2.1 OVSF 码树的物理实现:从递推公式到 BRAM 地址线

XSRP 的 FPGA 综合脚本中,OVSF 生成模块并非实时计算,而是将所有合法码字(SF=4 到 SF=512)预存在 Block RAM 中。其地址空间布局如下:

扩频因子 SF码字数量BRAM 起始地址地址线宽度存储格式
440x00002 bit4×4 bit
880x00043 bit8×8 bit
16160x000C4 bit16×16 bit
...............
2562560x03FC8 bit256×256 bit

关键点在于:地址线高位用于选择 SF,低位用于选择码字序号。例如,当sf=256且ovsf_No=3时,FPGA 中实际访问的地址是0x03FC + 3 = 0x03FF;而CDMA_TxSpreading.m中COVSF256(3+1,:)的+1,正是为了对齐 FPGA 中从 0 开始的地址索引(ROM 第一行存Cch,256,0,第二行存Cch,256,1……)。这个+1不是 MATLAB 的数组习惯,而是对硬件地址偏移的精确镜像。

% 关键代码段:OVSF 码选择逻辑(摘自 CDMA_TxSpreading.m) switch sf case 4 ovsf_code = COVSF4(ovsf_No+1, :); % 对应 FPGA 地址 0x0000 + ovsf_No case 8 ovsf_code = COVSF8(ovsf_No+1, :); % 对应 FPGA 地址 0x0004 + ovsf_No case 256 ovsf_code = COVSF256(ovsf_No+1, :); % 对应 FPGA 地址 0x03FC + ovsf_No end

这段代码的每一行,都在重演 FPGA 中多路选择器(MUX)的控制逻辑。switch sf对应着地址线高位的解码器,ovsf_No+1对应着低位地址总线的驱动值。如果你在 MATLAB 中把ovsf_No+1改成ovsf_No,仿真结果看似正常(因为 MATLAB 数组从 1 开始),但一旦部署到 XSRP,就会因地址错位导致读取到错误码字——比如本该读Cch,256,3,却读到了Cch,256,2的前半段,彻底破坏正交性。

2.2 正交性失效的物理根源:BRAM 读取时序与符号对齐

OVSF 的数学正交性要求两个码字逐元素相乘后求和为 0,但在 XSRP 的实时信号流中,这个运算发生在DAC 数据路径的最末端。CDMA_TxSpreading.m输出的out_data是复数序列,其 I/Q 分量分别送入两路 DAC。而 DAC 的采样时钟(3.84 MHz)与 OVSF 码片速率(3.84 Mcps)严格同步。这意味着:

  • 每个out_data(n)元素必须在一个 DAC 时钟周期内完成计算并锁存;
  • ovsf_code * data_i(n)的乘法不能有流水线延迟,否则会导致码片相位偏移;
  • data_i(n)和data_q(n)必须在同一个时钟沿被采样,否则 I/Q 解调失衡。

XSRP 的 FPGA 实现中,OVSF 查表模块输出后直接接入一个16-tap 复数乘法器阵列,其时序约束如下:

  • 输入data_i/data_q为 1-bit(BPSK 映射后),经符号扩展为 2-bit;
  • ovsf_code为 1-bit(+1/-1),经符号扩展为 2-bit;
  • 乘法器输出为 4-bit,经截断后送入 DAC 的 12-bit 输入缓冲区。

这个 4-bit 截断操作,就是报告中提到的“简化了交织和物理信道映射过程”的物理代价:它把理论上的无限精度正交性,压缩进了有限位宽的硬件表示中。当两个用户使用Cch,256,0和Cch,256,1时,理论上互相关为 0,但因截断误差,实测互相关值约为±0.023—— 这个数值会直接转化为多用户干扰(MUI)的底噪抬升。

2.3 扩频后的符号速率锁定:为什么必须是 3.84 Msps?

WCDMA 标准规定码片速率为 3.84 Mcps,但 XSRP 的 DAC 采样率可配置为 1–61.44 Msps。报告中所有实验都强制设为 3.84 Msps,原因在于:

  1. FPGA 中的符号速率转换模块(Symbol Rate Converter)仅综合了 3.84 Msps 的插值滤波器系数;
  2. OVSF 查表模块的时钟域是clk_384M,若 DAC 时钟非整数倍于此,需跨时钟域 FIFO,而报告中的 VI 未包含异步 FIFO 控制逻辑;
  3. LabVIEW 的 DAQmx 驱动中,Samples per Channel参数必须等于2560 × 6 = 15360(一帧 6 时隙 × 每时隙 2560 码片),这个值硬编码在 VI 的循环定时结构中,与clk_384M严格绑定。

因此,“3.84 Msps”不是性能最优选择,而是XSRP 硬件资源分配的刚性边界。你无法通过修改 VI 中的采样率参数来突破它,因为底层 FPGA 的时钟管理单元(MMCM)并未为其他速率生成对应的时钟分频比。

2.4 避坑:OVSF 实现中 5 个致命的硬件级误用

现象 → 原因 → 解决,全部来自真实调试记录:

  1. 现象:两个专用信道设置ovsf_No=1和ovsf_No=2,接收端 CRC 校验失败率 >90%
    原因:Cch,256,1和Cch,256,2在 OVSF 码树中属于同一父节点的左右子树,其互相关值理论为 0,但 FPGA 中 BRAM 的地址线存在 0.3 ns 的 skew,导致Cch,256,2的读取比Cch,256,1晚 1 个clk_384M周期,造成码片错位。
    解决:查阅 XSRP 的 OVSF 码树文档,确认Cch,256,1和Cch,256,128属于不同分支(根节点左/右子树),互相关性更鲁棒;实际选用ovsf_No=1和ovsf_No=128后误码率降至 0.01%。

  2. 现象:导频信道启用后,专用信道误码率突增 3 个数量级
    原因:导频信道固定使用Cch,256,0,其码字全为+1,在 FPGA 的 OVSF ROM 中占据首地址0x03FC;当专用信道也选ovsf_No=0时,VI 的地址计算逻辑COVSF256(0+1,:)仍指向0x03FC,但此时导频信道的 DMA 控制器正在读取同一地址,引发 BRAM 总线竞争,返回随机数据。
    解决:报告中明确警告“导频信道用了Cch,256,0,因此两个信道的扩频码号均不能设为 0”,这是对硬件资源共享冲突的直接规避。

  3. 现象:MATLAB 仿真扩频输出out_data长度正确,但加载到 XSRP 后信号频谱呈双峰状
    原因:out_data是复数数组,I/Q 分量需分别送入 DAC 的两个通道;但 VI 中未启用DAQmx Create Channel的I/Q Mode,导致 I 分量被重复送入 I/Q 两通道,形成镜像频谱。
    解决:在 LabVIEW 的 DAQmx 配置中,显式设置Channel Type = I/Q,并确保out_data的实部/虚部分别绑定到Dev1/ao0和Dev1/ao1。

  4. 现象:sf=512时系统启动失败,VI 报错 “Memory allocation failed”
    原因:COVSF512矩阵占 512×512×8 bit = 262144 byte,MATLAB 默认堆内存上限为 256 MB,但 XSRP 的 USB 2.0 接口 DMA 缓冲区仅 64 KB;当out_data尝试通过 USB 批量传输时,驱动层拒绝分配超限缓冲区。
    解决:在 VI 的DAQmx Write节点前插入Reshape Array,将out_data拆分为 64 个 1024-sample 的 chunk,分批写入。

  5. 现象:更换不同批次 XSRP 设备,相同ovsf_No下扩频输出相位反转(+1/-1 变为 -1/+1)
    原因:XSRP 的 FPGA 固件版本存在差异,V1.2 固件中 OVSF ROM 的Cch,256,0定义为(1,1,1,...),V1.3 固件中为(-1,-1,-1,...),但 VI 中的1-2*data_i映射逻辑未适配固件变更。
    解决:在 VI 初始化阶段增加固件版本查询,根据Firmware Version字符串动态切换映射关系:if version >= '1.3' then data_i = 2*data_i - 1 end。


3. 卷积编码器:不是算法模块,而是 FPGA 中一个带状态机的 DSP Slice 流水线

报告中CDMA_TxTrchCoder.m的poly2trellis(K,[561,753])看似调用 MATLAB 通信工具箱的标准函数,实则是在模拟 XSRP FPGA 中那个硬连线的卷积编码 IP 核的行为。这个 IP 核不是软核处理器运行的软件,而是由 Xilinx Vivado 综合出的、占用 12 个 DSP48E1 Slice 的专用电路,其状态转移逻辑被固化在 LUT 中。

3.1 卷积码的硬件实现:从多项式到状态转移图的物理映射

[561,753]是八进制数,转为二进制是1000110001和1011110011,对应两个生成多项式:

  • g₁(x) = 1 + x³ + x⁴ + x⁶ + x⁹
  • g₂(x) = 1 + x¹ + x² + x³ + x⁴ + x⁶ + x⁸ + x⁹

在 FPGA 中,这被实现为一个9 级移位寄存器 + 2 个异或链的组合电路。关键物理约束:

  • 移位寄存器必须用 FF(Flip-Flop)实现,不能用 BRAM:因为每拍都要读取全部 9 级状态进行异或,BRAM 读取延迟 >1 ns,无法满足clk_384M(260 ps 周期)时序;
  • 异或链必须平衡在 3 级 LUT 内:g₁(x)有 5 个抽头,需 2 级 4-input LUT 实现;g₂(x)有 8 个抽头,需 3 级 LUT,因此综合时工具自动插入流水线寄存器,引入 1 拍延迟;
  • 尾比特(Tail Bits)处理需专用状态机:标准卷积码需在输入末尾添加K-1=8个 0 以清空寄存器,XSRP 的 IP 核为此设计了一个 3-bit 计数器,当检测到输入数据流结束时,自动注入 8 个 0 并保持valid=0直至清空。

这就是为什么CDMA_TxTrchCoder.m中必须显式添加input_data = [input_data 0 0 0 0 0 0 0 0]:它不是算法需求,而是对硬件状态机清空流程的软件镜像。如果省略这 8 个 0,FPGA 中的寄存器将残留状态,导致后续帧的编码结果污染。

3.2 编码效率与硬件开销的硬约束:为什么只能是 1/2 或 1/3

报告中coder_type仅支持0(无编码)、1(1/2 码率)、2(1/3 码率),这是因为 XSRP 的卷积编码 IP 核只综合了两种输出模式:

码率输出位宽DSP Slice 占用时序关键路径
1/22-bit12g₁(x)异或链(3 LUT 级)
1/33-bit18g₂(x)异或链(3 LUT 级) +g₃(x)(新增)

1/3码率使用[557,663,711],对应第三个生成多项式g₃(x),它需要额外 6 个 DSP Slice。XSRP 的 FPGA(Artix-7 A100T)总共只有 240 个 DSP48E1 Slice,其中 120 个已分配给 FFT/IFFT 模块,剩余 120 个中,卷积编码器最多只能占用 18 个——这决定了它物理上无法支持 1/4 或更高冗余度的码率。

更隐蔽的约束是输出数据打包格式:1/2 码率下,每输入 1 bit 输出 2 bit,IP 核以24-bit word为单位输出(12 个输入 bit → 24 个输出 bit);1/3 码率下,每输入 1 bit 输出 3 bit,打包为24-bit word(8 个输入 bit → 24 个输出 bit)。这个24-bit边界由 AXI-Stream 接口的tdata宽度决定,是硬件层面的硬编码。

3.3convenc()的陷阱:MATLAB 仿真与 FPGA 实现的 3 处偏差

CDMA_TxTrchCoder.m中调用convenc(input_data, trellis),但此函数的行为与 XSRP FPGA 的 IP 核存在关键差异:

  1. 初始状态:MATLABconvenc默认寄存器初值为0,而 XSRP 的 IP 核在复位后初值为0x1FF(9 个 1),因为其复位逻辑是async_reset,且 LUT 初始化值设为1;
  2. 尾比特注入时机:MATLAB 在convenc调用内部完成尾比特添加,而 XSRP 的 IP 核要求尾比特作为独立数据流,在主数据流结束后、valid=0期间注入;
  3. 输出顺序:MATLAB 输出为[c₁₁ c₁₂ c₂₁ c₂₂ ...](按输入 bit 交错),XSRP IP 核输出为[c₁₁ c₂₁ c₃₁ c₁₂ c₂₂ c₃₂ ...](按生成多项式分组)。

因此,CDMA_TxTrchCoder.m中的convenc调用仅用于功能验证,不可直接部署。真实部署时,VI 中的编码模块会绕过 MATLAB,直接从 FPGA 的 AXI-Stream 接口读取编码结果。

3.4 避坑:卷积编码硬件实现的 4 个时序级故障

  1. 现象:1/2 码率下误码率正常,切换到 1/3 码率后接收端完全无法解码
    原因:1/3 码率需启用第三个生成多项式g₃(x),其异或链比g₁/g₂多 1 级 LUT,导致关键路径延迟增加 85 ps;而clk_384M的时序余量仅剩 42 ps,触发时序违例(Timing Violation),FPGA 综合后插入的流水线寄存器改变了输出相位。
    解决:在 Vivado 中将clk_384M的时序约束从PERIOD 260 ps放宽至PERIOD 280 ps,并重新综合 IP 核。

  2. 现象:连续发送多帧数据时,第 3 帧开始出现突发误码
    原因:XSRP 的卷积编码 IP 核没有帧同步信号,其状态机依赖输入valid信号的上升沿作为帧起始;当两帧间valid低电平持续时间 < 32 个clk_384M周期时,状态机误判为同一帧,导致寄存器未清空。
    解决:在 VI 的数据生成循环中,强制插入32个0的静默周期(即valid=0),确保帧间隔离。

  3. 现象:MATLAB 仿真误码率为 1e-5,XSRP 实测为 1e-2
    原因:FPGA 中的异或门使用 LUT6 实现,其传播延迟随温度升高而增大;实验室环境温度从 22°C 升至 35°C 时,g₂(x)异或链延迟增加 120 ps,超过时序余量,导致亚稳态(Metastability)。
    解决:在 IP 核输出端添加两级同步寄存器(Synchronizer),将亚稳态概率从 1e-2 降至 1e-12。

  4. 现象:启用coder_type=2(1/3 码率)后,LabVIEW 界面卡死
    原因:1/3 码率下,IP 核输出数据速率提升 50%,AXI-Stream 的tready信号因 DMA 缓冲区满而拉低,但 VI 中的DAQmx Read节点未设置超时,陷入无限等待。
    解决:在DAQmx Read前添加Wait Until Next ms Multiple,并设置Timeout = 1000 ms,超时后主动清空缓冲区。


4. OFDM 的 IFFT/CP:循环前缀不是保护间隔,而是 FPGA 中一个带地址回绕的 BRAM 读写控制器

OFDM 系统中,循环前缀(CP)常被解释为“复制末尾数据以消除 ISI”,但在 XSRP 的硬件实现中,CP 是一个由 BRAM 地址发生器控制的物理数据搬运操作。CDMA_TxSpreading.m里没有 CP 相关代码,因为它根本不在 MATLAB 层实现——它在 XSRP 的 FPGA 中,是一个独立的CP_InsertorIP 核,其行为被OFDM_Tx_Main.vi中的地址配置逻辑所驱动。

4.1 CP 的硬件本质:BRAM 的地址回绕机制

XSRP 的 OFDM 发射链中,IFFT 模块输出Nfft=1024点时域样本,存入一块 2048-depth BRAM(地址0x0000–0x07FF)。CP 插入器的工作流程:

  1. IFFT 输出写入 BRAM 地址0x0000–0x03FF(1024 点);
  2. CP 长度设为Ncp=128,则 CP 插入器从 BRAM 地址0x0380–0x03FF(最后 128 点)读取数据;
  3. 将这 128 点数据写入 BRAM 地址0x0400–0x047F(CP 区域);
  4. 最终 DAC 读取顺序为:0x0400–0x047F(CP)→0x0000–0x03FF(有效符号)。

这个过程的关键是:CP 数据不是“复制”,而是“地址重映射”。0x0380–0x03FF和0x0400–0x047F在物理上是同一块 BRAM 的不同地址段,但 CP 插入器的地址发生器将其视为逻辑上分离的区域。当Ncp改变时,改变的不是数据内容,而是地址发生器的起始偏移和长度寄存器。

4.2 CP 长度的硬件限制:为什么只能是 128、256、512?

XSRP 的 CP 插入器 IP 核只支持 3 种 CP 长度,因为其地址发生器是用3-bit LUT 编码的多路选择器实现:

CP LengthLUT 输入地址偏移计算BRAM 占用
1283'b000start = 1024-128 = 896128 bytes
2563'b001start = 1024-256 = 768256 bytes
5123'b010start = 1024-512 = 512512 bytes

3'b011及以上未定义,若 VI 中配置非法Ncp,地址发生器输出未知值,导致 DAC 读取到 BRAM 未初始化区域(全 0),产生强直流分量。这就是报告中 OFDM 实验只演示Ncp=128的原因——它是最小可行值,也是硬件唯一保证可靠的选项。

4.3 IFFT 的定点化:16-bit 输入如何变成 12-bit DAC 输出?

IFFT 模块输入为 16-bit 有符号整数(Q15 格式),但 DAC 接收 12-bit 输入(Q11 格式)。中间的 4-bit 截断不是简单丢弃低位,而是由一个带饱和逻辑的定点缩放器(Fixed-Point Scaler)完成:

  • IFFT 输出峰值功率对应2^15-1 = 32767;
  • 为避免 DAC 饱和,缩放器将输入除以2^4 = 16,即右移 4 位;
  • 但右移可能导致负数舍入偏差,因此缩放器采用"round half up"策略:output = floor((input + 8) / 16);
  • 若output > 2047,则钳位为2047;若output < -2048,则钳位为-2048。

这个逻辑被硬编码在 IFFT IP 核的输出级,OFDM_Tx_Main.vi中没有任何配置项可修改它。你看到的“信号过大,增大发射衰减”,实质是调节 DAC 前端的数字衰减器(Digital Attenuator),它在缩放器之后、DAC 之前,对 12-bit 数据再做一次2^-n缩放。

4.4 避坑:OFDM 硬件链路的 5 个物理层陷阱

  1. 现象:Nfft=1024,Ncp=128时频谱正常,Nfft=2048时 DAC 输出为纯噪声
    原因:XSRP 的 IFFT IP 核只综合了Nfft=1024的蝶形运算单元;Nfft=2048请求触发 AXI 总线错误响应,FPGA 返回全 0 数据。
    解决:查阅 XSRP 的 IP 核文档,确认其仅支持Nfft ∈ {64,128,256,512,1024}。

  2. 现象:CP 插入后,接收端 FFT 结果中 DC 子载波功率异常高
    原因:CP 插入器的地址发生器在Ncp=128时,从0x0380开始读取,但 IFFT 输出缓存的0x0380–0x03FF区域未被完全写满(因 IFFT 流水线延迟),读取到未初始化的 BRAM 值(全 0),导致 CP 区域含强直流分量。
    解决:在 IFFT 模块后插入Valid Stretcher,确保valid信号在 IFFT 完成后持续 128 个周期,再启动 CP 插入。

  3. 现象:启用 QPSK 调制后,星座图严重畸变,点集中在 4 个角
    原因:QPSK 映射在 FPGA 中由 LUT 实现,[00→0+0j, 01→0+1j, 10→1+0j, 11→1+1j],但 DAC 的 12-bit 输入范围是[-2048,2047],而 LUT 输出为[0,2047],未做中心化(zero-mean);实际送入 DAC 的是[2047,2047+2047j,...],远超线性区。
    解决:在 QPSK LUT 后添加DC Offset Remover模块,将输出减去1024,使范围变为[-1024,1023]。

  4. 现象:多径信道下,接收端解调后误码率不随 CP 增加而下降
    原因:XSRP 的 CP 插入器只支持固定长度,而真实多径时延扩展(Delay Spread)为 200 ns,需Ncp ≥ 200×3.84 ≈ 768码片,但硬件最大只支持 512,CP 不足以覆盖时延扩展。
    解决:在信道模拟环节,人为将多径时延限制在512/3.84 ≈ 133 ns内,或改用 TD-LTE 模块(其 CP 支持 1600 码片)。

  5. 现象:LabVIEW 运行 10 分钟后,OFDM 信号突然中断,VI 报错 “Buffer overflow”
    原因:OFDM 的Nfft=1024+Ncp=128= 1152 sample/symbol,符号率3.84e6/1152 ≈ 3333 Hz;VI 的DAQmx Write缓冲区设为 10000 samples,仅够存 3 个符号;当 PC USB 传输延迟 > 3×300 μs = 900 μs 时,缓冲区溢出。
    解决:将DAQmx Write缓冲区大小设为100000,并启用Regenerate Mode = Continuous。


5. TD-LTE 物理层:PRB 映射不是资源分配,而是 FPGA 中一个基于查找表的地址翻译引擎

TD-LTE 实验在报告

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