如何使用 GNURadio 控制 OFDM 中的带宽

How to control bandwidth in OFDM using GNURadio

我正在尝试使用 GNURadio 在 20/40/80 和 160 MHz 带宽下模拟 802.11 OFDM 信号,从 ofdm_tx.grc example.

开始

使用此示例,只需将 sample_rate 增加到 20M,我就可以轻松生成 20 MHz 的信号。但是我需要帮助生成更高带宽的模式。

据我了解,带宽是由信号中的子载波数量和采样率决定的。进一步的研究告诉我,对于 802.11n 40 MHz 模拟信道,我应该使用:

随着更改这些变量,我将 occupied_carriers、pilot_carriers 和导频符号修改为以下内容:

occupied_carriers = (range(-57,-51) + range(-50,-21) + range(-20,-7) + range(-6,0)+range(1,7)+range(8,21) + range(22,50) + range(52,57),)
pilot_carriers = ((-51,-21,-7,7,21,51),)
pilot_symbols = ((1, 1, 1, -1,1,1),)

我还从 ofdm_carrier_allocator 块中删除了 sync_words。

在这些更改之后,我得到了一个 40 MHz 宽的输出,但它更像是一个 802.11b 形状(比正方形更像高斯),如 this image 中所示。

显然我遗漏了一些重要的东西,但我一直无法弄清楚是什么。

澄清一下,我不关心发送的数据,我只想产生正确形状和带宽的信号。 此外,为了输出信号,我首先使用示例代码将数据写入文件,然后使用 gnuradio 将该文件直接写入 USRP x300(UBX-160)。

如能提供有关 OFDM 调制过程的任何帮助或说明,我们将不胜感激。 谢谢

您走在正确的道路上 - OFDM 系统的占用带宽就是采样率定义的全部带宽。

因此,40 MS/s 将提供 40 MHz 的带宽。

为了获得正确的频谱形状,即正确的子载波间距和旁瓣行为,您还必须将子载波数量加倍(在 OFDM 中,这只是 (I)DFT/(I)FFT 的长度)并修改信道掩码,以便中心载波和最重要的正确数量的边缘载波仍未使用。

这当然意味着每个 OFDM 符号还需要更多的数据符号。

现在,你显然没有看到你想看到的东西——它甚至看起来非常像在那里发生的模拟事情。为排除这种可能性,我建议您将发送给 USRP 的样本保存到文件中并进行分析。如果他们的数字频谱是正确的,则说明您遇到了硬件或测量问题。 我的第一个猜测是数据不足,即您的 PC 向 USRP 发送数据时速度太慢的情况,这会导致不连续。

我知道我错过了一些简单的东西。

在对 usrp-users 邮件列表进行快速讨论后,我从 Marcus D. Leech 那里得到了答案,我需要在将数据发送到 usrp 之前以数字方式对数据进行上采样。

http://lists.ettus.com/pipermail/usrp-users_lists.ettus.com/2018-May/056519.html

通过在将数据写入文件之前将有理重采样器添加到流程图中,我将采样率从 40 提高到 100 MS/s。然后 X300 能够产生美妙的 40 MHz 信号。