Verfasst am: 06.07.2012, 11:49
Titel: Darstellung der max. Differenz in jedem Vektor
Hiho,
ich habe einen Algorhitmus, der mir eine Differenz zwischen zwei benachbarten Vektoren in einer Matrix berechnet. Hier ist er:
Code:
br=32;
Irf1=int32(mRawCh1(1:4,1)); %die ersten 4 stellen, nur fuer die
Irf2=int32(mRawCh1(1:4,2)); %bessere darstellung, eigentlich 511
m=uint32(max(abs(Irf1-Irf2))); % max. betrag der differenz
%bestimmung der breite der differenz
mm=0;
while m>0;
m=bitshift(m,-1);
mm=mm+1;
end;
mm=mm+1; %bit fuer das vorzeichen (dif. kann negativ werden) disp(['vektorbreite' num2str(mm) ' ,bit']);
% kodierung
groesse=size(Irf1);
N=groesse(1,1);
N2=ceil(N*mm/br); %N2 groeße von dem neuen Difnow->soviel platz wird im µC benoetigt
DifNow=uint32(zeros(N2));
jnow = br; %speichert die nummer des befuellten bits in Difnow
know = 1; %speichert die nummer des befuellten elements in Difnow
for k=1:N %schleife ueber alle elemente von Dif
for j=mm:-1:1 %schleife ueber die befuellten elemente von Dif
Dif=Irf1(k)-Irf2(k);
if(j==mm), %wenn "vorzeichen"bit
if(Dif<0),
DifNow(know)=bitset(DifNow(know),jnow,1); %1-flag, wenn negativ
else
DifNow(know)=bitset(DifNow(know),jnow,0); %0-flag wenn positiv
end;
else
Dif=abs(Dif);
b=bitget(uint32(Dif),j); %bitget arbeitet ohne bitmaske, muss man in C vermutlich anders machen
DifNow(know)=bitset(DifNow(know),jnow,b); %selbes bei bitset end;
jnow=jnow-1;
if(jnow==0),
jnow=br;
know=know+1;
end;
end;
end;
disp('differenz analysis (differenzvektor in dez und bin)');
for k=1:N;
s=dec2bin(uint32(abs(Irf1(k)-Irf2(k)))); %s ist quasi die "breite" die man fuer die speicherung in
whilelength(s)<(mm-1) %32bit zeile braucht
s=['0' s];
end;
if((Irf1(k)-Irf2(k))<0),
s2='1'; %vorzeichen, negativ
else
s2='0'; %vorzeichen, positiv
end;
disp([num2str(Irf1(k)-Irf2(k)) '-' s2 '-' s]);
end;
Die Matrix ist 511x451 elemente groß.
Ich möchte den Code so umschreiben, dass dieser Kodierungsalgorhitmus fuer alle 451 Vektoren der Matrix durchlaueft,
und das am Ende zusaetlich eine Grafik steht, wo fuer jeden Differenzvektor der Betrag der max. Differenz (also in diesem Code heisst diese mm dargestellt wird. Quasi eine Grafik: y-Achse ist die Bitbreite (Breite des jeweiligen Differenzvektors), und x-Achse ist der Index des jeweiligen Vektors.
Die Matrix mit den Daten habe ich angehangen.
Vielen Dank und Grueße.
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
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.