Bonjour a tous,
Comment écrire un programme matlab pour trouver le réseau reciproque d'un système cubique?
-----
14/08/2007, 16h34
#2
invite45591d4a
Date d'inscription
janvier 1970
Messages
8
Re : programme matlab
Tu pourrais détailler un peu ton probléme stp : quelles données de départ as-tu, connais-tu les equations de passage qui permettent d'acceder au réseau réciproque etc... Analyse un peu plus ton problème et donne nous les résultats de ta réflexion, on sait pas forcément ce que c'est ton histoire de réseau réciproque...
18/08/2007, 17h13
#3
invited5d0e38d
Date d'inscription
janvier 1970
Messages
1
Re : programme matlab
Bonjour à tous
J'ai un programme en matlab qui simule la CSMA/CA de Wifi, (en mode event-driven), mais j'arrive pas a voir s'il donne des bons resultas ou non.
Merci de m'aider svp
voici le programme
NB lorsque le DIFS=0 les resultats sont bons, ailleurs c'est la galere
%Event-driven program
function CSMA
clc;
mu=input('Voulez vous utiliser le programme avec les valeur dentree standarts? oui-> Tapez 1, non->Tapez 2 : ');
if (mu==2)
N=input('Tapez le valeur de stations: ');
Tmax=input('Tapez le valeur de Temps de simulation: ');
DIFS=input('Tapez le valeur de DIFS: ');
Tslot=input('Tapez le valeur de Time slot: ');
Wmin=input('Tapez le valeur de Wmin: ');
Wmax=input('Tapez le valeur de wmax: ');
T=input('Tapez le valeur du temps de transmision de packet: ');
else
N=3
Tmax = 500
DIFS = 2;
Tslot = 1;
T=30; %longueur de packet/debit canal
Wmin = 4; %minimal value of the contention Window
Wmax = 8;%max value
end
W=ones(1,N)*Wmin;
Etat=zeros(1,N); %0:idle, 1:transmission, 2: collision
Backoff=floor(Wmin*rand(1,N)); % on tire les backoff initiaux
Time=0;
PreviousTime=0; % instant du dernier evénement
Ntt=0; % Nombre de transmissions
Nts=0; % Nombre de transmissions réussies
Nc=0; % Nombre de situations de collision
Nexteventtime=zeros(1,N); % instant du prochain evénement pour chaque mobile
Nexteventtype=zeros(1,N); % type du prochain evénement 0:transmission 1:fin de trans.
Nexteventtime=Time+Tslot*Backo ff; % le prochain evénement de chaque mobile est sa première transmission.
AllEventtime = Nexteventtime;
AllStates = Etat;
AllBackoffs = Backoff;
while (Time<Tmax)
PreviousTime=Time; % on enregistre le dernier instant traité
Time=min(Nexteventtime); % on se place à linstant du prochain événement
Posi=find(Nexteventtime==Time) ; %on récupère la liste des mobiles concernés
Nposi=length(Posi); %on récupère leur nombre
if (Nexteventtype(Posi)==0) % sil y a une ou plusieurs transmissions
Ntt=Nposi+Ntt;
% Mise à jour des données de Posi
Etat(Posi)=1; % les mobiles de Posi passent en etat transmission
AllStates = [AllStates ; Etat ];
Posi2=find(Etat==1 | Etat==2); % on cherche les transmissions en cours
if (length(Posi2)>1) % sil y a déjà des transmissions en cours
Etat(Posi2)=2; % tout le monde passe en état collision
AllStates = [AllStates ; Etat ];
Nc=Nc+1;
end %if
Nexteventtype(Posi)=1; % le prochain even. de Posi est une fin de trans.
Nexteventtime(Posi)=Time+T; % la fin de trans a lieu T plus tard
AllEventtime = [AllEventtime ; Nexteventtime];
Backoff(Posi)=0; % le backoff de ceux qui commencent à transmettre =0
AllBackoffs = [AllBackoffs ; Backoff ];
Backoff(find(Etat==0))=Backoff (find(Etat==0))-(Time-PreviousTime)/Tslot; % les mobiles idle voient leur backoff décrémenté.
AllBackoffs = [AllBackoffs ; Backoff ];
Nexteventtime(find(Etat==0))=T ime+T+DIFS+Backoff(find(Etat== 0))*Tslot;
AllEventtime = [AllEventtime ; Nexteventtime];
elseif (Nexteventtype(Posi)==1) %si cest une fin de transmission
% display('err1');
% display(Nposi);
% display(Etat(Posi));
if (Nposi==1 & Etat(Posi)==1) % fin de transmission réussie
Nts=Nts+1;
W(Posi)=Wmin; % on reinitialize la fenêtre de contention
elseif (Nposi>1 | (Nposi==1 & Etat(Posi)==2)) % fin de collision
W(Posi)=min(Wmax,2*W(Posi)); % la fenêtre est doublée
end %if
Etat(Posi)=0; %les mobiles Posi repassent en idle
AllStates = [AllStates ; Etat ];
Backoff(Posi)=floor(W(Posi).*r and(1,Nposi)); % on retire le backoff des mobiles Posi
AllBackoffs = [AllBackoffs ; Backoff ];
Nexteventtype(Posi)=0; % le prochain événement est une transmission
Nexteventtime(Posi)=Time+DIFS+ Backoff(Posi)*Tslot;
AllEventtime = [AllEventtime ; Nexteventtime];
else
disply('err');
end %if
end %while
Nc
Ntt
Nts
Nexteventtime