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

Jede 4 Zahlen konkatenieren

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2008, 12:46     Titel: Jede 4 Zahlen konkatenieren
  Antworten mit Zitat      
Hallo zusammen,

ich quäle mich vor flgendes Problem. Ich hab ein Datenstrom aus 3-stelligen Binärzahlen:

010
000
010
000
010
000
010
000
010
000
010
000
001
111
010
000
001
111
010
000
001
......

Ich möchte dann, dass jede 4-Zahlen konkateniert werden-also von 1...4,von 5...8,9...12 usw. Damit entsteht eine andere Binärzahl, die ich danach in Dezimalzahl umrechnen möchte, z.B. 111010000001 ist dann -383.

Hat jemand eine Idee, wie das gehen soll, ich wäre sehr dankbar dafür!

Gruss,
M.


Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2008, 13:35     Titel:
  Antworten mit Zitat      
würde es mit zweo forschleifen realisieren.

musst mal testen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 24.09.2008, 13:46     Titel:
  Antworten mit Zitat      
Moin,

ne einfache Lösung wäre:
Code:
vek = []; % der Ausgangsvektor
vekneu = zeros(1,length(vek)/4);
z = 0;
for k=1:4:length(vek)
    z = z+1;
    vekneu(z) = vek(k:k+3);
end
 

Sollte eigentlich klappen...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2008, 17:33     Titel:
  Antworten mit Zitat      
Danke für den Vorschlag,Alex!

Es funktioniert aber nich so ganz, da die Zahlen im string-Format sind, also
'101'
'000'
'001'
...
usw.

Ausserdem habe ich mehrere solche Datenströme, also Ausgangsvektor ist vek{i} für i-Datenströme.

Hast du vielleich auch ein Lösungsvorschlag dafür?

Danke im Voraus!

Gruss,
M.
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.09.2008, 20:04     Titel:
  Antworten mit Zitat      
Hi,

wenn s das char array ist müsste sowas klappen:
Code:
n=4;
[l,c]=size(s);
s2=reshape(permute(s,[2 1]),n*c,l/n)'


Edit: Das sollte eigentlich mit jeder Art von Array klappen.
Edit2: permute(s,[2 1]) ist natürlich das gleiche wie s'

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2008, 11:46     Titel:
  Antworten mit Zitat      
Hi,

danke für den Typ, es funktioniert aber trotzdem nicht. Ich bekomme folgende Fehlermeldung:

??? Error using ==> reshape
Size arguments must be real integers.


Programmcode:

Code:
q=quantizer('wrap',[10 0]);
Binary{i}=num2bin(q,P0{i});
Last3Bin{i}=(Binary{i}(:,8:10));
n=4;
[l{i},c{i}]=size(Last3Bin{i});
s2{i}=reshape(Last3Bin{i}',n*c{i},l{i}/n)';


Hilfe! Sad

Gruss,
M.
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.09.2008, 12:19     Titel:
  Antworten mit Zitat      
Die Anzahl der Zeilen, also l muss auch passen (d.h. durch 4 teilbar sein):
Code:
s=[
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '001'
    '111'
    '010'
    '000'
    '001'
    '111'
    '010'
    '000'
    '001'
    'ABC'
    'DEF'
    'GHI'
    ];

n=4;
[l,c]=size(s);
s2=reshape(s',n*c,l/n)'

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2008, 16:08     Titel:
  Antworten mit Zitat      
Super, es hat funktioniert! Danke! Smile

Ich hab aber ein anderes Problem. Wie würde das aussehen, wenn man für jede 8 Werte jedes zweite nimmt und am Ende die 4 konkateniert.

Der Grund ist, dass ich in einige Datenströme Werte habe, die doppelt vorkommen.

Hat jemand eine Idee?

Gruss,
M.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2008, 16:17     Titel:
  Antworten mit Zitat      
Eine andere Möglichkeit wäre es von den Datenstrom jedes zweite Wert rauszulöschen.
Gibt es irgend so eine Funktion, die nur die geraden oder ungeraden Positionen anzeigt?

Gruss,
M.
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.09.2008, 16:20     Titel:
  Antworten mit Zitat      
Gib mal ein Beispiel.
Am besten so eins, das man direkt nach Matlab Copy&Pasten kann.

Als Tipp möchte ich noch anmerken, dass es nützlich wäre, solche Randbedingungen möglichst früh anzugeben. Das kann ja auch mal für oder gegen eine potentielle Lösung sprechen.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2008, 16:45     Titel:
  Antworten mit Zitat      
Hallo,

also einbischen ausführlicher. Ich habe folgende Datenströme:

011
011
111
111
111
111
000
000
011
011
111
111
111
111
000
000
011
011
111
111
111
111
000
000
....

die Werte wurden doppelt gemessen und deshalb möchte ich, dass jedes zweite Wert rausgeschmissen wird, damit ich die Daten weiter auswerten kann.

Programmcode:

Code:
Datenstrom{i}=(Binary{i}(:,8:10));


Ich wäre dankbar für jeden Tip!

Gruss,
M.
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 25.09.2008, 22:43     Titel:
  Antworten mit Zitat      
Hi,

jede 2. Zeile bekommst Du so:
Code:
clear all;
clc;

s=[
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '010'
    '000'
    '001'
    '111'
    '010'
    '000'
    '001'
    '111'
    '010'
    '000'
    '001'
    'ABC'
    'DEF'
    'GHI'
    ]

s(1:2:end,:)

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2024 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.