我们如何在光 OFDM 中施加厄米对称性?

信息处理 OFDM
2022-02-02 23:40:13

我目前正试图围绕光学 OFDM。我正在阅读各种教程和文章,但在试图理解 Hermitian Symmetry 及其应用方式时遇到了障碍。我从本文的图 3 中获取 OFDM 系统的框图,并从输入到发射机逐步完成它。我最好一步一步地走,直到我感到困惑。

图 3 来自上述论文

第 1 步 - 串行到并行

为简单起见,我将跳过该论文中的“编码”和“交错”步骤。让我们从我们要发送的串行比特流开始:1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1、-1、1……等。

我们将其映射到并行比特流,每个子载波一个。在这个例子中,我使用了 4 个子载波,C1 到 C4。并行流现在是:

C1 C2 C3 C4
1 1 -1 -1
1 1 1 -1
1 -1 -1 -1
-1 1 -1 -1
-1 1 1 -1
-1 -1 1 1

第 2 步 - QAM 调制

调制每个子载波。这里我将使用 4-QAM。从我得到的每个子载波列中一次取 2 位:

C1 C2 C3 C4
1 +1j 1 +1j -1 +1j -1 -1j
1 -1j -1 +1j -1 -1j -1-1j
-1 -1j 1 -1j 1 +1j -1 +1j

第 3 步 - IFFT

这就是我的理解开始崩溃的地方。我知道对于“普通”OFDM,我们会将这些值传递给 IFFT 以生成时域 OFDM 信号。然而,我们到底向 IFFT 区块发送了什么?我们是否依次发送该表的每一行,即每个子载波在特定采样时间的值?

第 4 步 - Hermitian 对称

这就是我的理解真正崩溃的地方!我知道光 OFDM 需要纯实值时域 OFDM 信号。我还认为,如果 IFFT 块的输入具有“厄米对称”的属性,那么 IFFT 输出将是所需的真实信号。

Hermitian 对称被“强加”在 X k符号上,方法是确保:

X 0 = X N/2 = 0 和
X k = X * Nk对于 0 < k < N/2

其中 N 是 IFFT 长度,k 是运营商编号(我假设?)

我在这里的困惑是,如果我们必须“强制”某些运营商必须采用给定值(例如运营商 0 和运营商 N/2 必须等于 0),那么这不是以某种方式“覆盖”我们已应用的该运营商的值在 QAM 调制阶段?这似乎对我来说一定是错的,但我不明白为什么!

所以,为这个冗长的问题道歉,但只是为了澄清我在问我在第 3 步对 IFFT 的理解是否正确,以及当我们在 IFFT 之前将厄米对称性“强加”到我们的信号上时我们到底在做什么在第 4 步。

3个回答

我不明白你关于 IFFT 步骤的问题:就像在“正常”OFDM 中一样,你将一个完整的向量发送到 IFFT,因为这是向量的向量值运算。输出是(解释为)时域样本。

事实上,你真的不应该把第 3 步和第 4 步作为单独的操作,当然也不应该按照这个顺序:IFFT 的输入必须是厄米对称的才能产生一个实值信号(如果你需要不想实现一个正交上变频器来将您的信号混合到一个载波频率中,所以老实说,图 3 具有误导性,因为sin(2πfct)如果您确保您的 IFFT 输入是厄米对称的,那么分支就没有任何事情要做。)

我在这里的困惑是,如果我们必须“强制”某些运营商必须采用给定值(例如运营商 0 和运营商 N/2 必须等于 0),那么这不是以某种方式“覆盖”我们已应用的该运营商的值在 QAM 调制阶段?

不,您只是在混淆您正在做的事情:您不能随意为每个子载波分配任意值,您需要确保向量是厄米对称的。因此,您只有一半的子载波可以自由选择,另一个固有地设置为复共轭。

所以,你没有“覆盖”任何东西。您只是将 QAM 符号分配给一半的子载波。

Hermitian 对称被“强加”在 X k符号上,方法是确保:

x0=xN/2=0,xk=xNkk(k,N2)

根据这个定义,对于N奇怪,你可以选择N12的独立值xk,并且对于N甚至,你可以选择N21的独立值xk. 所以你不要选择N值,然后想知道如何处理额外的N2+1不适合的值——您只需从选择适合的值开始为了防止大脑爆炸,只需选择第一个这样的子载波,然后将较高频率的子载波设置为它们的复共轭。

但是,我要注意,要保持输出真实,您不必将第一个和最后一个子载波设置为零 - 您只需将它们的虚部保持为零。所以以使用两个不同的星座为代价,你可以选择

x0,xN/2R,xk=xNkk(k,N2)

请注意,这不一定是一个好主意——它增加了副载波生成的复杂性,并保持x0=0让您在接收器处对信号进行交流耦合,这反过来意味着您不必担心接收器中的直流偏置。但是,如果您想添加伴随的并发症,它就在那里。

(实际上,将导频音置于xN/2可能很有帮助)。

答案其实很简单。让我们考虑 N=32 的 IFFT 大小。为了确保IFFT运算的输出是实数值的(没有虚部的实数)。y=IFFT(x) IFFT 运算的输入(输入为 x)必须遵循以下安排: x(0)=0 x(N/2)=0 x(n)=conj(x(-n ))

Matlab 中的示例:

M = 16; 16-QAM 的百分比

IFFT_size = 32; % IFFT 大小

Nsc = IFFT_size/2-1;% 数据承载子载波数

数据=兰迪([0 M-1],Nsc,1);

x = qammod(数据,M);

x=[0;x(1:end);0;conj(x(end:-1:1))];

y=ifft(x);