📄 rx_time_domain.m
字号:
% #####################################################################
% #### Matlab fixed point program for CP removal, FFT ###
% #### (OFDM demodulataion) and left and right GI removal. ###
% #### This function uses MEX vertion for FFT (fixed point) ###
% #####################################################################
% Input:
% ZoneConfig -- ZoneConfig structure
% TPparam -- TPparam structure
% d_v_time_inp -- Row vector. Noise and channel model added Tx
% signal of MS (RX signal of BS)
% TC -- on/off test case generation
% Output:
% d_v_freq_out -- Output data (Matrix [phy subcari, ofdma sym])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Property of Freescale
% Freescale Confidential Proprietary
% Freescale Copyright (C) 2005 All rights reserved
% ----------------------------------------------------------------------------
% $RCSfile: Rx_Time_Domain.m.rca $
% $Revision: 1.16 $
% $Date: Thu Feb 1 15:49:05 2007 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%-- Matlab files used by this file
% mCp_removal
% mGIRemove
% fpfft.m
%-- End of list
function [d_v_freq_out] = Rx_Time_Domain(ZoneConfig,TPparam,d_v_time_inp,AsyncPhyCtrl,ZoneD,TC)
if ~exist('TC')
TC=0;
end
% initialization
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Read system parameters of desired test case
ns = TPparam.SizeFFT; % Number of QAM samples per OFDM symbol(FFT order)
n_cp = TPparam.SizeCP; % Cyclic Prefix length(number of elements)
% processing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Remove cyclic prefix
fft512_inp = mCp_removal(d_v_time_inp,ns,n_cp,0);
% FFT computation
if TC
%fft512_out = fpfft(fft512_inp);
fft512_out = fpfft(fft512_inp,hex2dec('80000000'),1); %S, new vec gen
%fft512_out = fpfft(fft512_inp,hex2dec('00080000'),1);%M
else
fft512_out = fpfft(fft512_inp,hex2dec('00080000'),1);%test_ber
end
d_v_freq_out_withGuard = fft512_out; % before guard removal
%remove guard bands (and shift DC to the middle)-> guard removal is put
%into TP
d_v_freq_out = mGIRemove(d_v_freq_out_withGuard,ZoneConfig.NFFT,ZoneConfig.LGuard,ZoneConfig.RGuard);
%%%%%%%%%%%%%%%%%%%%%% test vector generation %%%%%%%%%%%%%%%%%%%%%%%%%%
if TC
%generate test vector directory
TCstr=sprintf('TC%03d',TC);
%SBX/SP/TP/UL/SPManager/vector/ref
if ~exist(['../vector/ref/',TCstr],'dir')
mkdir(['../vector/ref/',TCstr]);
end
if ~exist(['../vector/in/',TCstr],'dir')
mkdir(['../vector/in/',TCstr]);
end
%SBX/SP/TP/UL/SPKernel/fft(ref and in)
if ~exist(['../../SPKernel/FFT/vector/in/',TCstr],'dir')
mkdir(['../../SPKernel/FFT/vector/in/',TCstr]);
end
if ~exist(['../../SPKernel/FFT/vector/ref/',TCstr],'dir')
mkdir(['../../SPKernel/FFT/vector/ref/',TCstr]);
end
%SBX/SP/TP/UL/SPKernel/RemoveCP(ref and in)
if ~exist(['../../SPKernel/RemoveCP/vector/in/',TCstr],'dir')
mkdir(['../../SPKernel/RemoveCP/vector/in/',TCstr]);
end
if ~exist(['../../SPKernel/RemoveCP/vector/ref/',TCstr],'dir')
mkdir(['../../SPKernel/RemoveCP/vector/ref/',TCstr]);
end
%SBX/SP/TP/UL/SPKernel/GuardRemoveAndWrap(ref and in)
if ~exist(['../../SPKernel/GuardRemoveAndWrap/vector/in/',TCstr],'dir')
mkdir(['../../SPKernel/GuardRemoveAndWrap/vector/in/',TCstr]);
end
if ~exist(['../../SPKernel/GuardRemoveAndWrap/vector/ref/',TCstr],'dir')
mkdir(['../../SPKernel/GuardRemoveAndWrap/vector/ref/',TCstr]);
end
if ~exist(['../../../../../Manager/UL/CM/vector/ref/',TCstr],'dir')
mkdir(['../../../../../Manager/UL/CM/vector/ref/',TCstr]);
end
% FN=0;%frame number and this should be changed with the support of multiple fram
% ZN=0;%zone number and this should be changed with the support of multiple zone
FN=AsyncPhyCtrl.FrameNr;
ZN=ZoneD.ZoneNr;
AN=0;%antenna number and this should be changed with the support of multiple antenna
n=size(fft512_out,2);
%all demodulated OFDMA symbols after CP removal (IF3aRX)
for sym=1:n
%SBX/SP/TP/UL/SPManager/vector/ref
mGenBin(double(fft512_inp(:,sym)),...
sprintf('../vector/ref/%s/IF3aRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
%SBX/SP/TP/UL/SPKernel/FFT/in
mGenBin(double(fft512_inp(:,sym)),...
sprintf('../../SPKernel/FFT/vector/in/%s/IF3aRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
%SBX/SP/TP/UL/SPKernel/GuardRemoveAndWrap/ref
mGenBin(double(fft512_inp(:,sym)),...
sprintf('../../SPKernel/GuardRemoveAndWrap/vector/ref/%s/IF3aRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
end
%all OFDMA symbols after FFT (IF3bRX)
for sym=1:n
%SBX/SP/TP/UL/SPManager/vector/ref
mGenBin(double(fft512_out(:,sym)),...
sprintf('../vector/ref/%s/IF3bRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
%SBX/SP/TP/UL/SPKernel/RemoveCP/in
mGenBin(double(fft512_out(:,sym)),...
sprintf('../../SPKernel/RemoveCP/vector/in/%s/IF3bRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
%SBX/SP/TP/UL/SPKernel/FFT/ref
mGenBin(double(fft512_out(:,sym)),...
sprintf('../../SPKernel/FFT/vector/ref/%s/IF3bRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
end
%IF4RX
%all OFDMA symbols
n=size(fft512_inp,2);
N=size(d_v_time_inp,1)/n;
for sym=1:n,
%at SBX/SP/TP/UL/SPManager/vector/ref
mGenBin(double(d_v_time_inp(N*(sym-1) +1 : N*sym)),...
sprintf('../vector/ref/%s/IF4RX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
mGenBin(double(d_v_time_inp(N*(sym-1) +1 : N*sym)),...
sprintf('../vector/in/%s/IF4RX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
% at SBX\Manager\UL\CM\vector\ref
mGenBin(double(d_v_time_inp(N*(sym-1) +1 : N*sym)),...
sprintf('../../../../../Manager/UL/CM/vector/ref/%s/IF4RX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,sym-1,AN),...
'int16','1R1I');
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -