www.mikrocontroller.net

Forum: PC-Programmierung matlabproblem


Autor: dorado (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo wieso funktioniert mein 3d plot nicht??
ich habe mir da ein fliegender teppich bei figur 2 vorgestellt

(y ist ein signal mit 400000 messpunkten)

Fs= 44000.1;                  % Abtastfrequenz
T = 1/Fs;                     % Abtastzeit
L = 512;                      % Länge des Abschnittes
t = (0:L-1)*T;                % Zeitvektor
n=floor(size(y,1)/512);
yd=[];



%for(k=1:n)
    %y1=y((1+((k-1))*512):(512+((k-1)*512)),1);
subplot(121)
plot(Fs*t(1:L),y(1:L));
title('Signal')
xlabel('Zeit (millisekunden)')
%end

for(k=1:n),
    y1=y((1+((k-1))*512):(512+((k-1)*512)),1);

    NFFT = 2^nextpow2(L); % Next power of 2 from length of y
    yd(k,:) = fft(y1,NFFT)'/L;
    yf(k,:) = 2*abs(yd(1:NFFT/2+1));
end

f = Fs/2*linspace(0,1,NFFT/2+1);


% Plot single-sided amplitude spectrum.
subplot(122)
plot(f,2*abs(yd(1:NFFT/2+1)))
title('Spektrum von y(t)')
xlabel('Frequenz (Hz)')
ylabel('|Y(f)|')
%end

figure(2)
plot3(ones(size(f)),f,2*abs(yd(1:NFFT/2+1)))
hold on
for i=2:5,
plot3(i.*ones(size(f)),f,2*abs(yd(1:NFFT/2+1)));


end

grüssle

Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welchen Fehler siehst du denn in der Konsole von Matlab?

Autor: dorado (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gar kein aber er macht mir kein 3d plot!
wenn ich den befehl mit surf verwende, dann kommt ein fehler und zwar

??? Error using ==> surf at 78
Z must be a matrix, not a scalar or vector.

Error in ==> Spektrum1 at 42
surf(i.*ones(size(f)),f,2*abs(yd(1:NFFT/2+1)));

wenn ich am schluss anstatt

(alte eingabe)

figure(2)
plot3(ones(size(f)),f,2*abs(yd(1:NFFT/2+1)))
hold on
for i=2:5,
plot3(i.*ones(size(f)),f,2*abs(yd(1:NFFT/2+1)));


(neue eingabe)

figure(2)
plot3(ones(size(f)),f,2*abs(yd(1:NFFT/2+1)))
hold on
for i=2:5,
surf(i.*ones(size(f)),f,2*abs(yd(1:NFFT/2+1)));

eingebe

danke für deine hilfe

Autor: J.-u. G. (juwe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kevin K. schrieb:
> welchen Fehler siehst du denn in der Konsole von Matlab?

dorado schrieb:
> gar kein aber er macht mir kein 3d plot!

Komisch, wenn Matlab den plot3-Befehl aus irgend einem Grund nicht 
ausführt, dann müsste eine Fehlermeldung erscheinen.

Autor: dorado (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bekomm ein 3d plot aber so ein wo ich nichts erkennen kann, ich 
sollte so eine art fliegender teppich haben

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dorado schrieb:
> ich bekomm ein 3d plot aber so ein wo ich nichts erkennen kann, ich
> sollte so eine art fliegender teppich haben

dafür ist plot3() aber überhaupt nicht gedacht/geeignet, sondern eben 
surf() o.Ä. Und wie man diese Funktionen korrekt benutzt und was die als 
Eingabeparameter benötigen findet sich in der sehr guten Matlab-Hilfe...

Autor: J.-u. G. (juwe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist plot3 der falsche Befehl. Mit diesem können Linien im 3-D-Raum 
gezeichnet werden. Schau Dir mal die Matlab Hilfe zu plot3 an.

Wie Du schon richtig erkannt hast, wären surf oder mesh in Deinem Falle 
sinnvoller. Diese Befehle erwarten aber andere Argumente als plot3.

surf kann z.B. folgendermaßen verwendet werden:

surf(X,Y,Z), wobei:

X: Vektor der Länge n (x-Achse),
Y: Vektor der Länge m (y-Achse),
Z: Matrix mit m Zeilen und n Spalten ("Höheninformation")

Versuche es mal mit:

surf([1:5],f,2*abs(yd(1:NFFT/2+1))'*ones(1,5));

ohne irgendwelche Schleifen.

Autor: J.-u. G. (juwe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe gerade, jussa war etwas schneller mit seiner Antwort.

Auch von mir nochmal der Hinweis, die wirklich sehr gute und 
ausführliche Matlab Hilfe zu verwenden.

Autor: dorado (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke J. -u. G.!

Da kommen wir der Sache schon näher.......
habe mal deinen Code angeschaut und eingegeben... und es kommt mal das 
raus was ich gesucht habe (zumindest in der Richtung).
jetzt versuche ich noch die anderen werte einzzubinden (bis jetzt habe 
ich in der x achse nur 5 werte aber ich brauche 967)
aber danke!!

Autor: dorado (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
J. -u. G. kurze Frage noch....

du schreibst:
J.-u. G. schrieb:
> Versuche es mal mit:
>
>
>
> surf([1:5],f,2*abs(yd(1:NFFT/2+1))'*ones(1,5));
>
>
>
> ohne irgendwelche Schleifen.Beitrag melden | Bearbeiten | Löschen |

was bedeutet die 1:5 in den klammern nach surf??
laut Matlabhilfe interpretiere ich es als axis oder??


grüssle und danke

Autor: J.-u. G. (juwe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gib doch einfach mal

[1:5]

in der Matlab-Komandozeile ein. Du wirst sehen, das ist nichts anderes 
als ein 5-elementiger Vektor. Im surf-Befehl dieser als X benutzt. Du 
kannst [1:5] gerne durch Deinen 967-elementigen x-Vektor ersetzen. Denke 
dann aber daran, die Dimensionen der Matrix Z anzupassen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.