Schrittweise Vektorcodierung < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 16:21 Mi 20.06.2012 | Autor: | bmtil |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hiho, ich habe einen Code geschrieben.
Dieser Code soll eine schrittweise Vektorcodierung vornehmen. Ich habe einen Datensatz. Dieser Datensatz stellt eine Matrix dar. Nun sollen die einzelnen Spaltenvektoren der Matrix nacheinander codiert werden.
Der erste Spaltenvektor bleibt unverändert, dieser wird Irf1 genannt. Der zweite Spaltenvektor wird Irf2 genannt. Der codierte erster Spaltenvektor ergibt sich aus der Differenz Irf1[i]-Irf2[i]. Dabei wird die Bitbreite des Vektors aus der maximalen Differenz zwischen den Elementen berechnet. Zum Bsp., wenn die maximale Differenz von Irf1[i]-Irf2[i] in den Elementen i=389, die Zahl 9 beträgt, dann ist die max. Bitbreite des gesamten Vektors=5bit.
Der zweite codierte Vektor muss sich dann aus der Differenz von Irf2-Irf3 ergeben, wieder muss dabei die maximale Bitbreite berechnet werden.
Insgesamt wird in einem 32bit Bus operiert.
Die gesamte Codierung muss schrittweise erfolgen, das heisst, darf nicht sofort die Differenz zwischen den benachbarten Spaltenvektoren bilden, da in der Realitaet mir kein fertiger Datensatz vorliegt, sondern die Vektoren nacheinander kommen.
Hier ist erstmal mein Code:
1: |
| 2: | %Variablen Deklaration
| 3: |
| 4: | br=32 %Busbreite, darf nicht verändert werden, abhängig vom µC, in diesem Fall 32bit
| 5: | %in C muesste kommen: int m, n, mm, nn, P;, und auch const br:=32
| 6: | m=0;
| 7: | mm=0;
| 8: |
| 9: | %Zuweisen von Vektoren und nur fuer Matlab laden des Datensatzes
| 10: | Raw=M1; %Datensatz01, die Rawmatrix
| 11: | Irf1=Raw(:,1); %erster Vektor (erste M-Sequenz), bleibt unverändert
| 12: | Irf2=Raw(:,2); %zweiter Vektor, zur Bildung der Differenz
| 13: | %spaeter muss hier eine Indizierung stehen, so dass dann nacheinander alle
| 14: | %Vektoren durchgegangen werden, also immer die Differenz zwischen zwei
| 15: | %nebeneinander stehenden Vektoren gebildet wird (groeßere Schwirigkeit) in
| 16: | %C sollte das einfacher sein, da man immer auf zwei M-Sequenzen wartet
| 17: | Dif=zeros(511,1); %zunext leerer Differenzvektor, wird später mit Irf1-Irf2 gefuellt
| 18: |
| 19: |
| 20: | for i=1:511 %von dem ersten Index der Vektoren, bis 511 durchführen die Differenz
| 21: | n=Irf1(i)-Irf2(i); %Differenzbildung
| 22: | if n>m; %suche nach der groeßten Differenz
| 23: | else m=n; %groeßte Differenz gefunden
| 24: | end;
| 25: | end;
| 26: |
| 27: | if m==0 %Fehlerabfrage, falls m=0 ist, dann ist
| 28: | Dif=zeros(511,1); %der Differenzvektor gleich 0
| 29: | end; %kann im Normalfall nicht passieren
| 30: |
| 31: |
| 32: | while m>0;
| 33: | mm=bitshift(-m,1); %mm=Breite des codierten Vektors
| 34: | end; mm=mm+1;
| 35: |
| 36: | b=br; %Zeiger auf das momentane Bit
| 37: | j=0; %Zeiger auf das Byte im momentanen Vektor
| 38: |
| 39: | for i=1:511 %eigentliche Codierung
| 40: | n=Irf1(i)-Irf2(i); %Differenzbildung
| 41: | P=b-mm; %Wert um den in dem 32bit Bus verschoben wird
| 42: | nn=n; %n Differenz von den beiden Werten zwischen
| 43: | %der Vektoren, nn Zwischenwert zum Verschieben, damit
| 44: | %die Differenz nicht veraendert wird
| 45: | bitshift(nn,P); %Um P verschieben
| 46: | Dif(j)=Dif(j)+nn; %zusammensetzen des codierten Vektors
| 47: | end;
|
Vielen Dank schonmal und freundliche Grueße.
|
|
|
|
... und was wäre denn deine Frage ?
LG
Al-Chw.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:17 Mi 20.06.2012 | Autor: | bmtil |
Der Algorhitmus arbeitet einfach nicht und ich kann keinen Fehler finden.
Es wird nur die erste Differenz berechnet, und nicht die Differenzen zwischen allen benachbarten Vektoren. Die Breite der Differenzvektoren stimmt auch nicht. Allg. bringt mich die gesamte Aufgabe recht zum verzweifeln.
Wahrscheinlich muesste ich den gesamten Algorhitmus nochmal neu schreiben, allerdings weiss ich nicht gerade wie.
Hier waere der Pseudocode dazu:
1: |
| 2: | Nehme die ersten beiden Spaltenvektoren Irf1 und Irf2
| 3: | Bilde davon die Differenz
| 4: | Suche den höchsten Betrag der Differenz
| 5: | Rechne aus, wie viele Bit braucht dieser Wert
| 6: | Die Anzahl der Bit fuer diesen Wert ergibt die Bitbreite des Diff.Vektors
| 7: | Erstelle den Differenzvektor mit der Bitbreite aus 6.
| 8: | Nehme Irf2 und Irf3
| 9: | Gehe zu 3.
| 10: | End.
|
Der Pseudocode ist so extrem simpel eigentlich, aber irgendwie kriege ich das gerade nicht gebacken.
|
|
|
|