INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Zahlenumwandlung



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

08.01.2016, 13:21
Beitrag #1

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



Zahlenumwandlung
Hey Leute,

ich nutze auf dem FPGA vom myRIO die "sine wave generation" function. Die gibt mir einen Sinus mit einer Amplitude von +32767 bis -32768 aus. Nun möchte ich diese auf einen analogten Port am Port A geben.
Dieser Port kann nur Werte von 0-4095 verarbeiten, weil er ein 12 bit DAC ist und kann 0V-5V ausgeben.

Wie bearbeite ich den output der Sinusfunktion der I16 ist am ressourcenschonensten, um einen unsigned 12bit Wert zu bekommen. Btw. die LUT der Sinusfunktion hat 1024 Werte und darf keinen offset haben, weil ich den Sinus und Cosinus im 16bit Format noch für etwas anderes unverändert brauche.

Gruß

Slev1n
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 14:02 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2016 14:10 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.471
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Zahlenumwandlung
Hallo Slevin,

Zitat:Amplitude von +32767 bis -32768 aus. … Dieser Port kann nur Werte von 0-4095 verarbeiten
Simple Mathematik: Port = Amplitude /16 + 2048
Bedenke: Die Multiplikation/Division mit 2er Potenzen sind einfache Bitshifts…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 14:07 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2016 14:18 von Lucki.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Zahlenumwandlung
Habe mit MyRio noch nicht gearbeitet, aber das ist doch ein einfaches Skalierungsproblem, dass sich doch wohl ähnlich wie im normalen Labview lösen lassen müsste:
   

edit @gerd:
Bitshift anstatt Division geht bei negativen Integerwerten aber in die Hose. Es geht nur Division.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 14:26
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Zahlenumwandlung

Akzeptierte Lösung

Quotient and Remainder ist eine ganz böse Operation unter FPGA, braucht massig Resourcen. Zum Glück gibt es "Scale by Power of 2":

   

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 14:42
Beitrag #5

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



RE: Zahlenumwandlung
Ok,

hab noch ne andere Idee.

Wie wäre es wenn ich das den Output einfach mit 32768 addiere. Dann hab ich nur positive integer im U16 Format. Dann nehme ich das Ganze mal 2-^4 (also bitshift).
Ich glaube ich habe mich vorhin falsch ausgedrückt bezüglich offset. Nur in der Funktion selber, die mir den Sinus erstellt kann ich keinen eingeben.

Hier mein LV-Code. Hat in der Simulation funktioniert. Falls ich mich nicht mehr melde hat es auch am FPGA funktioniert. Kann ich erst später sicher testen wenn ich wieder ein Oszi hab.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 14:56 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2016 14:59 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.471
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Zahlenumwandlung
Hallo Slevin,

ich bezweifle ganz stark, dass dein Code mit DBL-Arrays auf dem FPGA funktionieren wird.

Was an den bisher genannten Beispielen gefällt dir nicht?
Auf dem FPGA verwendest du entweder FXP-Werte oder arbeitest gleich mit (unskalierten) Integerwerten: also nimm einfache ADD/SUB-Funktionen und Bitshifts für Zweierpotenzen! (Integer-Bitshifts benötigen auf dem FPGA so gut wie keine Resourcen…)

@Ludwig:
Zitat:Bitshift anstatt Division geht bei negativen Integerwerten aber in die Hose.
Wenn man das Sign-Bit erhält, ist alles schick: damit landet man nämlich nach Lesen der LabVIEW-Hilfe beim Vorschlag von Jens "Scale By Power of 2"…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 15:07
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Zahlenumwandlung
(08.01.2016 14:42 )Slev1n schrieb:  Ok,

hab noch ne andere Idee.

Wie wäre es wenn ich das den Output einfach mit 32768 addiere. Dann hab ich nur positive integer im U16 Format. Dann nehme ich das Ganze mal 2-^4 (also bitshift).
Ich glaube ich habe mich vorhin falsch ausgedrückt bezüglich offset. Nur in der Funktion selber, die mir den Sinus erstellt kann ich keinen eingeben.

Hier mein LV-Code. Hat in der Simulation funktioniert. Falls ich mich nicht mehr melde hat es auch am FPGA funktioniert. Kann ich erst später sicher testen wenn ich wieder ein Oszi hab.

Jetzt widersprichst du dir selber. Wenn du möglichst resourcensparend arbeiten willst, dann erzeugst du dir deinen Sinus gleich im I16-Format. Dann kannst du aber nicht noch 32768 draufaddieren. Deshalb, erst teilen, dann addieren.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 15:13 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2016 15:14 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.471
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Zahlenumwandlung
Oder den I16 nach I32 umwandeln, dann Offset=32768 addieren, gefolgt von einem Bitshift=-4…
(Jens' Lösung sieht aber trotzdem effizienter aus!)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2016, 23:18
Beitrag #9

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Zahlenumwandlung
(08.01.2016 14:56 )GerdW schrieb:  @Ludwig:
Zitat:Bitshift anstatt Division geht bei negativen Integerwerten aber in die Hose.
Wenn man das Sign-Bit erhält, ist alles schick: damit landet man nämlich nach Lesen der LabVIEW-Hilfe beim Vorschlag von Jens "Scale By Power of 2"…
Mein Vorschlag war eine Division y=x/16, der Vorschlag von Jens ist aber ebenfalls keine Shift-Operation, sondern die qasi identische Division y=x/2^4. (Die Labview Funktion y=2^n macht vielleicht intern eine Shift-Operation, das ist aber belanglos. Wichtig ist nur, das der vorzeichenbehaftete x-wert nicht geshiftet, sondern dividiert wird)
Hier der Vergleich:
   
Dass Dein neuer Vorschlag zur Reparatur Deines alten Vorschlages "schick" sein könnte, erschließt sich mir nicht. Im Gegenteil: Der Code - selbstverstädlich inklusive Fallunterscheidung positiv/negativ - dürfte gegenüber der einfachen Division so skurril sein, dass man leicht auf die Idee kommen würde, daß es nur darum geht, einen offensichtlichen Irrtum nicht zuzugeben.
Gruß Ludwig
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.01.2016, 17:52
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Zahlenumwandlung
Zumindest die 8086-Prozessoren (ich gehe davon aus, alle anderen auch) kennen zwei Typen von Schiebebefehlen: der eine heißt SAR "Shift Arithmetic right", der andere SHR "Shift Logic Bit Right". Unterschied: SAR behält das höchstwertige Bit bei. Das bedeutet, auch vorzeichenbehaftete Ganzzahlen können vorzichenrichtig geschoben werden. Ich gehe davon aus, ein FPGA

In der Hilfe zu "x*2^n" steht: "Wenn x eine ganze Zahl oder eine Festkommazahl ist, stellt diese Funktion das Äquivalent einer arithmetischen Stellenverschiebung dar." Das fasse ich als SAR auf. (Außerdem steht dort: Verbraucht auf FPGA weder Platz noch Zeit). Der Operator "Gerd" ist selbstverständlich (siehe Hilfe) ein Logisches, also ein nicht-Vorzeichen-beibehaltendes Schieben und ist somit hier fehl am Platz.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: