WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Schallgeschwindigkeit ermitteln

 

vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2012, 03:27     Titel: Schallgeschwindigkeit ermitteln
  Antworten mit Zitat      
Hallo,

wegen Schlaflosigkeit möchte ich euch an meinem "Projekt" teilhaben lassen.
Und zwar möchte ich die Schallgeschwindigkeit mittels des Lautsprechers und des Mikrophon berechnen.
Das habe ich mir folgendermaßen gedacht: ich erzeuge ein Sinus-Sweep als Testsignal, gebe dieses Signal über die Lautsprecher aus und nehme es zeitgleich auf. Anschließend führe ich eine Kreuzkorrelation des Testsignals und des aufgenommenen Signals durch, um die Laufzeit zu ermitteln. Wenn ich jetzt den Abstand zwischen Mic. und Lautsprecher kenne, kann ich die Schallgeschwindigkeit berechnen. Soweit die Theorie.
Leider berechne ich mit meinem Script eine Schallgeschwindigkeit von nur ca. 9 m/s. Jetzt ist die Frage woran die liegen könnte??

Nachfolgend mein Script:
Code:

dur=0.3;                            % Dauer des Testsignals in s
fs = 44100;                         % Abtastrate in Hz
t=[0+1/fs : 1/fs : dur];            % Zeitvektor

fo = 200; f1 = 400;  
x_out = chirp(t,fo,dur,f1,'logarithmic');
figure
subplot(3,1,1); plot(t,x_out); title('Ausgangssignal')

% Analoginput definieren
ai = analoginput('winsound');        
ai.samplerate =fs;
addchannel(ai,[1]);                
ai.TriggerType='Manual';          
ai.ManualTriggerHwOn='Trigger';                    
ai.SamplesPerTrigger=fs*dur;        

% Analogoutput definieren
ao=analogoutput('winsound');        
ao.samplerate=fs;
addchannel(ao,[1]);                
ao.TriggerType='Manual';  
putdata(ao,x_out');                    

% Signal Ausgeben und Aufnehmen
start([ai,ao]);
trigger([ai,ao]);

y=getdata(ai);                   % Aufnahmepuffer lesen
y=y-mean(y);                     % Gleichanteil abziehen
subplot(3,1,2); plot(t, y); title('aufgenommenes Signal')



%% Korrelation
Y=xcorr(y,x_out);
subplot(3,1,3); plot(Y); title('kreuzkorriliertes Signal')

index_center=(length(Y)+1)./2;

if abs(max(Y))>abs(min(Y))          % prüfen ob maximum im positiven oder negativen Bereich liegt
    [temp,index_max]=max(Y);
else
    [temp,index_max]=min(Y);
end;

delay=index_max-index_center;       % Zeitverzug als Index
dt=delay*1/fs;                      % Zeitverzug in Sekunden

% Schallgeschw.
ds = 0.400;                         % Abstand Mikrofon-Lautsprecher in m
c = ds/dt                          % Schallgeschwindigkeit
 


Als mögliche Ursache für die wesentlich zu kleine Schallgeschwindigkeit habe ich folgende Ansätze:
- Fehler bei der Aufnahme des Signals (muss zusätzlich was bei der Definition des Analogein- bzw. ausgangs berücksichtigt werden?)
- Echtzeitfähigkeit von Matlab und Windows
- Hat sich ein Fehler in die weitere Berechnung geschlichen?

Um den Beitrag nicht zu lang werden zu lassen habe ich mich extra "kurz" gefasst, kann aber gerne bei Bedarf weiter ausholen.
Ansonsten freue ich mich über eure Ideen und vielleicht Lösungsvorschläge.

Gruß vega
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.11.2012, 09:56     Titel: Re: Schallgeschwindigkeit ermitteln
  Antworten mit Zitat      
Hallo vega1013,

Weder Matlab noch Windows sind Echtzeit-fähig. Du bekommst sowhl bei der Ausgabe als auch bei der Aufzeichnung des Sounds eine Verzögerung.

Vielleicht wäre es sinnvoller, zwei Mikrophone mit bekanntem Abstand aufzustellen, die das gleiche Signal aufzeichnen, z.B. die zwei Kanäle eines Stereo-Microphons.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Themenstarter

Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2012, 21:58     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja das die nicht vorhandene Echtzeitfähigkeit von Windows und Matlab das Ergebnis verfälschen würde hatte ich bereits befürchtet. Aber das der Einfluss so groß ist habe ich nicht erwartet...

Grundsätzlich wollte ich eigentlich nur ein Mikrofon und einen Lautsprecher verwenden, da diese praktisch an jedem Laptop vorhanden sind. Aber die Idee mit einem weiteren Mikrofon werde ich im Hinterkopf behalten.

Sind die Verzögerungen bei der Aufnahme und Wiedergabe grundsätzlich reproduzierbar? Wenn dies der Fall wäre könnte man dies ja korrigieren...?!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.