⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rx_time_domain.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 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 + -