📄 rx_timed_to_freqd.m
字号:
function [freq_tr_syms, freq_data_syms, freq_pilot_syms] = rx_timed_to_freqd(time_signal, sim_options)
%freq_tr_syms % n_rx_antennas*52*2
%freq_data_syms % n_rx_antennas*48*n_data_syms
%freq_pilot_syms % n_rx_antennas*4*n_data_syms
global sim_consts;
[n_tx_antennas, n_rx_antennas] = get_n_antennas(sim_options);
for rx_ant = 1:n_rx_antennas
if ~sim_options.UseTxDiv
long_tr_syms = time_signal(rx_ant,1:2*64);
else
%注意在生成preamble时,如下所示,在符号定时后,去除了前16个样值,
%故两个接收天线上的长训练符号可以统一写作[time_signal(rx_ant,1:64) time_signal(rx_ant,81:144)]
% long_trs_signal(1,:) = sqrt(2)*[long_tr_symbol(64-16+1:64) long_tr_symbol ...
% zeros(1,80)];
% long_trs_signal(2,:) = sqrt(2)*[zeros(1,80) ...
% long_tr_symbol(64-16+1:64) long_tr_symbol];
long_tr_syms = [time_signal(rx_ant,1:64) time_signal(rx_ant,81:144)];
end
long_tr_syms = reshape(long_tr_syms, 64, 2);
%FFT转至频域
freq_long_tr = fft(long_tr_syms)/(64/sqrt(52)/sqrt(n_tx_antennas));
reorder = [33:64 1:32]; %与tx_freqd_to_timed.m对应。
freq_long_tr(reorder,:) = freq_long_tr;
% 提取训练训练符号的子载波
freq_tr_syms = freq_long_tr(sim_consts.UsedSubcIdx,:);
% Take data symbols 提去数据部分,去除preamble.
if ~sim_options.UseTxDiv
%注意数据部分前面有长训练符号,回忆在tx_gen_preamble.m中有
%if ~sim_options.UseTxDiv
%long_trs_signal = [long_tr_symbol(64-2*16+1:64) long_tr_symbol long_tr_symbol];
%else
% long_trs_signal(1,:) = sqrt(2)*[long_tr_symbol(64-16+1:64) long_tr_symbol ...
% zeros(1,80)];
% 由于定时是在CP之后,故只需跳过长训练符号,若没有使用发射分集,长训练符号长64×2=128;
%若使用了发射分集,需跳过的长度为64+80=144。
data_syms = time_signal(rx_ant,129:length(time_signal));
else
data_syms = time_signal(rx_ant, 145:length(time_signal));
end
data_sig_len = length(data_syms);
n_data_syms = floor(data_sig_len/80);
%使信号变成符号周期的整数倍
data_syms = data_syms(1:n_data_syms*80);
data_syms = reshape(data_syms, 80, n_data_syms);
% 移除循环前缀
data_syms(1:16,:) = [];
% FFT
freq_data = fft(data_syms)/(64/sqrt(52)/sqrt(n_tx_antennas));
%Reorder 格式为 [33:64 1:32]
freq_data(reorder,:) = freq_data;
%选择数据子载波 48个
freq_data_syms = freq_data(sim_consts.DataSubcIdx,:);
%选择导频子载波 4个
freq_pilot_syms = freq_data(sim_consts.PilotSubcIdx,:);
tmp_freq_tr(rx_ant,:,:) = freq_tr_syms;
tmp_data_syms(rx_ant,:,:) = freq_data_syms;
tmp_pilot_syms(rx_ant,:,:) = freq_pilot_syms;
end
freq_tr_syms = tmp_freq_tr; % n_rx_antennas*52*2
freq_data_syms = tmp_data_syms; % n_rx_antennas*48*n_data_syms
freq_pilot_syms = tmp_pilot_syms; % n_rx_antennas*4*n_data_syms
%keyboard
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -