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:
FPGA_Sub_Fader.zip (Größe: 20,99 KB / Downloads: 221)
Erzeugung Steigung:
Fader Schritt 1:
Fader Schritt 2:
Ausgabeschleife:
Ich freu mich über Eure Anregungen...
ch