WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Schrittweise Differenzbildung und Codierung

 

bmtil
Forum-Anfänger

Forum-Anfänger


Beiträge: 49
Anmeldedatum: 01.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2012, 16:03     Titel: Schrittweise Differenzbildung und Codierung
  Antworten mit Zitat      
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 der Code:
Code:
1:  
   %Variablen Deklaration
   
   br=32 %Busbreite, darf nicht verändert werden, abhängig vom µC, in diesem Fall 32bit
   %in C muesste kommen: int m, n, mm, nn, P;, und auch  const br:=32
   m=0;
   mm=0;
   
   %Zuweisen von Vektoren und nur fuer Matlab laden des  Datensatzes
   Raw=M1;  %Datensatz01, die Rawmatrix
   Irf1=Raw(:,1);              %erster Vektor (erste M-Sequenz), bleibt unverändert
   Irf2=Raw(:,2);              %zweiter Vektor, zur Bildung der Differenz
   %spaeter muss hier eine Indizierung stehen, so dass dann nacheinander alle
   %Vektoren durchgegangen werden, also immer die Differenz zwischen zwei
   %nebeneinander stehenden Vektoren gebildet wird (groeßere Schwirigkeit) in
   %C sollte das einfacher sein, da man immer auf zwei M-Sequenzen wartet
   Dif=zeros(511,1);           %zunext leerer Differenzvektor, wird später mit Irf1-Irf2 gefuellt
   
   
   for  i=1:511              %von dem ersten Index der Vektoren, bis 511 durchführen die Differenz  
         n=Irf1(i)-Irf2(i);  %Differenzbildung
         if n>m;             %suche nach der groeßten Differenz  
         else m=n;           %groeßte Differenz gefunden
         end;
   end;
   
   if m==0                  %Fehlerabfrage, falls m=0 ist, dann ist      
      Dif=zeros(511,1);     %der Differenzvektor gleich 0
   end;                     %kann im Normalfall nicht passieren
   
   
   while m>0;
         mm=bitshift(-m,1);  %mm=Breite des codierten Vektors
   end;  mm=mm+1;  
   
   b=br;                   %Zeiger auf das momentane Bit
   j=0;                    %Zeiger auf das Byte im momentanen Vektor
   
   for i=1:511             %eigentliche Codierung
    n=Irf1(i)-Irf2(i);     %Differenzbildung
    P=b-mm;                %Wert um den in dem 32bit Bus verschoben wird
    nn=n;                  %n Differenz von den beiden Werten zwischen
                           %der Vektoren, nn Zwischenwert zum Verschieben, damit
                           %die Differenz nicht veraendert wird
    bitshift(nn,P);        %Um P verschieben
    Dif(j)=Dif(j)+nn;      %zusammensetzen des codierten Vektors
   end;
 

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.

Mein Problem ist, dass der Code so ziemlich nicht das macht, was er machen soll und ich kann den Fehler nicht finden.
Viele Grueße.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.06.2012, 17:01     Titel: Re: Schrittweise Differenzbildung und Codierung
  Antworten mit Zitat      
Hallo bmtil,

Zitat:
Mein Problem ist, dass der Code so ziemlich nicht das macht, was er machen soll ...

das ist eine sehr vage Fehlerbeschreibung. Kannst Du das noch genauer erklären?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
bmtil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 49
Anmeldedatum: 01.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2012, 17:23     Titel: Re: Schrittweise Differenzbildung und Codierung
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo bmtil,

Zitat:
Mein Problem ist, dass der Code so ziemlich nicht das macht, was er machen soll ...

das ist eine sehr vage Fehlerbeschreibung. Kannst Du das noch genauer erklären?

Gruß, Jan


Ja, sorry der Vektor Dif wird nicht richtig erstellt, dieser wird nur mit Nullen befuehlt.
Ich hab 2 kleinere Fehler bereits gefunden, aber an denen lag es aber nicht.
Hier der neue Code:
Code:

%Differenzcodierung/Kompression
%20.7.2012
%Mikhail Votyakov

%Variablen Deklaration

br=32 %Busbreite, darf nicht verändert werden, abhängig vom µC, in diesem Fall 32bit
%in C muesste kommen: int m, n, mm, nn, P;, und auch  const br:=32
m=0;
mm=0;

%Zuweisen von Vektoren und nur fuer Matlab laden des  Datensatzes
Raw=M1;  %Datensatz01, die Rawmatrix
Irf1=Raw(:,1);              %erster Vektor (erste M-Sequenz), bleibt unverändert
Irf2=Raw(:,2);              %zweiter Vektor, zur Bildung der Differenz
%spaeter muss hier eine Indizierung stehen, so dass dann nacheinander alle
%Vektoren durchgegangen werden, also immer die Differenz zwischen zwei
%nebeneinander stehenden Vektoren gebildet wird (groeßere Schwirigkeit) in
%C sollte das einfacher sein, da man immer auf zwei M-Sequenzen wartet
Dif=zeros(511,1);           %zunext leerer Differenzvektor, wird später mit Irf1-Irf2 gefuellt


for  i=1:511              %von dem ersten Index der Vektoren, bis 511 durchführen die Differenz  
      n=Irf1(i)-Irf2(i);  %Differenzbildung
      if n>m;             %suche nach der groeßten Differenz  
      else m=n;           %groeßte Differenz gefunden
      end;
end;

if m==0                  %Fehlerabfrage, falls m=0 ist, dann ist    
   Dif=zeros(511,1);     %der Differenzvektor gleich 0
end;                     %kann im Normalfall nicht passieren


while m>0;
      mm=bitshift(-m,1);       %mm=Breite des codierten Vektors
      mm=mm+1;
       b=br;                   %Zeiger auf das momentane Bit
j=0;                    %Zeiger auf das Byte im momentanen Vektor

for i=1:511             %eigentliche Codierung
 n=Irf1(i)-Irf2(i);     %Differenzbildung
 P=b-mm;                %Wert um den in dem 32bit Bus verschoben wird
 nn=n;                  %n Differenz von den beiden Werten zwischen
                        %der Vektoren, nn Zwischenwert zum Verschieben, damit
                        %die Differenz nicht veraendert wird
 bitshift(nn,P);        %Um P verschieben
 Dif(j)=Dif(j)+nn;      %zusammensetzen des codierten Vektors
end;
end;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.