LabVIEWForum.de - An alle Array-Profis: lsb in msb umwandeln

LabVIEWForum.de

Normale Version: An alle Array-Profis: lsb in msb umwandeln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend,

ich sitze jetzt schon 2 Stunden (eher 3 oder 4, aber ich will ja nicht so dumm dastehen Wink ) an einem Problem. Ich habe einen Bitstrom der nach lsb, least significant bit (niederwertiges bit zuerst), geordnet ist.

Bei 2 Bit pro Symbol sieht das so z.B. aus:

LSB Fall:

2 1 3 0 -> 01 10 11 00

Was ich programmieren möchte ist die Umwandlung in msb, most significant bit (höherwertiges bit zuerst):

01 10 11 00 -> 10 01 11 00

Schritt 1:
Mein Gedanke war es den Bit-Strom in Symbole zu trennen und in einem Array zu schreiben:

01 10 11 00 -> 01
10
11
00

Schritt 2:
Danach wollte ich beide Spalten tauschen:

01 -> 10
10 01
11 11
00 00

Schritt 3:
Jetzt jede Zeile nacheinander einem Array einfügen:

10 -> 10 01 11 00 = MSB
01
11
00

1. Problem:
Mein Problem tritt bei Schritt 2 auf. Um beide Spalten vertauschen zu können, habe ich die Funktion "Aus Array löschen" genutzt. Dadurch erhalte ich 2 Arrays (2 Spalten = 2 Arrays). Ein Array ist 1-dimensional und das zweite 2-dimensional. Leider schaffe ich es nicht das 2-dimensionale Array in ein 1-dimensionales Array zu überführen.

2. Problem:
Sollte ich Problem 1 gelöst haben, würde ich nicht wissen wie am elegantesten ich Schritt 3 bewerkstelligen kann.

Einen weiteren Lösungsansatz hatte ich noch gefunden, der alles verkürzt. Durch die Funktion "1D-Arrays überführen", wollte ich mit Hilfe eines Schieberegister und dem Teil-Array (2-Bit Symbol) aus "Array Subset / Teil-Array" die Symbole nacheinander setzen. Ich wäre dann von meiner Theorie her gleich beim MSB angelangt.
Nur leider kommt beim Ausgang von "1D-Arrays überführen" nichts raus.

Ich hoffe ihr könnt mir wieder helfen.

Vielen Dank schon mal!
Wenn du wirklich immer nur die Reihenfolge von 2 "Bits" tauschen willst (ungewöhnlich!), dann z.B. so:
[attachment=33881]
Gruß, Jens
Wow, ich bin begeistert! Wie einfach es doch sein kann.

Eine Frage bleibt für mich noch. Warum funktioniert mein 2. Lösungsansatz nicht? Er beruht ja auch auf der Funktion Interleave 1D-Arrays/1D-Arrays überführen?
(21.05.2011 06:28 )YYYs schrieb: [ -> ]Eine Frage bleibt für mich noch. Warum funktioniert mein 2. Lösungsansatz nicht?
Weil du dir die Hilfe von Interleave-Array nicht richtig durchgelesen hast? (Strg-H ist eine wichtige Tastenkombination in LabVIEW)

1) Sinnvollerweise sollten die Eingangsarrays dieselbe Größe haben. In jedem Schritt ist ein Array leer, somit ist auch immer das Ausgangsarray leer.
2) Interleave Array dreht nichts um.
3) Und selbst, wenn die Eingangsarrays dieselbe Größe hätten, es würde dir so, wie du es einsetzt, nichts nützen. Denn es wird ganz anders zusammengesetzt, wie du das vielleicht gedacht hast. Bsp: Eingangsarray1 = [1,2,3], Eingangsarray2=[4,5,6] -> Ausgangsarray = [1,4,2,5,3,6].

Gruß, Jens
Referenz-URLs