Verfasst am: 08.05.2016, 14:22
Titel: Fehlersuche im Skript
Hallo Community,
ich arbeite erst seit kurzem mit Matlab und steige Stück für Stück tiefer ein.
Für meine Masterarbeit wollte ich die Impedanz bei einem gestuften Rohr berechnen, allerdings sind die erhaltenen Werte zu groß.
Daher wollte ich fragen, ob sich jemand mein Skript anschauen und auf eventuelle Fehler prüfen könnte. Matlab selbst meckert zwar nicht mehr rum, aber vielleicht ist ja dennoch ein Fehler vorhanden.
Wenn man nur den Code sieht, ist es nahezu unmöglich den Fehler zu finden, denn wir kennen nicht die Formel, die Du implementierst.
Wieso meinst Du, dass die Ergebnisse "zu groß" sind?
Hallo Jan,
danke für deine Antwort. Erstaunlich wie viel ein bisschen Formatierung ausmachen kann .
Ich habe die Formeln zusammen mit einer kleinen Skizze noch einmal aufgeschrieben. z_(N+1) wird an der rechten Seite als Ausgangswert genommen. Anschließend hangelt man sich von Querschnittssprung zu Querschnittssprung, bis man am Anfang bei S_(i-1) angekommen ist. Mit deser Anfangsimpedanz z_E(0) lässt sich der Reflexionsfaktor r_E bestimmen, daraus der Transmissionsfaktor tau und letztendlich das Einfügungsdämmmaß R. In meinem Modell habe ich 3 Querschnittssprünge.
Als Ergebnis hätte ich maximal 15dB erwartet. 80dB sind sehr unrealistisch, zumal der Wert logarithmisch eingeht. Daher meine Vermutung, irgendwo einen Fehler gemacht zu haben.
Hallo,
ich habe das Skript ein bisschen modifiziert, um die Rohrteilung beliebig fein einstellen zu können. Dafür verwende ich die Variable incr und schicke dann alles durch eine Schleife, in der j==1 noch mal extra verarbeitet wird.
Mein Problem ist nun, dass scheinbar die falschen werte für s (Querschnittsfläche) verwendet werden.
Die Formeln entsprechem dem, was ich schon ma gepostet habe.
for j=1:(incr-2) if j==1
z_0(j,:) = z_out;
z_l(j+1,:) = s(j)/s(j+1).*z_0(j);
else
z_0(j,:) = (z_l(j).*fac_1+sum_fac1)./(z_l(j).*fac_2+sum_fac2).* z_out;
z_l(j+1,:)= s(j)/s(j+1)*z_0(j);
end end
z_0(incr-1,:) = (z_l(incr-1).*fac_1+sum_fac1)./(z_l(incr-1).*fac_2+sum_fac2).* z_out;
re = (s(incr)/s(incr-1)*z_0(incr-1,:)./z_out)./(s(incr)/s(incr-1)*z_l(incr-1,:)./z_out+1);
tau = 1-(abs(re)).^2;
R = -10*log10(tau);
plot(freq,R) title('Matlab') xlabel('Frequenz [Hz]') ylabel('Transmission Loss')
Was mir noch aufgefallen ist: der erste else-Durchlauf liefert die richtigen Werte. Bei einem weiteren, also j=3 kommt nur noch Quatsch raus. Ich habe mal die Werte für freq=0Hz durchgerechnet und erhalte für z_0(j=3)=2292,1. Matlab gibt mir aber einen Wert um die 584,2 aus.
Ist die Schleife irgendwie vermurkst?
Über Feedback jeglicher Art bin ich sehr dankbar.
for j=1:(incr-2) if j==1
z_0(j,:) = z_out;
z_l(j+1,:) = s(j+1)/s(j).*z_0(j);
else
z_0(j,:) = (z_l(j).*fac_1+sum_fac1)./(z_l(j).*fac_2+sum_fac2).* z_out;
z_l(j+1,:)= s(j)/s(j+1)*z_0(j);
end end
z_0(incr-1,:) = (z_l(incr-1).*fac_1+sum_fac1)./(z_l(incr-1).*fac_2+sum_fac2).* z_out;
re = (s(incr)/s(incr-1)*z_0(incr-1,:)./z_out)./(s(incr)/s(incr-1)*z_l(incr-1,:)./z_out+1);
Was mir noch aufgefallen ist:
z_l ist eine reelle Matrix , ganz ohne komplexe Zahlen, was aber nicht sein kann, da sich z_l aus der komplexen Matrix z_0 ergibt multipliziert mit einem Skalar....Muss man bei komplexen Matrizen was besonderes beachten?
Hab den Fehler gefunden.
Ich habe bei den Matrizen z_l und z_0 vergessen, die ganze Matrix zu multiplizieren.
Also Anstatt z_l(j) hätte ich wieder z_l(j,: ) schreiben müssen. Das Gleiche bei z_0.
Damit ist das Problem vorerst gelöst^^
Einstellungen und Berechtigungen
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.