我正在尝试研究和理解 OFDM,在 MATLAB 中编码 OFDM 时,我遇到了这个问题:
假设我们有 Numsymbol = 256 和 dataqpsk 我们使用的数据,我面临的问题是,当我逐块执行 iFFT 时,这似乎没问题,但是当试图使其 N-by-N .. 这给出了一个问题。
这是步骤。现在我将按块制作 iFFT:
clear all; clc;
N_carrier = 256; % number of carrier
N_symbol = 256; %number of symbols
N_FFT = 256; %length of FFT
N = N_carrier;
L_cp = N/4; % the CP
dataqpsk = rand(N_carrier,N_symbol); %Example for modulated data
size(dataqpsk);
for isij=1: N_symbol
% input modulated data
dataqpsk1=dataqpsk(:,isij);
size(dataqpsk1)
D_map = dataqpsk1;
%% doing such mapping
D_IFFT_fore=zeros(N_FFT,1);
D_IFFT_fore(1:(N/2)) = [D_map(((N/2)+1):N)];
D_IFFT_fore((N_FFT-((N/2)-1)):N_FFT) = [D_map(1:(N/2))];
D_IFFT_aft=N_FFT.*ifft(D_IFFT_fore,N_FFT);%×÷ifft
%add GI and interpolation.
D_cp=[D_IFFT_aft(N_FFT-L_cp+1:N_FFT);D_IFFT_aft];
end
但是现在当我尝试将其设置为 DFT N-by_N 时,我没有得到,如下所示:
clear all; clc;
N_carrier = 256; % number of carrier
N_symbol = 256; %number of symbols
N_FFT = 256;
N = N_carrier;
L_cp = N/4; %CP
dataqpsk = rand(N_carrier,N_symbol);
size(dataqpsk);
D_map = dataqpsk;
D_IFFT_fore=zeros(N_FFT,N_FFT);
D_IFFT_fore(1:(N/2)) = [D_map(((N/2)+1):N)];
D_IFFT_fore((N_FFT-((N/2)-1)):N_FFT) = [D_map(1:(N/2))];
D_IFFT_aft = N_FFT.*ifft(D_IFFT_fore,N_FFT); % ifft
D_cp(1:L_cp,1:N_FFT)=D_IFFT_aft(N_FFT-L_cp+1:N_FFT,1:N_FFT);
问题是当尝试获得 DFT N-by_N 的结果时,我从 D_IFFT_fore(1:(N/2)) = [D_map(((N/2)+1):N)]; 的步骤中得到。零矩阵!
请问,有什么帮助吗?
谢谢你
谢谢亲爱的msm,这是完整的代码:
clear all; clc;
N_carrier = 256; % number of carrier
N_symbol = 256; %number of symbols
N_FFT = 256;
N = N_carrier;
L_cp = N/4; %CP
dataqpsk = rand(N_carrier,N_symbol);
size(dataqpsk);
D_map = dataqpsk;
D_IFFT_fore=zeros(N_FFT,N_FFT);
D_IFFT_fore(1:(N/2),:) = [D_map(((N/2)+1):N,:)];
D_IFFT_fore((N_FFT-((N/2)-1)):N_FFT,:) = [D_map(1:(N/2),:)];
D_IFFT_aft = N_FFT.*ifft(D_IFFT_fore,N_FFT); % ifft
D_cp(1:L_cp,1:N_FFT)=D_IFFT_aft(N_FFT-L_cp+1:N_FFT,1:N_FFT);
再次感谢