如果您想考虑模拟,可以将 OFDM 信号写为加权复正弦波的总和:
x(t)=∑k=0N−1Xkexp(j2πkfsNt),(1)
在哪里N是子载波的数量,fs是采样频率和Xk表示子载波值。对于数字实现,(1)在t=n/fs:
x(n/fs)=∑k=0N−1Xkexp(j2πknN),(2)
它对应于由 IFFT 实现的逆离散傅里叶变换 (IDFT)。IFFT有N输入值和N输出值。没关系,因为 IDFT 是 N 周期的,因此任何额外的样本都是多余的。因此,(1)中的每个子载波都表示为N样本,无论其在 OFDM 符号长度期间的周期数如何。
如果您尝试将数字 OFDM 时域信号想象为N采样正弦曲线,我认为您发布的数字有两个问题:
- 图像中的第一个子载波明显有频率fs/N第四个子载波有频率fs. 那是错误的。从 (1) 可以看出,第一个子载波应该有频率 0,第四个应该有频率(N−1)fs/N. 您可以对子载波重新排序(例如从负到正),但必须包括 DC 子载波,并且不得存在具有频率的子载波fs. (有人可能会争辩说,频率为 0 的子载波和fs实际上是相同的,但我认为这是插图的糟糕选择)
- 该图像仅显示正弦曲线的实部(或虚部)。这可能会给您一种印象,即采样时正在发生一些混叠。我稍后会解释我的意思。
请考虑我创建的下图

它包含来自的子载波k=0到k=3(线)及其样本(点)。它还显示了实部(蓝色)和虚部(红色)。现在考虑第一个和第三个子图中的红线:它们的样本完全相同。但是,蓝色(虚构)部分是不同的。那是,N=4这里的样本足以代表所有子载波。
这是我用来创建上图的 Matlab 代码:
N = 4; % num subcarriers
os = 128; % oversampling
t = linspace(0, 1-1/(N*os), N*os); % time
n = 0:N-1; % discrete time
figure;
cnt = 1; % helper
for k = 0:N-1;
subcarrier = exp(1i * 2*pi*k*t);
subplot(N,1,cnt);
plot( t, real(subcarrier), 'b-');
hold on;
plot( t(n*os+1), real(subcarrier(n*os+1)), 'b.', 'MarkerSize', 20);
plot( t, imag(subcarrier), 'r--');
hold on;
plot( t(n*os+1), imag(subcarrier(n*os+1)), 'r.', 'MarkerSize', 20);
if(k ~= N-1)
set(gca, 'XTick', []);
else
xlabel('t/T');
end
ylim([-1 1]);
title( sprintf('k=%d', k));
cnt = cnt + 1;
end