Akustische Raummodi dargestellt
Die Schwingungsmodi in einem Raum sind sehr wichtig für die Akustik des Raumes. Für quaderförmige Räume sind diese relativ einfach ohne FEM zu rechnen. Dazu kann man gnuplot verwenden.
#!/usr/bin/gnuplot # ein paar wichtige Parameter sind in dieser Datei definiert # -------------------- CONFIG START ------------------------------ RAUMNAME='W' # ------------------------------------------ CONFIG END --------------------- TITEL='Raummoden im '.RAUMNAME PDF='Raummodi.'.RAUMNAME.'.pdf' DATA='Raummodi.'.RAUMNAME.'.csv' CONF='Raummodi.'.RAUMNAME.'.inc' file_exists(file) = system("[ -f '".CONF."' ] && echo '1' || echo '0'") + 0 # Existiert die Datei? if ( file_exists("mydatafile")) { load CONF } else { # Wenn nicht dann erzeugen set print CONF print "MaxMode=6" print "#Abmessungen in Meter, Dezimaltrenner Punkt!" print "X=2.3" print "Y=4.0" print "Z=6.7" set print print "Datei ".CONF." erzeugt, bitte Einträge anpassen und nochmal starten" } set decimalsign ',' # dies wirkt nicht auf sprintf, nur auf gprintf set terminal pdf enhanced font 'arial,12' size 21cm,29.7cm # Nach dieser Formel wird die Frequenz zum jeweiligen Raummodus berechnet Fres(x,y,z)=343/2.0 * sqrt( (x/X)**2.0 + (y/Y)**2.0 + (z/Z)**2.0) # Jetzt werden alle Daten berechnet und in eine CSV Datei geschrieben, # diese wird später zum Plotten eingelesen set print DATA # die Axialmodi zuerst: "Modus Frequenz Farbe Modistärke" M2=0 M3=0 do for [M1=1:MaxMode] { print M1, "-", M2, "-", M3," ",Fres(M1,M2,M3)," 1 6.5" } print "" print "" M1=0 M3=0 do for [M2=1:MaxMode] { print M1, "-", M2, "-", M3," ",Fres(M1,M2,M3)," 2 6.5" } print "" print "" M1=0 M2=0 do for [M3=1:MaxMode] { print M1, "-", M2, "-", M3," ",Fres(M1,M2,M3)," 3 6.5" } print "" print "" # Tangentialmoden X1=0 do for [X2=1:MaxMode] { do for [X3=1:MaxMode] { print X1, "-", X2, "-", X3," ",Fres(X1,X2,X3)," 4 4" } } print "" print "" X2=0 do for [X1=1:MaxMode] { do for [X3=1:MaxMode] { print X1, "-", X2, "-", X3," ",Fres(X1,X2,X3)," 5 4" } } print "" print "" X3=0 do for [X1=1:MaxMode] { do for [X2=1:MaxMode] { print X1, "-", X2, "-", X3," ",Fres(X1,X2,X3)," 6 4" } } print "" print "" # # Obliqemoden do for [X1=1:MaxMode] { do for [X2=1:MaxMode] { do for [X3=1:MaxMode] { print X1,"-",X2,"-",X3," ",Fres(X1,X2,X3)," 7 1" } } } # Ende der Datenerzeugung in die DATA Datei set print set output PDF set xtics 10 set ytics 1 textcolor rgb "white" set mxtics 5 #border in scale 0,0 mirror norotate offset character 0, 0, 0 set grid xtics mxtics ytics # gprintf kann nur jeweils ein Argument, beachtet dafür aber decimalsign. # Deshalb die Schachtelung sprintf(gprintf...)) set title sprintf("Schwingungsmodi %s (%s×%s×%s = %s)m³", TITEL, gprintf("%.2f",X), \ gprintf("%.2f",Y), gprintf("%.2f",Z), gprintf("%.2f",X*Y*Z)) font ",18" #unset ytics # Aufteilung in drei Teildarstellungen, weil sonst die Werte zu oft überlappen set multiplot layout 3,1 scale 0.95,0.9 offset 0,0.015 # Das sind die Korrekturwerte für die Position der Labels du=0.10 # Untergrenze für die Errorbars k=7 # Anzahl der Serien in DATA # Den X-Bereich auf 0…100Hz begrenzen, die Errorbars manuell so setzen, # dass senkrechte Linien bis zum Datenpunkt entstehen set xrange [30:120] set yrange [0:10] set size 0.95,0.3 set origin 0.01,0.67 plot for [i=1:k] DATA index i using 2:($4):(sprintf("%s Hz (%s)",\ gprintf("%.2f",$2),stringcolumn(1))):3 \ with labels offset char -0.3,4 tc variable rotate by 90 notitle, \ for [i=1:k] DATA index i using 2:($4):(du):($4):3 with errorbars notitle lc variable # Den X-Bereich auf 100…200Hz begrenzen und den Titel nicht wiederholen set xrange [120:210] unset title set size 0.95,0.30 set origin 0.01,0.35 plot for [i=1:k] DATA index i using 2:($4):(sprintf("%s Hz (%s)",\ gprintf("%.2f",$2),stringcolumn(1))):3 \ with labels offset char -0.3,4 tc variable rotate by 90 notitle , \ for [i=1:k] DATA index i using 2:($4):(du):($4):3 with errorbars notitle lc variable # Den x-Bereich auf 200…300Hz begrenzen und die X-Achsenbeschriftung nur hier abringen set xlabel "Frequenz in Hz" set xrange [210:300] set size 0.95,0.30 set origin 0.01,0.03 plot for [i=1:k] DATA index i using 2:($4):(sprintf("%s Hz (%s)",\ gprintf("%.2f",$2),stringcolumn(1))):3 \ with labels offset char -0.3,4 tc variable rotate by 90 notitle, \ for [i=1:k] DATA index i using 2:($4):(du):($4):3 with errorbars notitle lc variable unset multiplot #ENV="exiftool -P -overwrite_original -PDF:Title=\"".TITEL."\" -PDF:Subject=\"Raummodi\" ".PDF #system ENV