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

Anzahl der Spikes bestimmen. Wer kann helfen?

 

Daffit

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2016, 18:58     Titel: Anzahl der Spikes bestimmen. Wer kann helfen?
  Antworten mit Zitat      
Hallo Zusammen,

ich möchte aus einer Audiodatei (eigentlich ist es nur ein knacken) die Anzahl der Spikes bzw. Die Frequenz angeben lassen. So weit bin ich und komme leider nicht weiter! In der Abbildung sind unschwer 1Hz zu erkennen. Aber wie spuckt mir das Matlab aus? Über Tipps bin ich sehr dankbar.

% Daten ueber den Mikrofoneingang erfassen.

% Anzahl der Elektroschocks auf die Soundkarte. (Nimmt deine Stimme 5 Sekunden auf).
recObj = audiorecorder;
disp('Messung startet.')
recordblocking(recObj,5);
disp('Messung beendet.');

% Spielt die Aufnahme.
play(recObj);

% Speichert Daten in double-precision array.
myRecording = getaudiodata(recObj);

% Zeichne die Daten.
plot(myRecording);
xlabel('Zeit')
ylabel('Umdrehungen')
title('Wie oft loest der Magnet am Hall-sensor aus')

%Zaehlt die Spikes aus
a=myRecording;
Anzahl=length(find(a>1))

b=Anzahl/5 %Gibt die Frequenz an
disp('Hertz');

figure.jpg
 Beschreibung:

Download
 Dateiname:  figure.jpg
 Dateigröße:  21.22 KB
 Heruntergeladen:  256 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.07.2016, 12:41     Titel:
  Antworten mit Zitat      
Hallo,

mit den Daten wäre es deutlich einfacher.
Auch fehlt die Info, was an deinem bisherigen Ansatz nicht klappt.

Vorschlag:
Code:
sum ( diff(abs(a) > 0.2*max(a) ) > 0 )


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Daffit

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2016, 15:24     Titel:
  Antworten mit Zitat      
Danke Harald,

ich werde deinen Vorschlag ausprobieren.

Der Fehler ist folgender: Die Frequenz, die ich auslesen lasse stimmt nicht. Also liegt der Fehler in den letzten 2 Abschnitten.

Wie kann ich die Daten anzeigen lassen?

Gruß, David
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.07.2016, 16:03     Titel:
  Antworten mit Zitat      
Hallo,

ich habe dir ja einen Vorschlag gemacht, wie du die Anzahl der Peaks bestimmen kannst.

Was meinst du mit "die Daten anzeigen lassen"? Du hast doch schon einen Plot?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Daffit

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2016, 19:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine nützlichen Tipps. Hat mir sehr geholfen. Jetzt gibt mir das Programm im Command Window die Anzahl der Kontakte, die Frequenz und die Windgeschwindigkeit aus. Es handelt sich ja um die Messwerterfassung eines Anemometers.

In den weiteren Schritten möchte ich die Ergebnisse im Plot anzeigen lassen. Leider zeigt es mir nur die Windgeschwindigkeit im Plot an. Im Command Window steht auch "Ignoring extra legend entries".Hast du eine Ahnung warum?

Viele Grüße,
David


Code:

% Daten ueber den Mikrofoneingang erfassen.

% Anzahl der Elektroschocks auf die Soundkarte. (Nimmt deine Stimme 5 Sekunden auf).
recObj = audiorecorder;
disp('Messung startet.')
recordblocking(recObj,5);
disp('Messung beendet.');

% Spielt die Aufnahme.
play(recObj);

% Speichert Daten in double-precision array.
myRecording = getaudiodata(recObj);

% Zeichne die Daten.
plot(myRecording);
xlabel('Zeit [s]')
ylabel('Spannung')
title('Messwerterfassung Anemometer')

%Zaehlt die Spikes aus
a=myRecording;
Anzahl=sum(diff(abs(a)>0.8*max(a))<0)/2

%Gibt die Frequenz an
Frequenz=Anzahl/5
disp('Hertz');

%Berechnet die Windgeschwindigkeit
Windgeschwindigkeit=(30*Frequenz)/3.5
disp('Km/h');

%Gibt die Windgeswindigkeit auf dem Plot aus
x=(sprintf(['Windgeschwindkeit in Km/h: ',num2str(Windgeschwindigkeit)]));
y=(sprintf(['Anzahl Rotationen: ',num2str(Anzahl)]));
z=(sprintf(['Frequenz: ',num2str(Frequenz)]));
legend(x,y,z);


Command Window:

>> Messwerterfassung_Mikrofoneingang
Messung startet.
Messung beendet.

Anzahl =

4


Frequenz =

0.8000

Hertz

Windgeschwindigkeit =

6.8571

Km/h
Warning: Ignoring extra legend entries.
> In legend at 239
In Messwerterfassung_Mikrofoneingang at 37

test10.jpg
 Beschreibung:

Download
 Dateiname:  test10.jpg
 Dateigröße:  25.21 KB
 Heruntergeladen:  261 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.07.2016, 19:54     Titel:
  Antworten mit Zitat      
Hallo,

die Legende soll ja die Plots beschriften.

Ein Plot, eine Legende.

Du kannst weitere Beschriftungen z.B. mit text , gtext oder annotation einfügen.

Grüße,
Harald

P.S.: bitte die Code-Umgebung nutzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Daffit

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2016, 11:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank! Das Einfügen hat sehr gut funktioniert. Leider zählt das Programm teilweise halbe spikes. Liegt das daran, da ich folgende Funktion durch 2 geteilt habe?

Für meine weiteren Berechnungen benötige ich nur die positiven oder negativen spikes. Daher habe ich die Funktion durch 2 geteilt.

Kommt man auf die Anzahl vielleicht auch einfacher. So dass die .5 Fehler nicht passieren?

Hab zu Veranschaulichung mal mein Plot angefügt.

Viele Grüße
David

Code:

%Zaehlt die Spikes aus
a=myRecording;
Anzahl=sum(diff(abs(a)>0.8*max(a))<0)/2


Test_Messung.jpg
 Beschreibung:

Download
 Dateiname:  Test_Messung.jpg
 Dateigröße:  33.11 KB
 Heruntergeladen:  244 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.07.2016, 12:44     Titel:
  Antworten mit Zitat      
Hallo,

ich habe in meinem Vorschlag nur die Absolutbeträge berücksichtigt. Das /2 ist also nicht sinnvoll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Daffit

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2016, 13:37     Titel:
  Antworten mit Zitat      
Vielen Dank für Alles!
 
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.