?? add_training.m
字號(hào):
function [transmit_signal, training] = add_training(transmit_signal,PrefixRatio,...
N_subc,N_used, Idx_used,cp_len, N_Tx_ant,N_tran_sym,CE_Method2)
% 1024點(diǎn)FFT的前導(dǎo)序列
% 多條天線的訓(xùn)練序列(同步幀),各兩個(gè)OFDM符號(hào)
training = zeros(N_subc,N_tran_sym,N_Tx_ant);
% 產(chǎn)生偽隨機(jī)序列,放在訓(xùn)練OFDM符號(hào)的導(dǎo)頻位置.
PN_seq = mseq(12, [1 2 7 9], ones(1,12), 14); % 參數(shù)先隨意選取,可以調(diào)整
PN_seq = 2*PN_seq - 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if N_subc== 64
Repeat = 4; % 為保證在時(shí)域上重復(fù)Repeat次, 在頻域上兩個(gè)有數(shù)據(jù)的子載波間插(Repeat-1)個(gè)零
else Repeat = 8;
end
% 產(chǎn)生第1個(gè)訓(xùn)練OFDM符號(hào)
for ant = 1:N_Tx_ant
real_part = PN_seq( (ant-1)*N_Tx_ant + 1,1:N_used/Repeat ); % 截取PN序列
imag_part = PN_seq( (ant-1)*N_Tx_ant + 2,1:N_used/Repeat );
tran_tmp1 = sqrt(Repeat/2) * ( real_part + j * imag_part );
tmp1 = [ tran_tmp1 ; zeros( Repeat - 1 , N_used/Repeat ) ];
tmp2 = reshape(tmp1, N_used, 1);
tmp3 = [ tmp2(1:N_used/2) ; flipud(tmp2(N_used/2 + 1:end))];
training(Idx_used,1,ant) = tmp3;
end
if N_Tx_ant == 1 % 單天線情況
% 產(chǎn)生第2個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放偽隨機(jī)序列
tran_tmp1 = PN_seq( 3,1:N_used ); % 截取PN序列
training(Idx_used,2,ant) = tran_tmp1;
% 第3個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放和第2個(gè)OFDM符號(hào)的相同的偽隨機(jī)序列
training(Idx_used,3,ant) = tran_tmp1;
elseif N_Tx_ant == 2 % 多天線情況
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 此處根據(jù)不同的多天線信道估計(jì)算法,修改得到不同的訓(xùn)練序列
if CE_Method2 == 1 % 直接使用LS方法
% 第1條天線的第2,3個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放偽隨機(jī)序列
training(Idx_used,2,1) = PN_seq( 5 ,1:N_used );
% training(Idx_used,3,1) = PN_seq( 6 ,1:N_used ) + i*PN_seq( 7 ,1:N_used );
training(Idx_used,3,1) = exp(-j*2*pi*cp_len.*[0:N_used-1]/N_used);
% 第2條天線的第2,3個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放偽隨機(jī)序列
training(Idx_used,2,2) = PN_seq( 8 ,1:N_used );
% training(Idx_used,3,2) = PN_seq( 9 ,1:N_used ) + i*PN_seq( 10 ,1:N_used );
training(Idx_used,3,2) = exp(-j*2*pi*2*cp_len.*[0:N_used-1]/N_used);
% 第2條天線的第2,3個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放和第1條天線有如下關(guān)系的序列:
% x2 = x1 * (-1)^k ; k 為子載波號(hào)
%training(Idx_used,2,2) = training(Idx_used,2,1).*(-1).^Idx_used';
%training(Idx_used,3,2) = training(Idx_used,3,1).*(-1).^Idx_used';
elseif CE_Method2 == 2
% 第1條天線的第2個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放偽隨機(jī)序列
tran_tmp1 = PN_seq( 5 ,1:N_used ); % 截取PN序列
training(Idx_used,2,1) = tran_tmp1;
% 第1條天線的第3個(gè)訓(xùn)練OFDM符號(hào), 放全零序列
training(Idx_used,3,1) = zeros(N_used,1);
% 第2條天線的第2個(gè)訓(xùn)練OFDM符號(hào), 放全零序列
training(Idx_used,2,2) = zeros(N_used,1);
% 第2條天線的第3個(gè)訓(xùn)練OFDM符號(hào), 在使用的子載波上放偽隨機(jī)序列
tran_tmp1 = PN_seq( 6 ,1:N_used ); % 截取PN序列
training(Idx_used,3,2) = tran_tmp1;
end
elseif N_Tx_ant == 4 % 多天線情況
training(Idx_used,1,1) = PN_seq( 1 ,1:N_used );
training(Idx_used,1,2) = PN_seq( 2 ,1:N_used );
training(Idx_used,1,3) = PN_seq( 3 ,1:N_used );
training(Idx_used,1,4) = PN_seq( 4 ,1:N_used );
training(Idx_used,2,1) = PN_seq( 5 ,1:N_used );
training(Idx_used,2,2) = PN_seq( 6 ,1:N_used );
training(Idx_used,2,3) = PN_seq( 7 ,1:N_used );
training(Idx_used,2,4) = PN_seq( 8 ,1:N_used );
training(Idx_used,3,1) = PN_seq( 9 ,1:N_used );
training(Idx_used,3,2) = PN_seq( 10 ,1:N_used );
training(Idx_used,3,3) = PN_seq( 11 ,1:N_used );
training(Idx_used,3,4) = PN_seq( 12 ,1:N_used );
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 產(chǎn)生時(shí)域訓(xùn)練序列
syn_frame = sqrt(N_subc) * ifft( fftshift( training , 1 ) );
cp = syn_frame(N_subc - cp_len + 1:N_subc ,:,:);
training_frame = [cp;syn_frame];
training_frame = reshape(training_frame,[1, (N_subc + cp_len)*N_tran_sym ,N_Tx_ant]);
transmit_signal = [ training_frame transmit_signal ];
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -