phyphox Forums

Full Version: Frequenzgang eines Lautsprechers messen
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3
Hallo liebe Forengemeinde,

im Zuge meiner Examensarbeit möchte ich den Frequenzgang, die Verzerrung und das Abstrahlverhalten eines Lautsprechers mithilfe der PhyPhox App aufnehmen.

Ich habe mich nun mit dem Editor beschäftigt und möchte im Prinzip das Modul "Audio Amplitude" und "Frequenz-Verlauf" so verbinden, dass ich eine Messung machen kann, die mir den Schalldruckpegel zur jeweils gemessenen Frequenz als Graph darstellt. So wie man es aus den typischen Datenblättern zu Lautsprechern kennt.

Ich stoße aber auf allgemeine Schwierigkeiten beim Arbeiten mit dem Editor, da es doch recht unübersichtlich ist..

Habt ihr eventuell Tipps, ob das überhaupt möglich ist? Und was zu beachten ist?

Beste Grüße,
Olli

Edit: Übrigens, wenn man im Editor z.B. das Experiment Audio Amplitude über den QR Code lädt, dann gibt es eine Errormeldung..

"Could not load experiment:
parsingError(backtrace "", line:663, encounteredError:
phyphox.ElementHandlerError.missing-Attribute("output"))"

Edit2:

Ich habe jetzt versucht, den Audio Input von "Audio Amplitude" zu nutzen und einfach den Analysis Part von "Frequenz-Verlauf" in dem Experiment nachzubauen. Ich wollte dann den gleichen Timer benutzen, damit jeweils beide Messungen zur selben Zeit gemacht werden und hätte dann über Export die Daten in Excel weiterbearbeitet.
Leider hat das nicht so wirklich funktioniert, denn sobald ich einen neuen Output hinzufüge oder etwas an dem andern ändere, zeigt er keine Messwerte mehr bei der Amplitude an und auch nichts im Frequenzverlauf.

Angehängt habe ich mal meine .phyphox so far..

Ich bedanke mich schonmal für jegliche Hilfen!
Sorry für die späte Antwort, war im Urlaub.

Leider ist beim Anhang scheinbar etwas schief gelaufen - zumindest sehe ich keine .phyphox-Datei.

Grundsätzlich sollte das durchaus möglich sein und ich sehe die mit Abstand größte Schwierigkeit in der Kalibration des Mikrofons. Am Ende wird der Frequenzgang von Lautsprecher und Mikro gemessen.

Der Editor ist leider in der Tat etwas hakelig sobald es komplexer wird und es gibt auch noch ein paar Bugs. Da hab ich keine gute Ausrede - es gibt da noch einige Baustellen. Falls du keine Angst vor etwas Code hast, ist es vielleicht leichter, die phyphox-Datei in einem Texteditor zu erstellen. Das ist letztendlich einfaches XML und in unserem Wiki wird beschrieben, wie das im Detail funktioniert. Da muss man sich einmal einlesen, aber dann braucht man sich nicht mehr mit Linien und scrollen im Editor herum zu schlagen.

Zeig am besten mal was du hast und ich helfe gerne, das fertig zu machen. Kann im Moment aber jeweils noch ein paar Tage dauern bis ich dazu komme, da sich über den Urlaub einiges angesammelt hat.
Ja den Anhang habe ich dann wohl vergessen Rolleyes 

Jetzt ist er aber dabei.

Das Problem ist jetzt gerade, dass er mir keine Messwerte in den Graphen anzeigt.. Der Analysis Part sollte doch eigentlich so stimmen :/

Ich werde mich dann wohl letztlich doch in XML einarbeiten.. Das Forum erklärt es tatsächlich sehr gut.

Danke schon einmal für die Hilfe!
Erstmal für andere, die hier vielleicht darüber stolpern (wir hatten ja schon per Mail kontakt):

Der Fehler oben (Could not load experiment: parsingError(backtrace "", line:663, encounteredError: phyphox.ElementHandlerError.missing-Attribute("output"))) ist ein etwas dämlicher, den wir mit Version 1.1.0 eingebaut haben und den ich zur nächsten Version beheben werde. Konkret erwartet Android derzeit, dass der Audio-Ausgang "out" heißt und die iOS-Version erwartet dagegen "output". Der Editor erzeugt ersteres, weswegen sich iPhones daran verschlucken. Im nächsten Update werde ich das dann auch auf "out" anpassen, damit es wieder einheitlich und kompatibel zu alten Versionen ist.

Ich habe das nun im Editor so umgangen, dass das Attribut "out"/"output" gar nicht gesetzt wird, da es eh optional ist. Damit sollte kaum noch jemand das Problem (bei neu erstellten Experimenten) bemerken. Die per Hand angepasste phyphox-Datei von oben muss aber noch einmal mit "out" (oder ganz ohne component="output") geladen werden, da der Editor "output" weiterhin nicht akzeptiert.

Nun zu dem aktuellen Stand der phyphox-Datei:

Das größte Problem war, dass bei den Verbindungen zu den Graphen "Clear" auf "at output" stand. Die Clear-Einstellung ist standardmäßig so eingestellt, dass es ohne großes Nachdenken für klassische Sensoren (wenn auch nicht optimal) funktioniert. Hier werden die Sensordaten direkt am Eingang im Puffer immer weiter angesammelt und alle Operationen im Editor werden immer auf alle alten Werte angewendet, die dann die vorherigen Werte einfach ersetzen. Bei Audio-Daten wäre das etwas heftig, weswegen die Audio-Experiment am Eingang immer nur die neusten Werte vorhalten, Berechnungen auf diese angewendet werden und "am Ende" die jeweils neuen Daten an die existierenden angehangen werden. Steht dann "Clear" auf "at output", werden die alten Daten gelöscht, wenn es neue gibt und in den Graphen steht immer nur der letzte Messwert (erkennbar daran, dass auf der x-Achse tatsächlich Werte erscheinen, aber keine Linie, da es keine zwei Punkte zum verbinden gibt).

Das scheint übrigens auch der Fall zu sein, wenn man "Frequenzverlauf" einfach so im Editor lädt. Scheinbar geht da beim Laden noch etwas schief.

Darüber hinaus waren noch einige Sachen falsch übertragen (die Berechnungen vor dem ersten rangefilter, Puffergröße beim Ausgang vom ramp) und ein grundlegendes Problem war noch, dass der Ausgang vom "timer" für den Amplitudenverlauf ohne "clear" laufen muss (das ergibt direkt die Liste der Ergebnisse) beim Frequenzverlauf aber erstmal nur der jeweils letzte Wert noch im rangefilter zusammen mit der Frequenz geprüft wird. Das habe ich mit einem zusätzlichen "append" in einen Puffer der Größe 1 gelöst.

Das Ergebnis scheint nun das gewünschte zu sein (siehe Anhang, unter Android getestet).
Vielen Dank, das Modul klappt wunderbar!

Mir ist beim Testen eben allerdings aufgefallen, dass die Frequenz von ca. 8 kHz bei keinem meiner 3 Testgeräte überschritten wurde (Iphone 7, Androidtablet und ein Honor 10). Sobald die Frequenz höher wird, sinkt die Anzeige wieder auf ca 6 kHz und steigt dann wieder bis ca. 8 kHz (bei trotzdem steigender Frequenz des Lautsprechers)

Ist das ein Sensor-bedingtes Problem? Ich kann mir vorstellen, dass die Smartphone-Mikrofone auf den Bereich zwischen 300 - 8000 Hz ausgelegt sind, weil das ja ungefähr dem Spektrum beim Sprechen entspricht.. Oder gibt es da Beschränkungen seitens Phyphox?
Theoretisch sollten Frequenzen bis zu Nyquist-Frequenz (halbe Sample-Rate, also 24kHz) unterscheidbar sein, aber in der konkreten Umsetzung gibt es hier zwei Einschränkungen:

1. Die Analyse-Methode aus "Frequenzverlauf" ist optimiert um auch aus kurzen Audio-Schnipseln eine Frequenz zu bestimmen. Hier wird eine Autokorrelation berechnet (was dann mit Tönen aus mehreren Frequenzen schon ein Problem darstellt) und im Grunde die Maxima abgezählt um die Periodendauer des Tons zu bestimmen. Die Nyquist-Frequenz ist der Grenzfall bei dem ein Ton zweimal pro Periode gesamplet wird, was in einer Fouriertransformation noch schön aufgelöst werden kann, wo unsere Korrelations-Abzählmethode aber recht sicher aus dem Tritt geraten wird. Bei 8kHz sind es auch nur 6 Sample pro Periode, weswegen ich vermute, dass der Algorithmus da nicht mehr sauber arbeitet.

2. Unsere Implementierung des Tongenerators (falls der hier benutzt wurde) ist auch nicht ideal. Wir berechnen den Ton einmal über eine Laufzeit von maximal einer Sekunde und spielen den dann in Schleife. Das hat zur Folge, dass kleine Nuancen nicht korrekt wieder gegeben werden, da die Phase des Tons beim Wiederholen jedes Mal wieder auf Null springt. Außerdem spielt hier eine Optimierung rein, die einen kürzeren Ton berechnen soll, aber bei hohen Frequenzen auch ihre Probleme bekommt. Ein neuer Tongenerator steht auf unserer Todo-Liste...

Ich würde empfehlen, dass du beide Fehlerquellen jeweils einmal ausschließt:
Den Ton einmal über einen Online-Tongenerator (einfach googlen, da gibt es viele) generieren und schauen, ob das Problem weg ist. Außerdem könnte es eine gute Alternative sein, die Frequenz nicht über die Autokorrelation, sondern über das Maximum einer Fourier-Transformation zu bestimmen. Die Aufnahme muss für eine gute Auflösung zwar ein ganzes Stück länger sein, aber das schadet in der Anwendung ja nicht. Auch das kannst du leicht testen, indem du dir die Frequenzen anschaust, die "Audio-Spektrum" als Peak ausspuckt.
Ich habe einen regulären Lautsprecher an einen Frequenzgenerator gehangen und über einen Sweep dann über die Zeit die Frequenzen von 20 Hz bis 20 kHz durchlaufen lassen. Der Sinn des ganzen soll dann ja am Ende sein, einen Frequenzgang des Lautsprechers aufzunehmen. Über eine andere App habe ich das Bild im Anhang als Ergebnis bekommen.

Ich möchte das in PhyPhox nun so nachbauen, dass ich denselben Sweep aufnehme und im besten Fall am Ende schon in Phyphox einen Graphen erhalte, wie den im Anhang.. :-)

Im Prinzip müsste ich also jeder Frequenz eine Amplitude zuweisen, die er dann am Ende graphisch darstellt, oder? Ist das überhaupt möglich? In der anderen App wird eine Aufnahme ausgewertet, keine Live-Messung gemacht.
Wenn nicht, würde ich versuchen, manuell über die aufgenommenen Amplituden und Frequenzen den Graphen in Excel zu erstellen.

Das mit der FFT und dem "Audio Spektrum" ist eine sehr gute Idee! Ich habe mich mal rangesetzt und ein neues Modul gebastelt, was nun im ersten Fenster die Amplitude und den Frequenzverlauf anzeigen soll und im Endeffekt auch den FFT-Verlauf und die Rohdaten anzeigt. Im letzten View-Fenster soll dann der Frequenzgang als Graph erscheinen, sofern das möglich ist.

Erster Versuch:
Im Audio-Spektrum gibt es ja den Wert der Frequenzspitze (f0). Meine Idee war jetzt, diesen Wert einfach über append an einen Buffer zu hängen, der als y-Achse meines Graphen genutzt wird. Hat aber leider nicht funktioniert und ich habs wieder entfernt... Wahrscheinlich ist es deutlich komplizierter, ich bin aber leider noch nicht hinter den Sinn jedes einzelnen Analysis Moduls gekommen, weshalb ich hier auch nochmal um Hilfe bitte Huh

Außerdem, warum auch immer, funktioniert der FFT-Verlauf (Der ja Frequenz und Zeit auch gegeneinander aufträgt) nicht mehr.. Ich habe einige Variablennamen geändert, es sollte aber eigentlich nichts schief gelaufen sein.

Im Anhang habe ich dir mal die .phyphox hochgeladen. Vielen Vielen Dank für die Hilfe auf jeden Fall!! Das rettet mir viel Zeit und sorgt hoffentlich für ein gutes Ergebnis am Ende :-)
Das sollte problemlos möglich sein, aber ich denke, dass es einfacher ist, dass von grund auf neu zu bauen. Jetzt, da ich etwas genauer drüber nachdenke, passen ein paar Sachen der Audio Amplitude und des Frequenz-Spektrums nicht direkt zusammen (z.B. sehr verschiedene Puffer-Größen). Wenn du nichts dagegen hast, baue ich das morgen einmal von Grund auf und stell es dann hier rein.
Das klingt natürlich auch sehr gut!

Ich würde mich auf jeden Fall total freuen, wenn du eventuell an den einzelnen Punkten auch dazuschreibst, wieso du welche Module mit welchen Puffern gewählt hast, sodass ich am Ende vielleicht nachvollziehen kann, wie das Ding gebaut ist Smile

Wenn das zuviel Zeit kostet, dann bekomme ich das sicher auch selbst hin Wink

Danke schonmal!
Bei einem kurzen Test funktioniert es:

spectral-amplitude.phyphox

Das basiert nun auf dem Audio-Spektrum-Experiment, bei dem ich erstmal einiges raus geworfen habe, was nicht benötigt wird (Verlauf, Notenerkennung, Übersetzungen usw.). Dann habe ich die Teile von Audio-Amplitude reinkopiert (Vorteil wenn man im Texteditor arbeitet - irgendwann brauchen da eine Alternative im phyphox-Editor) und so angepasst, dass der Zeitstempel und die Aufnahme genutzt werden, die schon beim Audio-Spektrum-Teil vorliegen.

Wichtig dabei: Die unter "Settings" ausgewählte Anzahl der Samples wird auch für die Berechnung der Amplitude genutzt. Am Ende habe ich dann noch eine Abfrage drangehangen, ob wirklich die gewünschte Anzahl Samples aufgenommen wurde (eigentlich nur beim ersten Wert relevant) und wenn ja, werden Zeitstempel, Frequenz und Amplitude in die Liste der Ergebnisse gepackt.

Standardmäßig werden 2048 Samples genutzt, was eine Auflösung von etwa 23 Hz entspricht. Für eine höhere Auflösung kannst du unter Settings mehr Samples einstellen. Am besten vor der Messung und immer nach Löschen der Daten - da war ich etwas faul und die Einstellung geht beim Löschen verloren.

Außerdem habe ich beim Ergebnis-Plot die Darstellung auf Punkte statt auf Linien gesetzt, da bei langsamen Messungen mehrere Amplituden zur selben Frequenz auftauchen, was mit Linien seltsam aussieht.

Schau mal, ob es für dich funktioniert und ob die Funktionsweise klar ist.
Pages: 1 2 3