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

Bestimmte Werte(Abschnitte) aus Aufnahme entfernen

 

RTS-JO
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2013, 14:29     Titel: Bestimmte Werte(Abschnitte) aus Aufnahme entfernen
  Antworten mit Zitat      
Hallo alle,

Ich habe folgendes Problem:

Mit Hilfe einer Soundkarte habe ich eine Impulsantwort mit Matlab aufgenommen. Ich erhalte eine Matrix mit sehr vielen Zeilen und zwei Spalten (weil 2 Kanäle).
Mein Problem dabei ist jetzt, dass ich die Aufnahme auf eine bestimmte Zeit gesetzt habe (X Sekunden).
In diesen X Sekunden erfolgt irgendwann (immer unterschiedlich) der Impuls den ich weiter verarbeiten möchte. Der Impuls klingt so ungefähr innerhalb einer halben Sekunde ab.
Nun möchte ich aber das mein Matlab-Code automatisch erkennt wann der Impuls anfängt und endet, ich als Ergebnis also nur den Bereich des Impulses geplottet kriege und den Rest (Ruhe) ( also vor Beginn des Impulses und nach Ende des Impulses, der sich so im Bereich 0 befindet) nicht weiter berücksichtige.

Wichtig dabei ist vielleicht noch, dass die Werte meiner Matrix sowohl negativ als auch positiv sind und Kommastellen enthalten.

Ich glaube nicht das mich die find()-Funktion da weiter bringt, weil sich die Werte ständig bei der dritten Nachkommastelle ändern.

Hoffe ich habe das Problem einigermaßen gut beschrieben.

Für Anregungen bedanke ich mich schon mal im voraus...LG
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: 15.10.2013, 14:52     Titel: Re: Bestimmte Werte(Abschnitte) aus Aufnahme entfernen
  Antworten mit Zitat      
Hallo RTS-JO,

Wie wäre es mit:
Code:
Signal = data(:, 1);

% Standard-Abweichung des Rauschens, entweder Anfang oder Ende wird
% doch Ruhe sein, oder?
Dev = min(std(Signal(1:100)), Signal(end-99:end));

Signal = abs(Signal - mean(Signal));  % Zentrieren, absoluter Wert
Start = find(Signal > 3 * Dev, 1, 'first');
End  = find(Signal > 3 * Dev, 1, 'last');
 

Hier wird angenommen, dass der Peak beginnt, wenn das Signal größer ist als 3 mal der Standard-Abweichung des Rauschens. Passt das? Andere Limits wären ebenso denkbar.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
RTS-JO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2013, 16:18     Titel:
  Antworten mit Zitat      
Hallo Jan,

das funktioniert so nicht, denn ich bekomme so immer nur positiven Werte meiner Impulsantwort zurück gegeben. Vom Prinzip hab ich aber verstanden was du meinst. Hhm......

Ein weiteres Problem bei deinem Vorschlag ist auch, dass in der Zeile
Code:

Dev = min(std(Signal(1:100)), Signal(end-99:end));

weil hierbei eine 100x1 Matrix erzeugt wird. Wenn das...
Code:

Signal > 3 * Dev

sein soll sind hier nun leider verschiedene Matrix Dimensionen vorhanden und ich bekomme einen Fehler.

Ich kann vielleicht nochmal kurz erklären das meine Matrix (im Beispiel: "Signal") eine 240000x1 Matrix ist ( also wenn wir jetzt den 2. Kanal wie du es gemacht hast erstmal links liegen lassen). Von diesen 240000 Werten sind schätzungsweise knapp 5000 Werte für den Impuls und der Rest Ruhe oder wie du meinst "Rauschen". Der Impuls wird dabei jedoch zeitlich zufällig angeregt. Also irgendwann in den x Sekunden. Dabei ist vorher und nachher Rauschen/Ruhe.

Ich zeig dir mal den Plot, dann verstehst du vielleicht bisschen genauer was ich erreichen möchte....
(Anmerkung: In den Grafiken sind nun allerdings beide Kanäle zu sehen.)

imp_v.jpg
 Beschreibung:
...so siehts jetzt aus.

Download
 Dateiname:  imp_v.jpg
 Dateigröße:  13.19 KB
 Heruntergeladen:  404 mal
imp_n.jpg
 Beschreibung:
...so möchte ich es gerne automatisch erstellen lassen.

Download
 Dateiname:  imp_n.jpg
 Dateigröße:  17.63 KB
 Heruntergeladen:  386 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 15.10.2013, 16:33     Titel:
  Antworten mit Zitat      
Hallo RTS,

Ist zwar nicht so schön, aber wenn dein Signal immer so aussieht wie in den Bildern:

Code:

verschiebung=-100;
dauer=5000;
[maxwert,maxInd]=max(Signal);
SignalAusschnitt=Signal(maxInd+verschiebung:maxInd+dauer);
 

Da kannst dann manuell an den Paramern schrauben bis es passt (Wenn die Signale immer gleich sind).

Ansonsten ist Jans Vorschlag natürlich etwas besser Wink

Gruß, Kascho
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 - 2025 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.