如何在 MATLAB 上使用 DFT、调制和重采样的正频率实现 IDFT?

信息处理 自由度 调制
2022-02-03 22:42:38

这个问题是DFT 向量上的线性算子如何仅使用一半 DFT 向量产生相同向量的讨论的延续?,如果有兴趣,可以更好地解释更高层次的动机。

问题:

如何从 Hermitian 对称 DFT 向量中取正频率,取其 IDFT(这是复数),乘以载波以移动频谱,重新采样,取其实部,并获得与原始厄米对称符号的 IDFT 会得到什么结果?

细节:

我真的很感激能检查我的理解和我提到的概念。

考虑某个信号 Hz 的带宽。如果我考虑由正频率(从直流到奈奎斯特)表示的信号,它与移动频谱的正侧并将其集中在频率 0 相同。现在,新频谱不再是厄米对称的,产生复杂的 IDFT 并表示的带宽。XBB2

使用一个数值示例,对于,考虑从 DC 到 Nyquist,这将给出 5 个正频率和 3 个负频率。然后,我会将 5 个 DFT 样本(对应于正频率)移动到频谱的中心。在这种情况下,新的 DFT 大小将是奇数,奈奎斯特频率(在 k= 5/2 = 2.5 处)不会落在 DFT 样本上N=8

此时,我的信号带宽限制为然后,如果我将此信号与频率为的载波相乘,我会将频谱再次移动到正负侧,从而重建原始频谱。但是,由于此操作会将带宽增加到 Hz,因此乘积需要将其采样频率增加 2 倍,以便频谱实际上可以表示没有混叠的信号。B2B2Bx[n]c[n]

载体应该是指数的:

c[n]=ej2πnk0/N
其中是要移位的 DFT 样本数。在这种情况下,,这样: k0k0=N2
c[n]=ejπn

最后,在重新采样之后,我应该取信号的实部,这应该等于原始的 IDFT(通过对原始厄米对称符号的 IDFT 进行简化获得的部分)。

但是,我主要对以下问题感到困惑:

  • 从 DC 到 Nyquist 有 5 个 DFT 样本。这将产生一个大小为 5 的复杂 IFFT,然后,我将逐点乘以 5 个载波样本并上采样 2,得到 10 个样本。另一方面,原始 IDFT 的长度为 8。
  • 我不确定参与真实部分的理由。
  • 我不确定指数是否是正确的载体。

MATLAB实现:

这是我试图使工作的代码。

N=4;
A=rand(N-1,1) + j*rand(N-1,1); % Random positive carrier
X=[0; A; 0; flipud(conj(A))]; % Hermitian symmetric DFT vector

x = ifft(X)

% Positive side of the spectrum shifted to the center
Xp = [X((N/2 + 1):N+1); X(1:N/2);];

% Complex IFFT:
xp = ifft(Xp);

% Carrier
n=(0:N);
k0 = (N+1)/2;
carrier = exp(j*2*pi*k0*n/(N+1)).';

% Modulation
x_up = xp.*carrier;

% Increase the sampling rate by a factor of two
x_re = resample(x_up,2,1); 

real(x_re)

我基本上希望打印到工作区的两个向量相等:x and real(x_re)

1个回答

如果有帮助,这是具有正常和正频率的 IDFT:

N=4;
A=rand(N-1,1) + j*rand(N-1,1);   % Random positive carrier
X=[0; A; 0; flipud(conj(A))];    % Hermitian symmetric DFT vector
Xp=[0; 2*A; 0; zeros(size(A))];  % Positive freq only DFT vector

x = ifft(X);         % Normal IDFT
xa = ifft(Xp);       % Analytic signal
xp = real(ifft(Xp)); % Same as normal IDFT