www.gusucode.com > UWB_matlab源码程序 > CP0602/cp0602_link_budget.m

    %
% FUNCTION 6.2 : "cp0602_link_budget"
%
% Link budget for M-PAM and M-PPM UWB signals
%
% The function performs the link budget for an M-PAM and an
% M-PPM UWB signal for M = {2, 4, 8} and plots the maximum
% distance between transmitter and receiver as a function
% of data rate
%
% The function receives as input the antenna gains 'Gt' and
% 'Gr', the link margin in dB 'MargindB', the noise factor
% in dB 'FdB', the frequency vector 'f' in the range of
% interest [fl, fh], the transmitted PSD in the same
% frequency range 'PSD', and the requested symbol error
% probability 'Pre'
%
% The function returns as output a matrix containing the
% maximum distance for each value of M as a function of the
% rate Rb 
%
% Programmed by Luca De Nardis

function [dist_PAM, dist_PPM] =cp0602_link_budget(Gt,...
   Gr, MargindB, FdB, f, PSD, Pre)

% --------------------------
% Step Zero - Initialization
% --------------------------

dist=zeros(3,19);
Rb=linspace(20e6,200e6,19);  % values of the bit rate
M = [2 4 8];                 % values of M
F = 10^(FdB/10);             % conversion of the noise
                             % factor to linear units
Margin = 10^(MargindB/10);   % conversion of the link
                             % margin to linear units
k = 1.38e-23;                % Boltzmann constant [J/K]
T0 = 300;                    % standard temperature [K]
N0 = F*k*T0;                 % noise unilateral PSD [W/Hz]

% ----------------------------------------------
% Step One - Evaluation of maximum distance
% ----------------------------------------------

Eb_N0 = logspace(0.5,2);     % range of Eb/N0: 5-20 dB

for i=1:3
    % Evaluation of the EB/N0 for the two cases, M-PAM and
    % M-PPM
    % from Eqs.(6.31) and (6.33)
    Pr_M_PAM = 1;
    Pr_M_PPM = 1;
    j=1;
    while Pr_M_PAM > Pre
        Pr_M_PAM =(1-1/M(i))*erfc(sqrt(Eb_N0(j) * 3 *...
           log2(M(i))/(M(i)^2-1)));
        Eb_N0_PAM = Eb_N0(j);
        j=j+1;
    end
    j=1;
    while Pr_M_PPM > Pre
        Pr_M_PPM = exp(-0.5 * log2(M(i))*(Eb_N0(j) - 2 *...
           log(2)));
        Eb_N0_PPM = Eb_N0(j);
        j=j+1;
    end

    for k=1:19
        % Invoking Function 6.3
        dist_PAM(i,k) = cp0602_max_distance(Gt, Gr, f,...
           PSD,Margin, 1/Rb(k), N0, Eb_N0_PAM);
        % Invoking Function 6.3
        dist_PPM(i,k) = cp0602_max_distance(Gt, Gr, f,...
           PSD, Margin, 1/Rb(k), N0, Eb_N0_PPM);
    end
end

% ---------------------------
% Step Two - Graphical output
% ---------------------------

% Building a single matrix for all vectors
M_ary_Distance = [dist_PAM' dist_PPM']'
F=figure(2);
set(gcf,'DefaultAxesColorOrder',[0 0 0],...
   'DefaultAxesLineStyleOrder','-+|-o|-*|:s|:d|:^');
PT = plot(Rb/1e6,M_ary_Distance);
AX=gca;
set(AX,'FontSize',12);
X=xlabel('Data Rate [Mb/s]');
set(X,'FontSize',14);
Y=ylabel('Distance [m]');
set(Y,'FontSize',14);
axis([20 200 0 25]);
L= legend('2-PAM','4-PAM','8-PAM','2-PPM','4-PPM','8-PPM');
set(L,'FontSize',12);
text(100,15,'Pr_e = 10^{-3}','BackgroundColor',...
   [1 1 1],'FontSize',12);