Bonjour,
Je travaille dans l'acoustique et l’étude que je mène actuellement m'impose de calculer des fonctions de réponses en fréquence (FRF) par paires de microphone. Ainsi, afin de calculer rapidement et facilement les FRF de toutes les paires de micros possibles (selon le nombre de micros utilises lors des mesures), je tente d’écrire un code Matlab qui répondra cette fonction.
Pour calculer mes FRF, j'ai notamment besoin des inter-spectres (note Sn n+1) de chaque combinaisons de micros possible, et des auto spectres de chaque micro (note Snn). Je dispose donc :
des inter-spectres : S12 S13 S23 et des auto spectres : S11 S22 en input.
En pratique : en utilisant 3 micros, les combinaisons de paires possibles sans doublets sont donc : 12 13 23, soit 3 combinaisons possibles. Sachant que mes FRF se calculent de la manière suivante : FRF12=S12/S11, FRF13=S13/S11 et FRF23=S23/S22 FRFN-1 N = Sn-1 n/S n-1 n-1 etc... J'ai crée une boucle qui sera capable de me calculer ces FRF.
j'ai donc établit le code suivant :
avec np= nombre de combinaisons possible
N = nombre de micro utilisés
CROSSP = cell array des inter-spectres utilisés
workspace : CROSSP= {S12;S13;S23}
AUTOP = cell array des auto-spectres utilisés
workspace : AUTOP= {S11;S22;S33}
Dans l'absolu et seulement pour trois microphones, mon code fonctionne, mais ce n'est plus le cas si je dispose de plus de 3 micros et j'aimerais donc automatiser le calcul de mes FRF peut importe le nombre de micros que j'utilise.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 FRF=cell(np,1); for i=1:np-1 FRF{i}=CROSSP{i}(1,:)./AUTOP{1}(1,:); % calcul des FRF lies au micro 1 end for m=N:np FRF{m}=CROSSP{m}(1,:)./AUTOP{m-1}(1,:); % calcul des FRF lies au micro 2 end
J'aimerais donc savoir comment bloquer la première itération qui ira de 1 jusqu’à N-1 tant que la deuxième (qui ira de 2 jusqu’à N) ne sera pas terminée. J'aimerais calculer la même chose mais en seule fois. Ainsi, une fois que la deuxième itération sera terminée, la première itération passera a l’itération suivante pour que la deuxième itération recommence son processus d’itération en entier.
Pensez vous que cela est possible ? En espérant avoir été assez clair et en vous remerciant d'avance.
Partager