(22.05.2013 23:13 )Tobi_J schrieb: [ -> ]Da nun alles Funktioniert versuche ich Gerd sein VI zu verstehen, allerdings verstehe ich nicht wie die einzelenen Werte aufsummiert werden.
Die For-Schleife wird ja solange durchlaufen wie er neue Werte aus der Datei einlesen kann. Nur wieso ist ein Sinussignal in der For-Schleife und eins auserhalb ?
Würde es so nicht den Anfangswert + Aktuell gelesenen For-Wert Addieren ?
Das Sinussignal vor der Schleife ist für die Initialisierung des Shift Registers. Die zugehörigen "Delete Array Element" löschen den ersten Parametersatz aus deinem Array, welcher für die Initialisierung verwendet wird. Die For-Schleife wird dann n-1 mal durchlaufen und addiert das jeweils neue Sinussignal auf die bisherige Summe aller vorangegangen Sinussignale. Über das Shift Register wird der jeweils bisherige Summenwert gespeichert und enthält nach Ende der For-Schleife das gesamte Summationsergebnis.
Hallo Tobi,
wenn du das Schieberegister nicht (ordentlich) initialisierst, klappt die Addition in der Schleife nicht. Deshalb wird der erste Sinus vor der Loop berechnet, um damit das SR zu initialisieren. Der Rest erfolgt dann platzsparend in der Schleife.
Merksatz für dich bei dieser Aufgabe:
Alles, was du mehrfach gleich in einem Blockdiagramm erledigst, kann genauso gut von einer Schleife erledigt werden. Dank Autoindexing erfolgt das in LabVIEW meist noch effizienter als in anderen Programmiersprachen...
Also ich würde sagen, dass das hier alles auf einem Holzweg läuft.
Denn bei dem vorgegebenen Spektrum handelt es sich doch eindeutig um die ersten 5 Spektralkomponenten eines symmetrischen Sägezahns mit dem Bildungsgesetz der Ampituden 1; 1/3²; 1/5²; 1/7²;...
Aber, und jetzt kommts: diese Spekralkomponenten sind reell, nicht imaginär - also genau so wie es in den Array-Werten geschrieben steht. Und das heißt im Klartet: Es sind Cosinusfunktionen aufzusummieren, und nicht Sinusfunktionen, wie ihr das hier alle gemacht habt.
Habe das Aufsummieren mal gemacht - mit der inversen FFT-Funktion, die ja auch nichts anderes macht:
[
attachment=44732]
[
attachment=44733]
Edit: Da das noch niemand hier gelesen hat, hänge ich mal das modifizierte VI (Cos statt Sinus) von Gerd mit an. Da kommt natürlich das Gleiche heraus:
[
attachment=44739]
hey Lucki,
Bei der Berechnung wurden nicht die Original Formeln angewendet, zur Vereinfachung wurde mit einer reinen reellen Vereinfachung Gerechnet und nicht die imaginär.
Das Thema Fourier Synthese wurde bei uns nur Oberflächlich angeschnitten in Bezug auf LabVIEW.
Für jegliche Hilfestellungen bzw. Korrekturen bin ich offen und möchte mich im Vorfeld dafür bedanken.
Anbei die Vereinfachte Berechnung.
Wenn ich mit dieser Berechnung + die Erweiterte VI von Gerd arbeite und z.B 30 x die Berechneten werte Anzeigen lassen ergibt sich das im Unteren Bild dargestellte Rechteck-Signal (angenähert)
@Lucki, deine angehängeten VI's kann ich leider mit meiner 2009 Version nicht öffnen.
Das verstehe ich ja überhaupt nicht:
Im Posting #1 gibst Du als "einzulesende Datei"
diese Werte an:
Spannung
5.00 0.56 0.20 0.10 0.06
Frequenzen
50.00 150.00 250.00 350.00 450.00
Was ganz klar die ersten 5 Frequenzkomponenten eines symmetrischen Sägezahns sind. In Deinen VIs aber, von denen man denken sollte, dass sie sich auf eben diese Daten beziehen, wird statt desen mit Rechtecken herumhantiert. Was soll das?
Die Fourierzerlegung einer geraden Dreieckschwingung Frequenz f mit Spitzenwert A ist:
f(x) = 8A/Pi² [1/1²*cos(1*x) + 1/3²*cos(3x) + ...
wobei x = 2Pi*f*t
Mit 8A/Pi² = 5 ergeben sich als Komponenten genau die Amplituden in Deiner Datei.
Habe weiter oben die Versionen korrigiert, das war ein Versehen.
Jup, hast du Recht!!!
In unserem C Programm sollen wir sowohl Rechteck, Dreieck und Sägezahn Berechnen!
Ist mein Fehler, mit den Sägezahn Werten.
Es sollten aber die Rechteck Werte dargestellt werden, da für die Anzeige der Sägezahn und Dreiecks Berechnung ein andere LabVIEW Schaltung benötigt wird, da dort die einzelnen Faktoren nicht "nur" Addiert werden sondern die erste Oberschwingung von der zweiten Subtrahiert wird usw.
Siehe Anhang.
Daher würde ich vermuten dass deine Formel so nicht ganz richtig ist!
Oder meinst du mit symmetrisch Sägezahn das diese nur aufaddiert werden ?? Diese "Methode" ist mir nicht bekannt...."
Hallo Tobi,
Zitat:nicht nur Addiert werden sondern die erste Oberschwingung von der zweiten Subtrahiert usw.
Will sagen: wenn man die Faktoren negiert, muss man das Programm nicht ändern... (Hat irgendwas mit Grundrechenregeln zu tun.
)
Hey Gerd
Ich wollte damit ausdrücken das es mit dem VI für Rechtecke nicht möglich ist eine Sägezahn darzustellen ("Ohne Änderung der Rechenart") bzw. es ist bestimmt möglich bei LabVIEW eine Wahl Funktion einzubinden die bei Start des VI fragt welche Daten Verarbeitet werden. Aber wie das in LabVIEW funktionieren soll ist mir ein Rätsel ;-)
Zumal die Formel für Dreieck und Sägezahn so lauten würde.
1Oberschwingung – 2Oberschwingung + 3Oberschwingung – 4Oberschwingung +5Oberschw…….
Hallo Tobi,
Zitat:wie das in LabVIEW funktionieren soll ist mir ein Rätsel ;-)
Es gibt genügend mitgelieferte Beispiele, die eine Enum-Auswahl mit einer Case-Struktur verbinden
Zitat:Zumal die Formel für Dreieck und Sägezahn so lauten würde.
1Oberschwingung – 2Oberschwingung + 3Oberschwingung – 4Oberschwingung +5Oberschw…….
Meine Rede: Resultat = Summe ( x * sin(wt) ).
Wie oben schon erwähnt kann x abwechselnd positiv/negativ sein! Oder sind deine Faktoren immer positiv aufgrund irgendeiner vom Lehrer vorgegebenen Beschränkung?
Also in C gebe ich nur positive Werte aus.
Ist es möglich einen Wert in LebVIEW einzulesen der z.B -20 betragen würde, erkennt LebVIEW beim einlesen das dieser Wert negativ ist?
Eine frage noch Gerd, Wo finde ich in LebVIEW die hinterlegten Beispielprogramme ?