LabVIEWForum.de
"Ein- und Ausfaden" eines kontinuierlich erzeugten, analogen Signals - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA)
+---- Thema: "Ein- und Ausfaden" eines kontinuierlich erzeugten, analogen Signals (/Thread-Ein-und-Ausfaden-eines-kontinuierlich-erzeugten-analogen-Signals)



"Ein- und Ausfaden" eines kontinuierlich erzeugten, analogen Signals - chrissyPu - 04.01.2010 15:12

Hi,

ich hab folgende Aufgabe: Auf einer 7833R generiere ich über eine LUT ein analoges Signal. Durch programmierbares, mehrfaches Aneinanderhängen der LUT-Daten kann ich die Länge meiner Ausgabe relativ frei einstellen. Das analoge Ausgangssignal wird also durch das aneinandereihen einzelner Werte in einer For-Schleife generiert und Punkt-für-Punkt ausgegeben.
Was ich nun gerne hätte, wäre ein Ein- und Ausfaden des analogen Signals, also eigentlich eine überlagerte Amplitudenänderung, die z.B. in den ersten 10% der Zeit das Signal von 0 auf 100% der Amplitude fährt und in den letzten 10% der Zeit entsprechend von 100% auf 0%.

Mein aktueller Favorit ist ein rekonfigurierbarer Rampengenerator, dessen Parameter ich an den FPGA übergebe und der dann nur noch rechnet, allerdings bin ich mir im Moment nicht so wirklich sicher, ob das ganze dann so schnell wird, wie ich das gerne hätte. Hat von Euch jemand sowas in der Richtung schonmal gemacht und hat da vielleicht eine fundiertere Meinung als ich dazu?

Grüße,

ch


"Ein- und Ausfaden" eines kontinuierlich erzeugten, analogen Signals - chrissyPu - 05.01.2010 11:07

Guten Morgen...

Hab mal einen ersten Wurf gemacht. Basis ist eine analoge Ausgabe mit variabler Sampleanzahl (N), die ich je nach Index n mit einer variablen Amplitude A multipliziere. Jetzt definier ich mir zwei Indexwerte n_low und n_high, wobei für alle Indexe n < n_low eine linear ansteigende Kennlinie zwischen 0 und A und für alle Indexe n > n_high eine linear fallende Kennlinie vorgegeben wird. Alle n dazwischen bekommen als Amplitude A mitgegeben.

Realisierung:
Die Steigung ist für jeden Index gleich, wenn die Indexwerte n_low und n_high sowie die gesamt-Sample-Anzahl bekannt ist. Daher wird das ganze in einem Sub-VI (FPGA-Sub-FaderValue.vi) vor meiner eigentlichen Ausgabe berechnet. Zahlenformat ist FXP, weil mir sonst Auflösung verloren geht (genauer gesagt, wenn n_low > A)
Dann wird in zwei Schritten (ist eh ein Pipelining-Schritt im Durchlauf) weitergerechnet. Der erste Schritt testet, ob der Index zwischen n_high und n_low liegt. Parallel dazu wird getestet, ob der Index im unteren oder oberen Steigungsbereich liegt und ebenso parallel dazu die Amplituden für beide Fälle berechnet. Damit hab ich versucht, den zeitkritischen Pfad zu verkürzen, da das genau das Problem im Moment ist...
Im zweiten Schritt wird aus den beiden Testergebnissen der richtige Fall ausgewählt und entsprechend im Steigungsbereich eine Mulitplikation des Übertragungsfaktors vorgenommen.

Anmerkungen:
Die etwas merkwürdig anmutende Konstruktion aus Mulitplikation und anschließenem Bit-Schieben dient der höchstmöglichen Genauigkeit.

Problem:
Der Compiler meldet mir eine Timing-Violation, allerdings nur, wenn ich das ganze komplett compiliere. Lasse ich FaderSub1 oder FaderSub2 raus, funktioniert das ganze. Compilieren der Sub-VIs alleine funktioniert allerdings auch, sonst wäre die Fehlersuche sicherlich einfacher...

VIs:Lv86_img
[attachment=23394]

Erzeugung Steigung:
[attachment=23410]

Fader Schritt 1:
[attachment=23412]

Fader Schritt 2:
[attachment=23409]

Ausgabeschleife:
[attachment=23411]

Ich freu mich über Eure Anregungen...

ch


"Ein- und Ausfaden" eines kontinuierlich erzeugten, analogen Signals - chrissyPu - 05.01.2010 16:21

Problem gelöst: Die FXP-Operationen brauchen doch relativ lang, da die Standard-Einstellung von 64bit Breite ausgeht. Hab ich jetzt auf zu erwartende Werte angepasst (dann kommt man auf die doch etwas schmaleren 16 bit) und das läuft dann auch problemlos durch den Compiler. Wenn jemand den Kram haben will, bitte melden...