📄 st_coding.m
字号:
function st_coded = st_coding( mod_sym,N_Tx_ant,N_data_sym,ST_Code)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 发送分集 , 2发或4发
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[N_subc,N_sym] = size(mod_sym);
st_coded = zeros(N_subc,N_data_sym,N_Tx_ant);
% 如果有发送分集
if N_Tx_ant ~= 1
% 使用空时分组码
if ST_Code == 1
st_coded = zeros(N_subc,N_sym, N_Tx_ant);
if (mod(N_sym,N_Tx_ant))
error('空时编码器输入符号不匹配,子程序st_coding出错');
else
for n = 1:N_sym/N_Tx_ant
% 一次送入空时编码器的OFDM符号有N_Tx_ant个
coded_tmp = stbc_code_TX( mod_sym( :,(n-1)*N_Tx_ant+1 : n*N_Tx_ant ) );
% coded_tmp的结构: 每列代表一条天线发出的数据,有N_Tx_ant*N_subc
% 个样点, N_Tx_ant个不同时刻;一共有N_Tx_ant列,代表不同天线的数据
% 转化为st_coded的结构:有 N_subc行, 代表不同时间OFDM符号的N_Tx_ant列,
% 矩阵第三维为N_Tx_ant个,代表不同天线的数据
if N_Tx_ant == 2
for ant = 1:N_Tx_ant
tmp = reshape(coded_tmp(:,ant), N_subc, N_Tx_ant);
% 把调整后的符号块,放在输出符号的相应位置
% 进行发送天线功率的归一化
st_coded(:, (n-1)*N_Tx_ant+1:n*N_Tx_ant ,ant) = tmp/sqrt(N_Tx_ant);
end
elseif N_Tx_ant == 4
for ant = 1:N_Tx_ant
tmp = reshape(coded_tmp(:,ant), N_subc, N_Tx_ant*2);
% 把调整后的符号块,放在输出符号的相应位置
% 进行发送天线功率的归一化
st_coded(:, (n-1)*N_Tx_ant*2+1:n*N_Tx_ant*2 ,ant) = tmp/sqrt(N_Tx_ant);
end
end
end
end
% 使用分层空时码
elseif ST_Code == 2
for ant = 1:N_Tx_ant
% 注意:一定要进行发送天线功率的归一化!
st_coded(:,:,ant) = mod_sym(:,ant:N_Tx_ant:N_sym)/sqrt(N_Tx_ant);
end
end
% 如果没有发送分集
else
st_coded = mod_sym;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -