Hallo, ich habe leider keinerlei Erfahrung mit der Rechenleistung von µCs und hoffe, dass ich mich für diese Frage nicht in Grund und Boden schämen muss;-) Ich möchte aus einem Signal, dass ich mit 80 kHz abtaste, herausfinden, welche Phasenlage meine Grundwelle mit 5 kHz hat. Zur Verfügung steht mir hierzu ein Infineon C167 bei ca. 20 MHz. Die Berechnung soll kontinuierlich ablaufen und mir immer möglichst schnell ein Ergebnis liefern; maximale Rechenzeit wäre die Periodendauer der Grundwelle (1/5kHz). Ich bin jetzt davon ausgegangen, dass ich hierfür einen möglichst einfachen DFT-Algorithmus (KissFFT?) verwenden würde. Wie gesagt, die einzig relevante Information die ich extrahieren möchte ist die Phasenlage. Ich brauche jetzt keine reale Implementierung/ Code. Ich müsste nur wissen, ob es geht und welche Rechendauer ich zu erwarten habe. Ich hoffe ich hab alle wichtigen Informationen genannt, ansonsten geb ich mein Bestes alles nötige nachzuliefern. Vielen Dank Philipp
Braucht man dazu eine FFT? Das müsste doch mit dem Signal selbst gehen, wenn dessen Frequenz bekannt ist.
Hallo, ich weiß leider nicht wie ich das anders bestimmen kann, hättest du da einen Tipp? Es handelt sich um einen mehr oder weniger rechteckförmigen Signalverlauf. Dieser kann aufgrund von Lastsprüngen auch mal einen "Zwischendip" aufweisen. Der Algorithmus darf sich davon aber nicht ablenken lassen. Die Frequenz ist bekannt.
Hi, also wenn deine Grundwelle @ 5kHz nahezu konstant ist und wirklich die Grundwelle gefordert wird, reicht es aus, nur den "DFT-Algo für die Grundwelle"* rüberzuwerfen, unter der Vorraussetung, dass dein Fenster genau einer Periodendauer entspricht. Damit wirst Du schneller sein als mit einer FFT, da du die DFT nicht vollständig durchführen musst, sowie es bei einer FFT der Fall wäre. *Erläuterung: Frequenzvektor Ergebnis d. DFT typische DFT-Matrix SAMPLES [f_dc f_0 f_1 ... f_n]^T = [complexe Matrix] * [s_0 s_1 ... s_n]^T ^T => transponiert Die Grundwelle findet sich bei f_0, das ergibt eine Vektormultiplikation mit dem 2tem Zeilenvektor der Martix mal SAMPLES. Die Zwischendips sollten keinen Einfluss mehr haben. So würde ich das veruschen. Phasenlage (zum Beispiel) zur Spannung: Die DFT zum Spannungsnulldurchgang starten -> Fenster ist dein neues Bezugssystem, ansonsten gleichzeitig auch noch die DFT über die Spannung prügeln. für einen Phasenwinkel: Rechenzeit:= 2*SAMPLES == Multiplikationen, da complexe Matrixelemente a+jb +2*SAMPLES == Additionen +arctan(Im/Re) für die Phasenlage
Danke! Das ist genau das, wonach ich gesucht habe. Hab mich nie so genau mit der Materie befasst und wusste gar nicht, dass es solch einen einfachen Algorithmus gibt. Ich gehe jetzt mal davon aus, dass ich diese einfache Implementierung auch locker mit dem C167 in gegebener Zeit schaffe. Habe das gerade mal in Mathcad ausprobiert und da kommen auch gute Lösungen raus. Ich denke die Genauigkeit reicht mir. Vielen Dank!
Keine Ursache, ich habe mit diesem Konzept in MATLAB mal Zeitbereichsmessungen auswerten müssen, und es war eben nur die Phasenverschiebung der Grundwellen gefordert. Es waren einige hundert Messungen, da wäre eine FFT viel zulangsam gewesen, zu mal die Zeitbereiche(50kSamples+) nicht 2pi-periodisch waren (-> Zero-Padding); so war das eine Sache ms statt Sekunden. Einige Taktzyklen kann man sich vielleicht noch einsparen, wenn man den blöden arctan(), "irgendwie" weglassen kann oder eine eigene "Reihen-Entwicklung" für diese Operation zusammenstrickt, sofern keine optimierte Math-Bib zur Hand ist. UND den Anti-Alaising-Filter nichtvergessen, ohne diesen könnte das Ergebnis verfälscht werden. Und mal interesse halber: C167, ist das nicht ein kleines Monster mit mehreren Registersätzen & Registerumbennung, ich kenn den nur aus einer Vorlesung, hatte mich damals gefragt, wer sowas freiwillig programmieren will ;)
Hi, ich hatte jetzt erwartet, dass man den arctan mittels Lookup-Tabellen relativ performant implementieren kann. Insbesondere erwarte ich, dass in meinem Fall keine hohe Genauigkeit benötigt wird, weshalb die Tabellen noch recht klein ausfallen können. Allerdings ist es für mich eh nicht nötig, eine reale Implementierung des Algorithmus aufzubauen. Meine Aufgabe war es vielmehr, eine Abschätzung abzuliefern, ob dieser Chip unser Problem lösen kann. Natürlich fehlen hier jetzt noch zusätzliche Berechnungen, wie der Anti-Aliasing-Filter, oder Sicherheitsfunktionen, die fehlerhafte/unerwünschte Ausgaben ausschließen. Aber ich bin mir in dem Fall sicher, dass die Rechenleistung dafür auch ausreichen wird, da die eigentliche DFT viel einfacher implementiert werden kann, als ich erwartet habe. Zum C167 kann ich gar nicht so viel sagen. Der hat halt schon knapp 20 Jahre auf dem Buckel und scheint aufgrund seines guten Preis/Leistungsverhältnis viel im Einsatz zu sein. Allerdings würden auch wir uns viel lieber was Moderneres wünschen, aber an den Zertifizierungsprozess traut sich keiner ran ;-) Und solange der alte noch lieferbar ist wird sich das auch nicht ändern.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.