Also ganz spezifisch als nächster Schritt dachte ich an in die Grafik hineinzuzoomen um zu sehen wo der Peak ist und wie breit das so ist.
Ich möchte noch mal einen Schritt zurückgehen. Es ist völlig OK Anfänger in einem Thema zu sein, aber was ist hier der Hintergrund? Nur zwei Beispiele:
1. Student der Elektrotechnik, der Signalverarbeitung noch nicht gehört hat und diese Aufgabe als HiWi bearbeitend.
2. Informatiker in einem Unternehmen der keine Ahnung von Signalverarbeitung hat und nach dieser kleinen Aufgabe auch nie wieder Berührung damit haben wird.
In beiden Fällen würde ich totall unterschiedliche Tipps geben.
ok Also ich studiere Biomedizintechnik und habe keine Ahnung von Signalverarbeitung. Zumindest nicht im zusammenhang mit Matlab. Das ganze gehört zu meinem Forschungsprojekt und ich vermute mal das ich diesen Signalverarbeitungsteil nach dem Projekt wohl nicht mehr brauchen werde.
Übrigens prinizpiell finde ich Matlab echt praktisch, nur ist es schwer was zu programmieren wenn einem der theoretische Hintergrund fehlt. Ich hatte auhc gehofft das das schneller geht...
Das Signal/Ton wird vor der Transformation mittels FFT in Segmente geteilt, wobei sich zwei benachbarte Segmente auch überlappen können. Dadurch bekommt man einen zeitlicher Verlauf des Leistungsdichtespektrums. Je nach gewählter Segmentlänge kann man ein sog. Breitband- oder Schmalbandspektrogramm erstellen (hohe Frequenz- oder hohe Zeitauflösung).
So ein Spektrogramm zu erzeugen sollte sicher kein größeres Problem darstellen. Interessant wird es eher wie man es liest und vor allem wie man eine visuelle Auswahl/Bestimmung der Tonlänge nun mit einem Algorithmus automatisiert.
Jetzt bin ich etwas verwirrt. Meint ihr (DSP und Andreas) das gleiche, also Andreas würdest du auch ein Spectrogram erstellen, oder sind das gerade zwei verschiedene Herangehensweisen?
Verfasst am: 04.10.2014, 18:01
Titel: Re: "Dauer eines Tons"
Ich beziehe mich vor allem auf diesen Post und deine anschließende Frage dazu.
aj.geissler hat Folgendes geschrieben:
Hallo,
die anfänglich harmlose Frage "Wie lange dauert ein Ton" hat es in sich.
Das Einlesen, Resamplen etc. ist jetzt mehr oder weniger gelöst.
Kernansatz hier sollte sein:
Aus dem Tonsignal ein Kurzzeitspektrogramm erstellen. Hierbei werden überlappende Zeitabschnitte in den Frequenzbereich transformiert. Letzten Endes hat man damit aus einem Vektor (Sound) wieder eine Matrix (Bild) gemacht.
Aus dem Bild markiert man einen Teil-)Bereich, der den Ton beinhaltet.
Nun muss man im Bild nach dem Muster suchen, das diesen Ton "hinreichend" genau beschreibt (gewisse Amplitudenschwankungen und ggfs. Frequenzschwankungen sollen ja toleriert werden).
Entlang der Zeitachse des Kurzzeitspektrogramms zählt man die Segmente, auf die das zutrifft, und schon hat man die Dauer.
Viel Spaß und Erfolg
Andreas
Ein Frequenzspektrum/Leistungsdichtespektrum (auch PSD genannt) zeigt halt keine Abhängigkeit zur Zeit sondern nur zur Frequenz. Das Spektrogramm stellt neben Amplitude und Frequenz auch einen Zusammenhang zur Zeit her. Daher ist der Vorschlag spectrogramm sicherlich ein vernünftiger Ansatz um die Tondauer zu bestimmen.
also schonmal danke bis hierhin, aber leider verstehe ich das beispiel bei matlab beim besten willen nicht, und ich finde auch keine Seite online wo das grudnlegend erklärt wird.
Könnte mir vllt jemand sagen wie der code dazu ungefährt aussehen müsste? Ihc will ja nicht das ihr das für mich fertig macht, aber ich finde einfach keinen inhaltlichen einstieg dazu...
Also meine Signalfrequenz beträgt 48kHz und die FFT habe ich ja schon gepostet. Mit diesem "tollen" code bekomme ich das bild im anhang was ja ziemlicher blödsinn ist. was muss ich wo an parametern angeben?
Fs = 48000;
samples = [2*Fs,4*Fs]; % Zur Begrenzung der Länge des Audiofiles
[y,fs] = audioread('a3oi2film_am_030914_um_1012_309.mp3',samples);
% spectrogram(x,window,noverlap,nfft,fs) % window = length of each segment % noverlap = values of overlapping between segments
nfft = 2^nextpow2(length(y(:,1))); % naechste 2er Potenz % mit dein beiden folgenden Parametern kann man die Zeit und Frequenzaufloesung aendern
window = nfft/64;
noverlap = window/2;
super, vielen dank!!!
das habe ich soweit verstanden. Nur deine vorletzte Zeile sagt mir nix. Nichtsdestotrotz habe ich in nem anderen Thread den folgenden Code gefunden:
Code:
[dummy, idx] = max(S);
frequency = F(idx);
plot(T,frequency)
der mir letzendlich die frequenz mit der maximalen "Intensität" über die zeit darstellt. (Wenn ich das richtig verstehe).
Ich würde nun das so ändern das ich einen minimalen und maximalen schwellwert setzen für die frequenz und die Intensität und mir die zeitfenster speichere in denen das passt.
macht das sinn?
Die vorletzte Zeile steuert die Schrittweite der Y-Achsen Skala, hier 1000Hz.
Ehrlich gesagt macht der Code für mich wenig Sinn. S,T und F sind das Ergebnis der spectrogram Funktion? Der Ton (ich nehme an es geht um das Piepen) wird doch immer mal wieder kurz unterbrochen. So findest du vermutlich nur ein lokales Maximum F(Smax) und plotest diesen Punkt dann über den gesamten Zeitvektor. Also müsste der Plot eine waagerechte Gerade zeigen. Was soll das dann aussagen? Ebenso besteht der Ton nicht nur aus einer Frequenz.
Nein, ich möchte die max funktion garnicht verwenden. Habe mich ungünstig ausgedrückt. Eigentlich möchte ich es jetzt so machen, dass ich überprüfe ob in einem gewissen Frequenzbereich\n (um 3kHz) eine gewisse Intensität vorherscht, die nur durch das Piepen verursacht wird, und nicht durch sprechen oder sonstiges. Nun ist mir aber aufgefallen das sich die Intensität ja ändert in abhängigkeit von der fensterung(window).
Zum einen verstehe ich nicht wieso (was gibt mir diese Intensität überhaupt an????), und zum anderen weis ich nicht, ob ich mir dann für eine Fensterbreite, die entsprechenden Intensitäten raussuchen muss und anhand dieser dann meine Schwellwerte festlegen soll??
Ich denke, dass wenn man selber Signalverarbeitung nicht kann und (das verstehe ich) nicht leren soll, die Herangehensweise über ein Forum nicht sehr effizient ist. Da würde ich ich über den Betreuer jemandem am Lehstuhl für Signalverarbeitung identifizieren der das innerhalb einer halben Stunde macht.
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
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.