WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fehlersuche im Skript

 

ChrisO
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.05.16
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 08.05.2016, 15:22     Titel: Fehlersuche im Skript
  Antworten mit Zitat      
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.

Gruß
Christoph

Kammer_Kombination.m
 Beschreibung:

Download
 Dateiname:  Kammer_Kombination.m
 Dateigröße:  1.17 KB
 Heruntergeladen:  483 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.05.2016, 20:51     Titel: Re: Fehlersuche im Skript
  Antworten mit Zitat      
Hallo ChrisO,

Ich habe es optisch ein wenig vereinfacht:
Code:
l2     = 0.2;              %m Länge des mittleren Abschnittes
l3     = 0.2;              %m
c      = 343;              %m/s Schallgeschw.
S1     = 0.15^2*pi/4;      %m^2 Querschnitt erstes Rohr
S2     = 0.11^2*pi/4;      %m^2
S3     = 0.07^2*pi/4;      %m^2
S4     = 0.03^2*pi/4;      %m^2
roh    = 1.183892;         %kg/m^3
freq   = linspace(80,2000,2000);%1/s Frequenz
% freq = 80:100:2000;     %Hz
% freq = 1000:1000:2000
omega  = freq*2*pi;        %Kreisfrequenz


k      = omega ./ c;
z40    = roh * c;
sinkl2 = sin(k * l2);
sinkl3 = sin(k * l3);

z3l3 = S3 / S4 * z40;
z30  = (z3l3 .* cos(k * l3) + 1i * sinkl3 * z40) ./ ...
       (1i * z3l3 ./ z40 .* sinkl3 + sinkl3);
z2l2 = S2 / S3 * z30;
z20  = (z2l2 .* cos(k * l2) + 1i * sinkl2 * z40) ./ ...
       (1i * z2l2 ./ z40 .* sinkl2 + sinkl2);
rE   = (S1 / S2 * z20 ./ z40 - 1) ./ (S1 / S2 * z20 ./ z40 + 1);
tau  = 1 - abs(rE) .^ 2;
R    = -10 * log10(tau);

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?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ChrisO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.05.16
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 09.05.2016, 09:24     Titel:
  Antworten mit Zitat      
Hallo Jan,
danke für deine Antwort. Erstaunlich wie viel ein bisschen Formatierung ausmachen kann Wink.
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.

Gruß
Christoph

Skizze_Formeln_Trans_Loss.PNG
 Beschreibung:

Download
 Dateiname:  Skizze_Formeln_Trans_Loss.PNG
 Dateigröße:  33.6 KB
 Heruntergeladen:  474 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
ChrisO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.05.16
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 19.05.2016, 11:08     Titel:
  Antworten mit Zitat      
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.

Vielen Dank für eure Hilfe

Code:
freq    = linspace(80,2000,1920);

omega   = freq*2*pi;
c       = 343.24;       %m/s
k       = omega/c;      %1/m
roh     = 1.2041;       %kg/m^3
l       = 0.3;          %m Gesamtlänge
z_out   = roh * c;      %Impedanz am Output
incr    = 4;           %Auflösung

d       = linspace(0.15,0.04,incr);%durhmesser der einzelnen Rohre (Vektor)
s       = pi*(d/2).^2;

d_l     = l/incr;


fac_1 = 1/z_out*cos(k*d_l);
sum_fac1 = i*sin(k*d_l);
fac_2 = i/z_out*sin(k*d_l);
sum_fac2 = cos(k*d_l);
z_0=zeros(incr-1,1920);
z_l=zeros(incr-1,1920);

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')
Private Nachricht senden Benutzer-Profile anzeigen
 
ChrisO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.05.16
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 23.05.2016, 16:30     Titel:
  Antworten mit Zitat      
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.

Gruß
ChrisO


Code:
freq    = linspace(0,2000,2000);

omega   = freq*2*pi;
c       = 343.24;       %m/s
k       = omega/c;      %1/m
roh     = 1.183892;     %kg/m^3
l       = 0.5;          %m Gesamtlänge
z_out   = roh * c;      %Impedanz am Output
incr    = 5;           %Auflösung

d       = linspace(0.04,0.15,incr);%durhmesser der einzelnen Rohre (Vektor)
% d       = linspace(0.15,0.04,incr);
s       = pi*(d/2).^2;

d_l     = l/incr;


fac_1 = 1/z_out*cos(k*d_l);
sum_fac1 = i*sin(k*d_l);
fac_2 = i/z_out*sin(k*d_l);
sum_fac2 = cos(k*d_l);
z_0=zeros(incr-1,2000);
z_l=zeros(incr-1,2000);

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);
Private Nachricht senden Benutzer-Profile anzeigen
 
ChrisO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.05.16
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 27.05.2016, 19:32     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
ChrisO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.05.16
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 29.05.2016, 22:35     Titel:
  Antworten mit Zitat      
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^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.