LabVIEWForum.de - Speicherbedarf 3D Anzeige

LabVIEWForum.de

Normale Version: Speicherbedarf 3D Anzeige
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin Moin!

In meinem Programm lese ich zwei 30 sekündige .wav Datei ein, wähle aus diesen Datei einen Ausschnitt von denen ich Spektrogramme der Dateien an sich (nur ein Kanal) und der Differenz der Dateien berechnen lasse.
Diese Sepktrogramme werden dann durch einen 3D-Graph dargestellt.

Die Frequenzauslösung und die Schrittweite in Samples lassen sich zur Laufzeit des Programm angeben, sind aber eigentlich minimal bei 10Hz und 10Samples. Alllerdings komme ich häufiger in ein Arbeitsspeicherproblem: Angeblich sei nicht genug Speicher für die Darstellung vorhanden. Wenn ich mir jetzt aber ein Extrembeispiel mal anschaue, dürfte dies eigentlich nicht der Fall sein:
Wahl der Länge eines Ausschnitts: 10000 Samples
Frequenzauflösung: 10Hz
Schrittweite: 10samples
Abtastrate bei der .wav-Datei: 44,1kHz
double-Zahl: 8byte

=> Spektrogramm-Matrix hat die Größe (10000Samples/10)*(44100/2/10)*8byte = 1000*2205*8byte = 17640000byte ~ 16,8Mb

Selbst bei 4 Matrizen ist das bei 1Gb Arbeitsspeicher recht lächerlich.

Woran kann es liegen, dass die Daten trotzdem viel zu groß werden?

Schöne Grüße
Hallo,

erst mal vorab, teilst du bei deiner Rechnung nicht einmal zu viel? Ich kann momentan nicht nachvollziehen, woher du das /2 hast. (Käme dann auf 33MB)

Und verstehe ich richtig, du zeigst doch 3 Spektren an (2x Original + Differenz)?

Dann zum 3D-Graph: Aus eigener leidvoller Erfahrung, das Element ist langsam und sehr speicherintensiv. Ich hatte mal Versuche mit großen Matrizen gemacht und mir die Erhöhung des Speicherbedarfs mit Windows-Taskmanager angeschaut, im Maximum verbraucht der 3D-Graph 6 oder 7 mal mehr Platz, als was du in der Matrix ausgerechnet hast, geht nach Anzeige wieder auf 3 oder 4 mal zurück.

Und dann musst du bei so großen 2D-Arrays natürlich auch noch höllisch aufpassen und das ganze LV-intern so speicherplatzsparend wie möglich programmieren, also keine Anzeige der 2D-Arrays auf FP, keine lokalen Kopien, immer schön Datenfluss-gesteuert programmieren, Speicher wiederverwenden, keine Operationen (wie Build Array), die eine Zerstückelung des Speichers nach sich ziehen usw usw usw

MfG, Jens
Das /2 kommt durch Nyquist: Man kann ja nur bis zur halben Abtastfrequenz arbeiten. 22kHz sollten für Musik aber auch ausreichenSmile

Ich lasse mir sogar 4 Spektren anzeigen. Wie du richtig meinst 2x Original, 1x Differenz und dann noch ein weiteres für Umschaltimpulse. Das kommt daher, dass ich von der Musikdatei nur auf einem Kanal Musik, auf dem anderen Kanal immer Umschaltimpulse aufzeiche. Aber selbst dann läge man ja noch gut unter 100Mb.

Zitat:Und dann musst du bei so großen 2D-Arrays natürlich auch noch höllisch aufpassen und das ganze LV-intern so speicherplatzsparend wie möglich programmieren, also keine Anzeige der 2D-Arrays auf FP, keine lokalen Kopien, immer schön Datenfluss-gesteuert programmieren, Speicher wiederverwenden, keine Operationen (wie Build Array), die eine Zerstückelung des Speichers nach sich ziehen usw usw usw
Das hatte ich auch schon häufiger gelesen. Ich hoffe, da nicht viel falsch gemacht zu haben (ich werde nachher mal versuchen, eine kleine lauffähige Version hier reinzustellen)

Zitat:Dann zum 3D-Graph: Aus eigener leidvoller Erfahrung, das Element ist langsam und sehr speicherintensiv. Ich hatte mal Versuche mit großen Matrizen gemacht und mir die Erhöhung des Speicherbedarfs mit Windows-Taskmanager angeschaut, im Maximum verbraucht der 3D-Graph 6 oder 7 mal mehr Platz, als was du in der Matrix ausgerechnet hast, geht nach Anzeige wieder auf 3 oder 4 mal zurück.
Doof das.Sad Gibt es eine Faustregel, ab welcher Matrix-Größe die 3D Darstellung ungünstig wird? Ist eine solche Anzeige in MatLab besser realisiert? Zur Not würde ich dann vielleicht umsatteln müssen. Wie gesagt, zur Not.
Autsch, 4 Spektren, dann schluckt der 3D-Graph mglw. bis zu 700MB.

Das kannst du übrigens bei so großen Arrays über den Task-Manager von WinXP oder Win2k super verfolgen und somit auch Analyse betreiben, wieviele Kopien mglw. angelegt werden.

Zur Frage, ob Matlab besser ist, keine Ahnung.

Einzige Idee noch: Daten vor der Darstellung im 3D-Graphen resamplen und reduzieren.

MfG, Jens
Jop, bei dem Taskmanager sieht man die exorbitante Nutzung des Speichers recht schnell. Allerdings frisst es auch schon unglaublich viel Speicher, allein die insgesamt 10Mb an .wav Dateien einzulesen... :-

Zitat:Einzige Idee noch: Daten vor der Darstellung im 3D-Graphen resamplen und reduzieren.

Davor wollte ich mich eigentlich drücken, aber mir wird wohl nix anderes übrig bleiben...
Referenz-URLs