Resonanzfrequenz berechnen
-
Was ist deine Frage? Weißt du nicht, wie du rechnen sollst? Weißt du nicht, wie du die Rechnung als Algorithmus umsetzen sollst? Mit C hat die Frage jedenfalls erst einmal gar nichts zu tun, daher werde ich den Thread abhängig von deiner Antwort verschieben.
Weiterhin ist dein Problem unklar beschrieben. Es steht nur fest, dass du Werte aus einer Datei liest und daraus etwas berechnen möchtest. Du kannst weder erwarten, dass sich hier jeder Elektrotechnik auskennt, noch dass man die Schwierigkeiten die du damit hast allein daran nachvollziehen kann, dass du sagst, dass du Schwierigkeiten hast.
-
Ja, ich hab es schon verstanden was Seppj sagte.
Ich erkläre die Situation nochmal:
In dieser Textdatei stehen folgende Werte:R, 200 L, 0.001 L, 0.0017 C, 0.01 C, 0.0022 R, 4700 R, 2200
Die 1. Spalte steht für den Typ des Bauteils(Widerstand, Kondensator und Spule), die 2. Spalte steht für den Wert des Typen.
* a) Lesen Sie die Bauteile vom File und geben Sie in einer Tabelle aus. (Stückliste) * b) Lesen Sie die Bauteile vom File und geben Sie die Komplexen Widerstandswerte aus. * Verwenden Sie die Frequenzen 0, 100Hz, 1000Hz, 100000Hz. * c) Lesen Sie die Bauteile vom File berechnen Sie die Parallelschaltung aller Bauteile. * Verwenden Sie die Frequenzen 0, 100Hz, 1000Hz, 100000Hz. * d) Lesen Sie die Bauteile vom File berechnen Sie die Serienschaltung aller Bauteile. * Verwenden Sie die Frequenzen 0, 100Hz, 1000Hz, 100000Hz. * e) Berechnen Sie die Resonanzfrequenz von c) und d).
Ich hab alle Aufgaben gelöst außer die Aufgabe e.
Wie gesagt wenn jetzt z.B. ein Kondensatorwert dazu kommt in der Textdatei dann ist ja meine Formel die ich vorher mit dem Papier berechnet habe nich mehr gültig..
Die Frage ist nun, wie im letzten Beitrag von mir schon gesagt, ob man das übergehen kann?
-
Du musst natürlich eine Formel aufstellen, die Parameterabhängig von der Anzahl der Bauteile ist. (Was du aber auch schon bei c) und d) musstest...)
-
Du musst das, was du auf dem Papier machen würdest möglichst abstrakt formulieren und einprogrammieren. Du gehst ja bei der Papierrechnung auch nicht jedes Mal neu dran und forscht erst einmal nach, wie man das überhaupt ausrechnet. Du hast da doch irgendein Kochrezept, wie man das macht. Und eben das nennt man einen Algorithmus und das können Computer in der Regel ungeheuer gut. Weil ich von Elektrotechnik fast keine Ahnung (mehr) habe, kann ich dir nicht konkreter helfen. Wäre daher gut, wenn du mal erklärst, wie man das rechnen würde.
-
Einen Algorithmus aufzustellen für Paralell+Serienschaltung war ganz einfach.., aber das mit Resonanzfrequenz fällt mir schwer.
Das mit der Resonanzfrequenz habe ich mir folgender Maßen vorgestellt:
Sagen wir als Bsp haben wir einen Kondensator mit einen Widerstand in Serie geschaltet.
Zuerst muss man den komplexen Gesamtwiderstand, die Impedanz berechnen und daraus von Real- und Imaginärteil unterscheiden:Impedanz:
R ist der Realteil und der Rest der ImaginärteilHier einfach auf omaga und dann auf f umformen, dann hat man die Resonanzfrequenz:
Ich hab ja im meinem Textfile 7 Bauteile. Ja ich könnte sie Händisch berechnen, aber das wäre dann kein Algorithmus.
Ich weis nicht wie ich mit so einem Algorithmus anfangen soll, leider...
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wie rechnet man denn bei 7 Bauteilen?
-
mr_guest123 schrieb:
Ich weis nicht wie ich mit so einem Algorithmus anfangen soll, leider...
Du hast irgendwo eine Gleichung. Du weißt dass du in der Textdatei (hoffentlich) alle bis auf einen Parameter gegeben haben wirst. Du stellst die Gleichung also einfach so um, dass da steht:
unbekannt = bekannt1 * bekannt2 / bekannt3 ...
Und schon bist du fertig. Jetzt machst du dir eine Funktion:double calc(double bekannt1, double bekannt2, double bekannt3, ...) { return bekannt1 * bekannt2 / bekannt3 ...; }
-
Ok das geht so:
Impedanz:
Davon der Realteil:
Davon der Imaginärteil:
Und den Imaginärteil einfach auf 0 setzen und dann wie folgt auf Omega umformen:
-
Also allgemein
Kannst du es nun umformen?
-
Ok, das mit dem Summenzeichen verstehe ich aber wie kommt du auf Omega² ?
-
mrguest_123 schrieb:
Ok, das mit dem Summenzeichen verstehe ich aber wie kommt du auf Omega² ?
So wie du auf die Wurzel als Lösung kommst.
-
Sorry, aber irgendwie bin ich ein bisschen verwirrt.
Wo ist das Omega beim C unten? "urde Omega² rausgehoben aus beiden Termen? Oder ist das einfach nur beim L?
Ich hab das ganze einfach auf Gemeinsamen Nenner gebracht und dann Omega herausgehoben --> Quadrat gebildet und da kam die Wurzellösung raus.
Erklär mir bitte deinen Weg.
-
Ich habe mit omega multipliziert. Fertig.
-
Ah ok danke ich verstehe!
Umgeformt auf Omega wäre das dann:
Und dies wäre meine Formel für Omega? Das Summenzeichen muss ich dann halt noch programmieren eventuell mit einer Schleife und "summe_C=summe_C+wert".
So ca.?
-
Ja.
-
Ok gut gut.
Ich lese die Datei aus und berechne den Komplexen Widerstand von Spule, Kondensator und Widerstand. Diese Werte speichere ich dann in ein Array z.B..
Aber nun weiß ich ja nicht mehr was jetzt der komplexe Widerstand von Spule oder Kondensator ist.Ich weiß nur am Anfang mit Hilfe von if()-anweisungen was ein C, L oder R ist:
complex* calc_complex_Z(components* rlc, int f, int len) { complex* r_compl=NULL; complex* hilf=NULL; int x=0; r_compl=malloc(sizeof(complex)* len); if(r_compl != NULL) { hilf=r_compl; while(x<len) { if(rlc->componentType == 'R') { r_compl->real=(int)rlc->rlcValue; r_compl->imag=0; } if(rlc->componentType == 'L') { r_compl->imag=2*3.14*f*rlc->rlcValue; r_compl->real=0; } if(rlc->componentType == 'C') { r_compl->imag=-1/(2*3.14*f*rlc->rlcValue); r_compl->real=0; } x++; r_compl++; rlc++; } } else { printf("Memory allocation failure!"); } return(hilf); }
Vielleicht sollte 3 verschiedne Struktur machen. Also eine für die ganzen Widerstände, eine für Spulen und eine für Kondensator.
In etwa so:
struct complex_r { double real; double imag; }; struct complex_l { double real; double imag; }; struct complex_c { double real; double imag; };
Gibts da ne besser Lösung bzw. wie findet ihr meine Idee?
-
mrguest_123 schrieb:
Vielleicht sollte 3 verschiedne Struktur machen. Also eine für die ganzen Widerstände, eine für Spulen und eine für Kondensator.
[...]
Gibts da ne besser Lösung bzw. wie findet ihr meine Idee?
Ich bin überrascht, dass du es bis jetzt nicht so gemacht hast. Ist aber gut.
Wobei es aber auch ziemlich übertriebener Aufwand ist. Schließlich könntest du auch einfach direkt alle gefragten Größen beim Einlesen berechnen, ohne irgendetwas zwischenspeichern zu müssen.
-
Danke!
Ich hab mir mal die Paralellschaltung genauer unter die Lupe genommen, aber leider komme ich nicht auf den algorithmus... da muss man voll konjugiert komplex erweitern etc. ist ja auf dem Blattpapie nicht schwer.
Sagen wir ich hab eine Paralellschalung bestehend aus einem Widerstand, einer Spule und einem Kondensator.
Der komplexe Gesamtwiderstand würde so aussehn:
Auf gemeinsamen Nenner gebracht und dann Doppelbruch aufgelöst:
Wenn man jetzt auf Omega umformt müsste man konjugiert komplex Erweitern etc. das weis ich auch wie es funktioniert. Das wird eine lange Formel. Und mit 7 Bauteilen rechnen wird das erst lustig
.
Aber ich soll ja einen Algorithmus finden.
Wenn jetzt z.B. ein 2ter Kondensator paralell hinzu geschaltet wird dann würde überall wo C steht noch z.B. C2 hinzu multipliziert werden.
Muss ich das so machen wie oben beschrieben? Oder gibts da einen einfacheren Weg?
-
Mulitpiliziert? Das passt doch gar nicht von den Einheiten. Bist du sicher?
Und wen du so etwas selber lösen willst: Denk abstrakter. Nicht immer am konkreten Beispiel, stell die allgemeine Formel für N Widerstande, M Spulen und O Kondensatoren auf. Klammer Vorfaktoren aus. Fasse Summen und Produkte gleichartiger Größen zusammen. Und dann formst du um.