Bonjour,
je dois faire un sonar ou quelque chose qui se rassemble a fin de calculer de façon théorique la profondeur d'un local.
la façon de procéder est la suivante:
j'utilise l'objet analogoutput de matlab a fin d'envoyer un chirp par la carte son, au même temps je récupérer le signal à l'aide d'un microphone puis je dois effectuer la corrélation de ces deux signaux à fin de trouver le délai, ainsi le temps et avec la vitesse du temps, trouver la distance.
j'ai le code suivant en matlab
j'essaye de chercher le maximum de l'autocorrelation et celui de l'inter correlation a fin d'obtenir le delai, je ne sais pas si cela tient la route?
merci de votre aide et de vos commentaires. je vous serai très réconnaissant.
merci d'avance.
la fonction max donne des echantillons, donc le delai c'est en echantillons n'est pas, donc avec la frequence d'echantillonage j'obtiens le temps et multipliant par la vitesse du son de 340 secondes j'ai la distance.Code:%analog output of chirp ao = analogoutput('winsound'); chan = addchannel(ao,1); duration = 4; set(ao,'SampleRate',11025) set(ao,'TriggerType','Manual') ActualRate = get(ao,'SampleRate'); len = ActualRate*duration; x = wavread('sonarping.wav'); putdata(ao,x) %start(ao) %trigger(ao) %waittilstop(ao,5) %capture using a micro and sound card of analog output object AI = analoginput('winsound'); chan_in = addchannel(AI,1); duration = 4; %4second acquisition set(AI,'SampleRate',11025) ActualRate = get(AI,'SampleRate'); set(AI,'SamplesPerTrigger',duration*ActualRate) set(AI,'TriggerType','Manual') blocksize = get(AI,'SamplesPerTrigger'); Fs = ActualRate; %start(AI) %trigger(AI) start([ao AI]) trigger([ao AI]) y = getdata(AI); autocorr=xcorr(x,x); [value_auto,position_auto]=max(autocorr); crosscorr=xcorr(x,y); [value_cross,position_cross]=max(crosscorr); delay=position_cross-position_auto
Le problème est que j'obtiens des résultats illogiques et aberrants.. peut etre parce que j'ai un mauvais algorithme.
merci encore une fois.
-----