Softwareentwickler MATLAB/Simulink (w/m) Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLinkdSPACE GmbH - Paderborn
Junior Softwareingenieur/in Test von Softwarefunktionen im Bereich embedded AntriebssteuergeräteentwicklungESG Elektroniksystem- und Logistik-GmbH - München
Verfasst am: 26.10.2011, 10:20
Titel: Re: Vektoren auf eine 2er Potenz vervielfachen
Hallo elcachon,
REPMAT verfielfacht die Elemente der spezifizierten Dimensionen. Das funktioniert natürlich nur mit ganzzahligen Werten. Das Lesen von "help repmat" ist hier sehr zu empfehlen.
Wie soll die Vervielfachung denn bei einem Faktor, der nicht ganzzahlig ist, genau aussehen? Sollen die Werte am Ende mit Nullen oder NaNs gefüllt werden, oder möchtest Du den Rest abschneiden?
Um Dir eine sinnvolle Antwort zu geben, müsstest Du also zunächst das Problem eindeutig definieren.
x = rand(100,1); % Testsignal für Vervielfältigung
N = 1024; % 2er Potenz der gewünschter Länge
k = round(N/length(x)); % Anzahl ganzer Segmente
r = mod(N,length(x)); % Rest
y = x; % erstes Segment for i=1:k-1
y = [y;x]; % x k-1 mal ans Ende von y anhängen end % Rest anhängen
y(N-r+1:N) = x(1:r);
Die Schleife kann man ja auch weglassen und dafür den schon angesprochenen repmat Befehl verwenden.
Code:
x = rand(100,1); % Testsignal für Vervielfältigung
N = 1024; % 2er Potenz der gewünschter Länge
k = round(N/length(x)); % Anzahl ganzer Segmente
r = mod(N,length(x)); % Rest
y = repmat(x,N); % ganze Segmente vervielfältigen % Rest anhängen um auf 1024 Werte zu kommen
y(N-r+1:N) = x(1:r);
Da fehlte bei mir mal wieder eine genauere Kenntnis über einen Matlab Befehl. Ich dachte bisher repmat wäre nur zum Ändern der Dimensionen einer schon vorhandenen Matrix
Ich hatte gester keine Zeit, mehr zu erklären. Ich meinte, dass man gerade bei einer Zweier-Potenz so schneller ans Ziel kommt:
Code:
y = x;
% Schleife:
y = [y; y];
Dann muss man nur noch log2(N) Schleifen durchlaufen und spart sich viele Re-allozierungen.
Aber ohne Frage ist REPMAT geeigneter.
Gruß, Jan
Options and Permissions
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.