CommentCaMarche
Recherche
Posez votre question Signaler

Programmes en matlab sur le SNR

nidaaf - Dernière réponse le 9 juin 2009 à 22:15
Bonjour,
ma problème c'est comment faire un programmes en matlabe sur le signal sur bruit SNR, ainsi que sur la densité spectrale de puissance dsp est cela au niveau d'un modulateur sigma delta.
merci.
Lire la suite 
Réponse
+4
moins plus
ce programme sous Matlab peut vous aider (simulation d'un rs:ofdm codée par rs /ber en fonction de Eb/N0)
et la prochaine fois je vous donne snr)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% start_simulateur.m %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------------récupération des paramètres du GUI----------------%
% codage de canal
%----------------%


%code_rate_RS=188/204; % utilise ligne 224
code_rate_RS=1 %rate_RS=188/204; ou 1 :(pas de codage) % sinon utlise 227
code_rate_conv=1;% Taux de code 0.5; 2/3; 3/4; 5/6; 7/8; 1(pas de code).
%type_decodage= 'soft'; % Type de d´ecodage : ’soft’ ou ’hard’.
type_decodage='hard';
entrelac_conv =0;% get(handles.check_entrelac_conv,’Value’); % 1=entrelacement
%entrelac_RS =1;%get(handles.check_entrelac_RS,’Value’); % 0: pas d’entrelacement.

% canal
%------%
%caract_canal=[str2num(get(handles.edit_tmax,’String’)),str2num(get(handles.edit_trms,’String’))];
ntau_max=2*390; %en nano-secondes
ntau_rms=2*50;
caract_canal= [ntau_max ntau_rms] ; % valeur numérique pour canal expon sinon A, B, ...

%long_prefixe =0;% sans cyclique préfixe.
long_prefixe =800e-9; % Longueur du préfixe cyclique.

vect_Eb_N0_dB=[0:2:20]; % Vecteur contenant les Eb/N0.
numfig=1;

vitesse= 0; %v/3.6; vitesse de déplacement (entre en km/h)
%SIR_dB=10;
%vect_interferences=[1 , SIR_dB, 0];
%flag_interf=1;
%type_interf=1;
vect_interferences=zeros(1,3);
flag_interf=0;
type_interf=0;

val_offset_freq=0;
%str2num(get(handles.edit_offset,’String’))*1000; %offset fr´equentiel (entr´e en kHz)

% diversité
%----------%
Nt=1; %str2num(get(handles.edit_Nt,’String’)); % Nombre d’antennes `a l’´emetteur.
Nr=1; %str2num(get(handles.edit_Nr,’String’)); % Nombre d’antennes au r´ecepteur.

% estimation
blind=1; %get(handles.check_blind,’Value’); % Blind à l´emetteur (1) ou non (0).
%-----------%
vect_erreurs_canal=zeros(1,3);

%if (get(handles.radio_estimation,’Value’)==1)
nb_blocs_pilotes= 1;% str2num(get(handles.edit_nb_blocs_pilotes,’String’));
if (nb_blocs_pilotes<=0)
str_error_1='Le nombre de blocs pilotes doit être >=1.'
str_error_2=' Modifiez le paramètre et relancez.';
errordlg(strcat(str_error_1,str_error_2));
end

vect_estimation_canal=zeros(1,3);

% modulation
%-----------%

N= 64; % Nombre de porteuses 16,..64,..,128,..,256,..,512,..1024.
choix_const=2;% Nb. de bits par constellation : 1,2,4,6 ou 8.
vect_reduction_calculs(1)=1; % Taux de r´eduction calculs. ex : 2 calcul d’une porteuse sur 2

%num_poids=1; % =get(handles.popup_poids,’Value’);
%switch num_poids
% case Le critère utilisé pour le calcul des poids de beamforming
%type_poids='sum-ber';
%type_poids='max-mse';
%type_poids='sum-mse'; % sum-mse; prd-mse ; max-mse = min-snr
type_poids='hrm-snr';

%case 2 % prd-snr ; sum-ber ;hrm-sin
%type_poids='prd-mse';
%case 3

%case 4
%type_poids='prd-snr';
%case 5
%case 6
%

% data
%------%
%if (get(handles.check_taille_paquets_aleat,’Value’))
taille_paquets_aleat=0;
taille_paquets=376;
%affichage =get(handles.check_affichage,’Value’); % Affichage des figures (1 ou 0).
affichage=1;

%---------------programmation d´efensive----------------%
if ((code_rate_conv*code_rate_RS)<1 & taille_paquets_aleat)
str_error_1= 'Un code correcteur et une taille de paquets al´eatoire est incompatible. ';
str_error_2=' Modifiez un des deux param`etres et relancez.';
errordlg(strcat(str_error_1,str_error_2));
break;
end
if ((Nt<=0)|(Nr<=0))
str_error_1='Il faut au moins une antenne au récepteur et une antenne `a l’’émetteur ! ';
str_error_2=' Modifiez les param`etres en cons´equence et relancez.';
errordlg(strcat(str_error_1,str_error_2));
break;
end
if (code_rate_RS~=1 & (taille_paquets~=376 | choix_const~=2 | N~=64))
str_error_1='Le codage de R-S n’’est implémenté que pour des paquets de 376 blocs QPSK sur 64 porteuses. ';
str_error_2=' Modifiez les param`etres n´ecessaires et relancez.';
errordlg(strcat(str_error_1,str_error_2));
break;
end
if (code_rate_RS==1 & entrelac_RS)
str_error_1='L’’entrelacement externe sans codage de R-S n’’a aucune utilité et n’’est pas implémenté. ';
str_error_2='Il ne sera par cons´equent pas pris en compte dans la simulation. Pressez OK et enter pour continuer.';
warndlg(strcat(str_error_1,str_error_2));
end
%end programmation défensive.


global s2 s4 s16 s64 s256 c2 c4 c16 c64 c256 surech_fact Ts nu delai_echant Tn tps_idle fe ...
val_correlation_emis val_correlation_recept sync_freq sync_temp;


%val_correlation_emis=str2num(get(handles.edit_correlation_emis,’String’));
%val_correlation_recept=str2num(get(handles.edit_correlation_recept,’String’));
val_correlation_emis=0;val_correlation_recept=0;
%sync_temp=get(handles.check_sync_temp,’Value’);
%sync_freq=get(handles.check_sync_freq,’Value’);
%chargement des matrices de Gray
load const2; % BPSK.
load const4; % QPSK.
load const16; % 16-QAM.
%load const64; % 64-QAM.
%load const256; % 256-QAM.
%qlq paramètres non spécifiés par le GUI :
Pt=1;
surech_fact = 3; % Facteur de suréchantillonnage.
param_nyquist = [ 3*surech_fact 0.25]; % Paramètres du Nyquist (demi-long + roll-off).
tblen = 50; % Mémoire de d´ecodage.
constlen = 7; % Longueur du code correcteur (K).
codegen = [133 171]; % Polynomes générateurs.
long_delai_echant = 0; % Délai d’échantillonnage.
fe = 60e6; % Fréquence d’échantillonnage.
Tn=surech_fact/fe;
delai_echant=round(long_delai_echant/Tn);
nu=round(long_prefixe/Tn);
Ts=(N+nu)*Tn;
R_Mbits_s_sans_code=(choix_const*N/((N+nu)*Tn))/1e6;
R_Mbits_s=code_rate_conv*code_rate_RS*R_Mbits_s_sans_code
% T=(N+nu)/N*Tn;
% Tg=(nu-1)*Tn;
% delta_f=1/(N*Tn)
% B_MHz=(1/Tn)/1e6; %environ

fprintf( '\n paquets :'); %nb_paquets=10;

%---------------appel du simulateur----------------%
matrice_resultats=zeros(nb_paquets,length(vect_Eb_N0_dB));
if (taille_paquets_aleat)
% La taille des paquets est une variable uniforme comprise entre 48 et 480 bytes.
% un nombre de bytes aléatoire :
nb_bytes = generateur_nb_unif([1 nb_paquets],48,480);
% ce qui correspond `a une taille de paquet :
vect_taille_paquets=ceil(nb_bytes./((N*choix_const)/8));
else
vect_taille_paquets=taille_paquets*ones(1,nb_paquets);
end
start_time = clock;
rand('state',sum(100*clock));

for num_paquet=1:nb_paquets
if (num_paquet>1)
affichage=1; %on affiche que pour le premier paquet
end
if flag_interf
% hypothèse de 25% d’occupation pour le canal.
if (mod(num_paquet,4)==0)
if (type_interf==1)
vect_interferences(1)=1;
else
vect_interferences(1)=2;
end
else
vect_interferences(1)=0;
end
end
affichage =0;%get(handles.check_affichage,’Value’); % Affichage des figures (1 ou 0).

[matrice_resultats(num_paquet,:),MSE(num_paquet,:)]=simulateur(Nt,Nr,Pt,vect_Eb_N0_dB,...
N,vect_taille_paquets(num_paquet),param_nyquist,choix_const,...
caract_canal,entrelac_conv,entrelac_RS,type_poids,type_decodage,...
constlen,vitesse,codegen,tblen,code_rate_conv,code_rate_RS,vect_erreurs_canal,blind,...
vect_reduction_calculs,vect_interferences,vect_estimation_canal,affichage,val_offset_freq);

fprintf( ' %d , ',num_paquet);
%for num_Eb=1:length(vect_Eb_N0_dB)
%fprintf('Eb/N0 : %d dB | BER : %d || ',vect_Eb_N0_dB(num_Eb),squeeze(matrice_resultats(num_paquet,num_Eb)));
%end
%if affichage
% close all;
%end
end
stop_time = clock;
elapsed_time = etime(stop_time,start_time);
fprintf('\n \n Durée de la simulation : %g seconds\n',elapsed_time);
if (taille_paquets_aleat) %moyenne pond´er´ee
for num_paquet=1:length(vect_taille_paquets)
matrice_resultats(num_paquet,:)=matrice_resultats(num_paquet,:)*vect_taille_paquets(num_paquet);
end
vect_resultats=sum(matrice_resultats,1)/sum(vect_taille_paquets);
else %simple moyenne
vect_resultats=mean(matrice_resultats,1);
end
fprintf('\n\n moyenne sur %d paquets ( %d blocs ou %d bits ) :\n ',length(vect_taille_paquets),...
sum(vect_taille_paquets),sum(vect_taille_paquets)*choix_const*N);
for num_Eb=1:length(vect_Eb_N0_dB)
fprintf('Eb/N0 : %d dB | BER : %d | ',vect_Eb_N0_dB(num_Eb),squeeze(vect_resultats(num_Eb)));
fprintf(' \n ');
end
% avec code RS
%semilogy(vect_Eb_N0_dB,vect_resultats,'ko--'); z1=[vect_Eb_N0_dB' vect_resultats'];save codeRS1.dat z1 -ascii;

%sans code RS
semilogy(vect_Eb_N0_dB,vect_resultats,'bs--');z1=[vect_Eb_N0_dB' vect_resultats'];save codeRS0.dat z1 -ascii;

xlabel('Eb/N0 (dB)');
ylabel('BER');
legend('sans RS', 'avec RS');
grid on; hold on
%title('Moyenne des résultats');



if (vect_estimation_canal(1)>=1)
vect_MSE=mean(MSE,1);
if (vitesse>0 & vect_taille_paquets(1)>1)
fprintf('\n\n moyenne des MSE’’s (estimation initiale): \n ');
else
fprintf('\n\n moyenne des MSE’’s : \n ');
end
for num_Eb=1:length(vect_Eb_N0_dB)
fprintf('Eb/N0 : %d dB | MSE : %d || ',vect_Eb_N0_dB(num_Eb),vect_MSE(num_Eb));
end
end
fprintf('\n\n\n');
%affichage :

%-------------------------------------------------------------%
if affichage
numfig=numfig+1;
figure(numfig);
set(numfig,'name','Profil de puissance')

t=0:1/fe:caract_canal(1)/1e9;
tau_rms=caract_canal(2)/1e9;
PP=exp(-(t/tau_rms)); %cf. article : "channel and interference mode..."
%normalisation :
PP=PP/norm(PP);
plot(t,PP);
title('Profil de puissance');
xlabel('temps (s)');
ylabel('puissance');
set(1,'name','Moyenne des résultats');
%----------------------------------------------------------------------


end

%clear all;
Ajouter un commentaire
Réponse
+0
moins plus
Salut ce programme sous matlab peut être vous aidez mais il est programmé pour donne une simulation d'une modulation ofdm codée par rs et fgure le ber en fonction de eb/n0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% start_simulateur.m %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------------récupération des paramètres du GUI----------------%
% codage de canal
%----------------%


%code_rate_RS=188/204; % utilise ligne 224
%code_rate_RS=1 %rate_RS=188/204; ou 1 :(pas de codage) % sinon utlise 227
code_rate_conv=1;% Taux de code 0.5; 2/3; 3/4; 5/6; 7/8; 1(pas de code).
%type_decodage= 'soft'; % Type de d´ecodage : ’soft’ ou ’hard’.
type_decodage='hard';
entrelac_conv =0;% get(handles.check_entrelac_conv,’Value’); % 1=entrelacement
%entrelac_RS =1;%get(handles.check_entrelac_RS,’Value’); % 0: pas d’entrelacement.

% canal
%------%
%caract_canal=[str2num(get(handles.edit_tmax,’String’)),str2num(get(handles.edit_trms,’String’))];
ntau_max=2*390; %en nano-secondes
ntau_rms=2*50;
caract_canal= [ntau_max ntau_rms] ; % valeur numérique pour canal expon sinon A, B, ...

%long_prefixe =0;% sans cyclique préfixe.
long_prefixe =800e-9; % Longueur du préfixe cyclique.

vect_Eb_N0_dB=[0:2:20]; % Vecteur contenant les Eb/N0.
numfig=1;

vitesse= 0; %v/3.6; vitesse de déplacement (entre en km/h)
%SIR_dB=10;
%vect_interferences=[1 , SIR_dB, 0];
%flag_interf=1;
%type_interf=1;
vect_interferences=zeros(1,3);
flag_interf=0;
type_interf=0;

val_offset_freq=0;
%str2num(get(handles.edit_offset,’String’))*1000; %offset fr´equentiel (entr´e en kHz)

% diversité
%----------%
Nt=1; %str2num(get(handles.edit_Nt,’String’)); % Nombre d’antennes `a l’´emetteur.
Nr=1; %str2num(get(handles.edit_Nr,’String’)); % Nombre d’antennes au r´ecepteur.

% estimation
blind=1; %get(handles.check_blind,’Value’); % Blind à l´emetteur (1) ou non (0).
%-----------%
vect_erreurs_canal=zeros(1,3);

%if (get(handles.radio_estimation,’Value’)==1)
nb_blocs_pilotes= 1;% str2num(get(handles.edit_nb_blocs_pilotes,’String’));
if (nb_blocs_pilotes<=0)
str_error_1='Le nombre de blocs pilotes doit être >=1.'
str_error_2=' Modifiez le paramètre et relancez.';
errordlg(strcat(str_error_1,str_error_2));
end

vect_estimation_canal=zeros(1,3);

% modulation
%-----------%

N= 64; % Nombre de porteuses 16,..64,..,128,..,256,..,512,..1024.
choix_const=2;% Nb. de bits par constellation : 1,2,4,6 ou 8.
vect_reduction_calculs(1)=1; % Taux de r´eduction calculs. ex : 2 calcul d’une porteuse sur 2

%num_poids=1; % =get(handles.popup_poids,’Value’);
%switch num_poids
% case Le critère utilisé pour le calcul des poids de beamforming
%type_poids='sum-ber';
%type_poids='max-mse';
%type_poids='sum-mse'; % sum-mse; prd-mse ; max-mse = min-snr
type_poids='hrm-snr';

%case 2 % prd-snr ; sum-ber ;hrm-sin
%type_poids='prd-mse';
%case 3

%case 4
%type_poids='prd-snr';
%case 5
%case 6
%

% data
%------%
%if (get(handles.check_taille_paquets_aleat,’Value’))
taille_paquets_aleat=0;
taille_paquets=376;
%affichage =get(handles.check_affichage,’Value’); % Affichage des figures (1 ou 0).
affichage=1;

%---------------programmation d´efensive----------------%
if ((code_rate_conv*code_rate_RS)<1 & taille_paquets_aleat)
str_error_1= 'Un code correcteur et une taille de paquets al´eatoire est incompatible. ';
str_error_2=' Modifiez un des deux param`etres et relancez.';
errordlg(strcat(str_error_1,str_error_2));
break;
end
if ((Nt<=0)|(Nr<=0))
str_error_1='Il faut au moins une antenne au récepteur et une antenne `a l’’émetteur ! ';
str_error_2=' Modifiez les param`etres en cons´equence et relancez.';
errordlg(strcat(str_error_1,str_error_2));
break;
end
if (code_rate_RS~=1 & (taille_paquets~=376 | choix_const~=2 | N~=64))
str_error_1='Le codage de R-S n’’est implémenté que pour des paquets de 376 blocs QPSK sur 64 porteuses. ';
str_error_2=' Modifiez les param`etres n´ecessaires et relancez.';
errordlg(strcat(str_error_1,str_error_2));
break;
end
if (code_rate_RS==1 & entrelac_RS)
str_error_1='L’’entrelacement externe sans codage de R-S n’’a aucune utilité et n’’est pas implémenté. ';
str_error_2='Il ne sera par cons´equent pas pris en compte dans la simulation. Pressez OK et enter pour continuer.';
warndlg(strcat(str_error_1,str_error_2));
end
%end programmation défensive.


global s2 s4 s16 s64 s256 c2 c4 c16 c64 c256 surech_fact Ts nu delai_echant Tn tps_idle fe ...
val_correlation_emis val_correlation_recept sync_freq sync_temp;


%val_correlation_emis=str2num(get(handles.edit_correlation_emis,’String’));
%val_correlation_recept=str2num(get(handles.edit_correlation_recept,’String’));
val_correlation_emis=0;val_correlation_recept=0;
%sync_temp=get(handles.check_sync_temp,’Value’);
%sync_freq=get(handles.check_sync_freq,’Value’);
%chargement des matrices de Gray
load const2; % BPSK.
load const4; % QPSK.
load const16; % 16-QAM.
%load const64; % 64-QAM.
%load const256; % 256-QAM.
%qlq paramètres non spécifiés par le GUI :
Pt=1;
surech_fact = 3; % Facteur de suréchantillonnage.
param_nyquist = [ 3*surech_fact 0.25]; % Paramètres du Nyquist (demi-long + roll-off).
tblen = 50; % Mémoire de d´ecodage.
constlen = 7; % Longueur du code correcteur (K).
codegen = [133 171]; % Polynomes générateurs.
long_delai_echant = 0; % Délai d’échantillonnage.
fe = 60e6; % Fréquence d’échantillonnage.
Tn=surech_fact/fe;
delai_echant=round(long_delai_echant/Tn);
nu=round(long_prefixe/Tn);
Ts=(N+nu)*Tn;
R_Mbits_s_sans_code=(choix_const*N/((N+nu)*Tn))/1e6;
R_Mbits_s=code_rate_conv*code_rate_RS*R_Mbits_s_sans_code
% T=(N+nu)/N*Tn;
% Tg=(nu-1)*Tn;
% delta_f=1/(N*Tn)
% B_MHz=(1/Tn)/1e6; %environ

fprintf( '\n paquets :'); %nb_paquets=10;

%---------------appel du simulateur----------------%
matrice_resultats=zeros(nb_paquets,length(vect_Eb_N0_dB));
if (taille_paquets_aleat)
% La taille des paquets est une variable uniforme comprise entre 48 et 480 bytes.
% un nombre de bytes aléatoire :
nb_bytes = generateur_nb_unif([1 nb_paquets],48,480);
% ce qui correspond `a une taille de paquet :
vect_taille_paquets=ceil(nb_bytes./((N*choix_const)/8));
else
vect_taille_paquets=taille_paquets*ones(1,nb_paquets);
end
start_time = clock;
rand('state',sum(100*clock));

for num_paquet=1:nb_paquets
if (num_paquet>1)
affichage=1; %on affiche que pour le premier paquet
end
if flag_interf
% hypothèse de 25% d’occupation pour le canal.
if (mod(num_paquet,4)==0)
if (type_interf==1)
vect_interferences(1)=1;
else
vect_interferences(1)=2;
end
else
vect_interferences(1)=0;
end
end
affichage =0;%get(handles.check_affichage,’Value’); % Affichage des figures (1 ou 0).

[matrice_resultats(num_paquet,:),MSE(num_paquet,:)]=simulateur(Nt,Nr,Pt,vect_Eb_N0_dB,...
N,vect_taille_paquets(num_paquet),param_nyquist,choix_const,...
caract_canal,entrelac_conv,entrelac_RS,type_poids,type_decodage,...
constlen,vitesse,codegen,tblen,code_rate_conv,code_rate_RS,vect_erreurs_canal,blind,...
vect_reduction_calculs,vect_interferences,vect_estimation_canal,affichage,val_offset_freq);

fprintf( ' %d , ',num_paquet);
%for num_Eb=1:length(vect_Eb_N0_dB)
%fprintf('Eb/N0 : %d dB | BER : %d || ',vect_Eb_N0_dB(num_Eb),squeeze(matrice_resultats(num_paquet,num_Eb)));
%end
%if affichage
% close all;
%end
end
stop_time = clock;
elapsed_time = etime(stop_time,start_time);
fprintf('\n \n Durée de la simulation : %g seconds\n',elapsed_time);
if (taille_paquets_aleat) %moyenne pond´er´ee
for num_paquet=1:length(vect_taille_paquets)
matrice_resultats(num_paquet,:)=matrice_resultats(num_paquet,:)*vect_taille_paquets(num_paquet);
end
vect_resultats=sum(matrice_resultats,1)/sum(vect_taille_paquets);
else %simple moyenne
vect_resultats=mean(matrice_resultats,1);
end
fprintf('\n\n moyenne sur %d paquets ( %d blocs ou %d bits ) :\n ',length(vect_taille_paquets),...
sum(vect_taille_paquets),sum(vect_taille_paquets)*choix_const*N);
for num_Eb=1:length(vect_Eb_N0_dB)
fprintf('Eb/N0 : %d dB | BER : %d | ',vect_Eb_N0_dB(num_Eb),squeeze(vect_resultats(num_Eb)));
fprintf(' \n ');
end
% avec code RS
%semilogy(vect_Eb_N0_dB,vect_resultats,'ko--'); z1=[vect_Eb_N0_dB' vect_resultats'];save codeRS1.dat z1 -ascii;

%sans code RS
semilogy(vect_Eb_N0_dB,vect_resultats,'bs--');z1=[vect_Eb_N0_dB' vect_resultats'];save codeRS0.dat z1 -ascii;

xlabel('Eb/N0 (dB)');
ylabel('BER');
legend('sans RS', 'avec RS');
grid on; hold on
%title('Moyenne des résultats');



if (vect_estimation_canal(1)>=1)
vect_MSE=mean(MSE,1);
if (vitesse>0 & vect_taille_paquets(1)>1)
fprintf('\n\n moyenne des MSE’’s (estimation initiale): \n ');
else
fprintf('\n\n moyenne des MSE’’s : \n ');
end
for num_Eb=1:length(vect_Eb_N0_dB)
fprintf('Eb/N0 : %d dB | MSE : %d || ',vect_Eb_N0_dB(num_Eb),vect_MSE(num_Eb));
end
end
fprintf('\n\n\n');
%affichage :

%-------------------------------------------------------------%
if affichage
numfig=numfig+1;
figure(numfig);
set(numfig,'name','Profil de puissance')

t=0:1/fe:caract_canal(1)/1e9;
tau_rms=caract_canal(2)/1e9;
PP=exp(-(t/tau_rms)); %cf. article : "channel and interference mode..."
%normalisation :
PP=PP/norm(PP);
plot(t,PP);
title('Profil de puissance');
xlabel('temps (s)');
ylabel('puissance');
set(1,'name','Moyenne des résultats');
%----------------------------------------------------------------------


end

%clear all;
Ajouter un commentaire
Ce document intitulé «  programmes en matlab sur le SNR  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.