Ich versuche, einen DSP (TMSF28335) mit Schreiben C-Codes in Control Studio V6.02 zu programmieren.Wie kann ich ein Signal um 90 Grad mit einem Ringpuffer verschieben
In diesem Projekt muss ich eine 90 Grad Phasenverschiebung auf ein AC-Signal, das ich von den Sensoren messen. Mir wurde geraten, einen kreisförmigen Puffer zu verwenden, um eine solche Phasenverschiebung zu erreichen. Aber ich bin leider nicht sehr vertraut mit dem Schreiben eines zirkulären Puffers in C-Sprache. Nach dem Konzept weiß ich, dass der "Kopf" des Puffers das Eingangssignal sein sollte (gemessenes AC-Signal) und der "Schwanz" das verschobene Eingangssignal ist, das als das Ausgangssignal des Ringpuffers verwendet wird.
Die Abtastzeit des Systems ist auf 3,84599989e-5 (s) eingestellt und eine Periode ist 0,02 (s) (50 Hz). So bildet 1/4 einer Periode (0,02/4)/3,84599989e-5 = 130 Proben. In dem anderen Wort muss ich 130 Proben Verzögerung machen.
Ich wäre dankbar, wenn Sie mir sagen können, wie man den zirkulären Puffer in C für meinen Controller schreibt und dementsprechend kann ich Phasenverzögerung machen.
Finden Sie ein Tutorial über zirkuläre Puffer. Lernen Sie, sie anhand einfacher Beispiele zu implementieren und zu verwenden. Dann finde die genaue Zeit deines Signals heraus. Dann behalte ein Viertel davon als die Entfernung zwischen Eingabe und Ausgabe bei. Alternativ (im Fall einer nicht konstanten Periode) müssen Sie dynamisch bestimmen, was "90 Grad" für Ihr Signal zu einem bestimmten Zeitpunkt bedeutet. – Yunnosch
Sie benötigen einen [digitalen Filter] (https://en.wikipedia.org/wiki/Digital_filter) (entweder FIR oder IIR) und um das zu implementieren, sollten Sie einen Ringpuffer verwenden, der soweit richtig ist. Ich würde ein Hilbert-Filter verwenden, da dies 'cos (ωt)' in 'sin (ωt)' umwandeln würde, was eine Verschiebung von 90 ° ist. Siehe: https://en.wikipedia.org/wiki/Hilbert_transform für die mathematische Erklärung, man benötigt dafür Kenntnisse über komplexe Zahlen. Diese Frage sollte hier besser sein: https://dsp.stackexchange.com/. Weiter würde ich empfehlen, Dinge wie digitale Signalverarbeitung in Matlab zu trainieren. Es ist großartig für diesen Zweck! –
Aber um Ihre Frage zu runden Puffern zu beantworten, ist dies eine sehr allgemeine: https://stackoverflow.com/a/827749/8051589. Hier in einem für eine FIR-Filterimplementierung: https://stackoverflow.com/questions/22749058/circular-buffer-implementation-for-fir-filter-in-c. Es gibt viel Zeug im Internet zu finden. –