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

📄 init_fading_time.m

📁 这是一个关于ofdm在802.11协议下的源码
💻 M
字号:
% STMicroelectronics srl - AST
%
% Project  : Support IEEE MIMO channel model
% File name: init_fading_time.m
%
% Date       | Person              | Modification
% -----------|---------------------|------------------------------------------------
% 05/11/2003 | A. Poloni S. Valle  | v.01
% 18/11/2003 | A. Poloni S. Valle  | v.02 Bell+Spike shape included
%            |                     |      Bell Filter order 7 instead 8
function [FadingMatrixTime, FilterStatesOut, RandStateOut] = init_fading_time(FadingLength, ...
    NumberOfTxAntennas, ...
    NumberOfRxAntennas, ...
    NumberOfPaths, FadingType, ...
    FilterStatesIn, RandStateIn)

% [FadingMatrixTime, FilterStatesOut, RandStateOut]  = init_fading_time(FadingLength,
% FadingOversamplingFactor, NumberOfTxAntennas, NumberOfRxAntennas,
% NumberOfPaths, FadingType,FilterStatesIn, RandStateIn)
%
% Generates a matrix of fading coefficients of size
% (NumberofTxAntennas*NumberOfRxAntennas*NumberOfPaths) x
% FadingLength. The power Doppler spectrum
% of the fading coefficients can be bell-shaped 
% (with or without spike due to moving car).
%
% Inputs
%
% * Variable FadingLength, number of fading samples generated
%   per tap coefficient
% * Variable NumberOfTxAntennas, number of antenna elements
%   at Tx
% * Variable NumberOfRxAntennas, number of antenna elements
%   at Rx
% * Variable NumberOfPaths, number of taps of the PDP
% * Variable FadingType, type of the Doppler spectrum, which
%   can be bell_shape
% * Variable FilterStatesIn, filter initial condition, to preserve
%   continuity between consecutive calls
% * Variable RandStateIn, initial random generator state value
% Output
%
% * Variable FadingMatrixTime containing FadingLength samples of
%   NumberofTxAntennas * NumberOfRxAntennas * NumberOfPaths
%   independent fading processes exhibiting bell-shaped 
%   Doppler spectrum. Variance of each process is equal to one thanks 
%   to filter normalization.
% * Variable FilterStatesOut, filter final condition, to preserve
%   continuity between consecutive calls
% * Variable RandStateOut, final random generator state value

randn('state', RandStateIn);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                  FILTER DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Filter_Order = 7;

%Bell filter polynomial coefficients
%fd = 1/300 of the normalized frequency
NUM_B = [ 2.785150513156437e-004
    -1.289546865642764e-003
    2.616769929393532e-003
    -3.041340177530218e-003
    2.204942394725852e-003
    -9.996063557790929e-004
    2.558709319878001e-004
    -2.518824257145505e-005];
DEN_B = [   1.000000000000000e+000
    -5.945307133332568e+000
    1.481117656568614e+001
    -1.985278212976179e+001
    1.520727030904915e+001
    -6.437156952794267e+000
    1.279595585941577e+000
    -6.279622049460144e-002];
%Bell+Spike filter polynomial coefficients to be used with Model F 
%Bell-Spike shape applies to the 3rd tap fading coefficients;
%Bell shape applies to the other taps fading coefficients.
%fd = 1/300 of the normalized frequency
%fspike = 1/300*40/1.2 of the normalized frequency
NUM_S= [     7.346653645411014e-002
    -2.692961866120396e-001-3.573876752780644e-002i
    5.135568284321728e-001+1.080031147197969e-001i
    -5.941696436704196e-001-1.808579163219880e-001i
    4.551285303843579e-001+1.740226068499579e-001i
    -2.280789945309740e-001-1.111510216362428e-001i
    7.305274345216785e-002+4.063385976397657e-002i
    -1.281829045132903e-002-9.874529878635624e-003i];

DEN_S=[ 1.000000000000000e+000
    -4.803186161814090e+000-6.564741337993197e-001i
    1.083699602445439e+001+2.655291948209460e+000i
    -1.461669273797422e+001-5.099798708358494e+000i
    1.254720870662511e+001+5.723905805435745e+000i
    -6.793962089799931e+000-3.887940726966912e+000i
    2.107762007599925e+000+1.503178356895452e+000i
    -2.777250532557400e-001-2.392692168502482e-001i];


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                  FADING Generation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
switch FadingType
case 'bell_shape' % Indoor, bell shape Doppler spectrum
    
    Noise2Filter = sqrt(.5)*(randn(NumberOfTxAntennas*NumberOfRxAntennas*NumberOfPaths, FadingLength) ...
        + sqrt(-1)*randn(NumberOfTxAntennas*NumberOfRxAntennas*NumberOfPaths, FadingLength));
    
    [FadingMatrixTime, FilterStatesOut] = filter(NUM_B, DEN_B, Noise2Filter, FilterStatesIn, 2);
    
case 'bell_shape_spike' % Indoor, bell shape Doppler spectrum with spike 
    
    NumberOfAntennas = NumberOfTxAntennas*NumberOfRxAntennas;
    
    FilterStatesOut = zeros(Filter_Order, NumberOfAntennas*NumberOfPaths);
    
    SpikePos = 3; %tap with Bell+Spike shape
    %index of Bell shaped fading coefficients
    BellTapsPositions = [1:(SpikePos-1)*NumberOfAntennas ((SpikePos)*NumberOfAntennas+1):NumberOfAntennas*NumberOfPaths]; 
    %index of Bell+Spike shaped fading coefficients
    SpikeTapsPositions = [((SpikePos-1)*NumberOfAntennas+1):(SpikePos)*NumberOfAntennas];
    
    %generation of uncorrelated fading coefficients
    Noise2Filter = sqrt(.5)*(randn(NumberOfTxAntennas*NumberOfRxAntennas*NumberOfPaths, FadingLength)...
        + sqrt(-1)*randn(NumberOfTxAntennas*NumberOfRxAntennas*NumberOfPaths, FadingLength));
    
    %Bell shaped fading
    [FadingMatrixTimeBellTap, FilterStatesOut(:,BellTapsPositions)] =...
        filter(NUM_B, DEN_B, Noise2Filter(BellTapsPositions,:),FilterStatesIn(:,BellTapsPositions), 2);
    
    %Bell+Spike shaped fading
    [FadingMatrixTimeSpikeTap, FilterStatesOut(:,SpikeTapsPositions)] = ...
        filter(NUM_S, DEN_S,Noise2Filter(SpikeTapsPositions,:), FilterStatesIn(:, SpikeTapsPositions), 2);
    
    % Fading Matrix Time with bell+spike on the 3-rd tap
    FadingMatrixTime(BellTapsPositions,:) = FadingMatrixTimeBellTap;
    FadingMatrixTime(SpikeTapsPositions,:) = FadingMatrixTimeSpikeTap;
    
end;

RandStateOut = randn('state');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -