📄 rx_convert_to_freq.m
字号:
function [freq_tr_syms, freq_data_syms] = rx_convert_to_freq(time_signal, SimulationParameters)
global SimulationConstants;
[n_tx_antennas, n_rx_antennas] = get_n_antennas(SimulationParameters);
fft_length=SimulationParameters.FFTPoints;
for rx_ant = 1:n_rx_antennas
% Long Training symbols
if SimulationParameters.TxDiv==0
long_tr_syms = time_signal(rx_ant,1:2*fft_length);
long_tr_syms = reshape(long_tr_syms, fft_length, 2);
elseif SimulationParameters.TxDiv==2
long_tr_syms = [time_signal(rx_ant,1:fft_length) time_signal(rx_ant,(fft_length+17):(2*fft_length+16))];
long_tr_syms = reshape(long_tr_syms, fft_length, 2);
elseif SimulationParameters.TxDiv==4
long_tr_syms = [time_signal(rx_ant,1:fft_length) time_signal(rx_ant,(fft_length+17):(2*fft_length+16)) time_signal(rx_ant,(2*fft_length+33):(2*fft_length+96)) time_signal(rx_ant,(2*fft_length+113):(4*fft_length+48))];
long_tr_syms = reshape(long_tr_syms, fft_length, 4);
end
%check if there is zero padding
if SimulationParameters.ZeroPad~=1
numdatasubc=1;
else
numdatasubc=SimulationConstants.NumDataSubc;
end
% to frequency domain
freq_long_tr = fft(long_tr_syms)/(fft_length/sqrt(numdatasubc))/sqrt(n_tx_antennas);
reorder = [(fft_length/2)+1:fft_length 1:fft_length/2];
freq_long_tr(reorder,:) = freq_long_tr;
% Select training carriers
freq_tr_syms = freq_long_tr;
%if there is a zeropad option
if SimulationParameters.ZeroPad==1
num_data_carriers=SimulationConstants.NumDataSubc;
x=fft_length-num_data_carriers;
freq_tr_syms=freq_tr_syms([x/2:x/2+num_data_carriers/2-1 ((x/2+num_data_carriers/2)+1):fft_length-(fft_length-num_data_carriers)/2],:);
end
% Take data symbols
if ~SimulationParameters.TxDiv
data_syms = time_signal(rx_ant,(2*fft_length)+1:length(time_signal));
elseif SimulationParameters.TxDiv==2
data_syms = time_signal(rx_ant, (2*fft_length+16)+1:length(time_signal));
elseif SimulationParameters.TxDiv==4
data_syms = time_signal(rx_ant, (4*fft_length+49):length(time_signal));
end
data_sig_len = length(data_syms);
n_data_syms = floor(data_sig_len/(fft_length+16));
% Cut to multiple of symbol period
data_syms = data_syms(1:n_data_syms*(fft_length+16));
data_syms = reshape(data_syms, (fft_length+16), n_data_syms);
% remove guard intervals
data_syms(1:16,:) = [];
%check if there is zero padding
if SimulationParameters.ZeroPad~=1
numdatasubc=1;
else
numdatasubc=SimulationConstants.NumDataSubc;
end
% perform fft
freq_data = fft(data_syms)/(fft_length/sqrt(numdatasubc))/sqrt(n_tx_antennas);
%Reorder pattern is [33:64 1:32]
freq_data(reorder,:) = freq_data;
%if there is a zeropad option
if SimulationParameters.ZeroPad==1
num_data_carriers=SimulationConstants.NumDataSubc;
x=fft_length-num_data_carriers;
freq_data=freq_data([x/2:x/2+num_data_carriers/2-1 ((x/2+num_data_carriers/2)+1):fft_length-(fft_length-num_data_carriers)/2],:);
end
tmp_freq_tr(rx_ant,:,:) = freq_tr_syms;
tmp_data_syms(rx_ant,:,:) = freq_data;
end
freq_tr_syms = tmp_freq_tr;
freq_data_syms = tmp_data_syms;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -