www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - Schrittweise Vektorcodierung
Schrittweise Vektorcodierung < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Schrittweise Vektorcodierung: Code Korrektur
Status: (Frage) reagiert/warte auf Reaktion Status 
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.

        
Bezug
Schrittweise Vektorcodierung: Antwort
Status: (Antwort) fertig Status 
Datum: 17:54 Mi 20.06.2012
Autor: Al-Chwarizmi

... und was wäre denn deine Frage ?

LG

Al-Chw.

Bezug
                
Bezug
Schrittweise Vektorcodierung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]