Forum: Digitale Signalverarbeitung / DSP / Machine Learning Problem mit Matlab


von Peter M. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab da ein Signal x(k) das ich zuerst in eine geschlossene 
Darstellung
gebracht habe: x(k)= 2*h(k-1)-2*h(k-2)+2*h(k-3) --> x(k) --> X(z)
Im Anschluss daran habe ich dieses Signal mit der Übertragungsfunktion 
G(z) multipliziert. Somit erhalte ich dann das Ausgangssignal Y(z).
Dieses Y(z) wandelt man dann in y(k) um. Wie kann man mit Matlab solch 
eine Aufgabe lösen? Wie kann man in Matlab das x(k) bzw. y(k) grafisch 
darstellen?

von Peter M. (Gast)


Lesenswert?

Gibt es in Matlab keine Möglichkeit das diskrete Zeitsignal z.B.
x(k)= 2*h(k-1)-2*h(k-2)+2*h(k-3)+2*(1/2)^(k-5)*h(k-5) grafisch zu 
plotten?

von mat (Gast)


Lesenswert?

vorausgesetzt du hast dein h(k) schon, dann kannst du einfach in einer 
Schleife dein x(k) erzeugen und dann plotten... sonst musst du natürlich 
erst noch das h(k) erzeugen

for k = 6:ENDWERT+6
  x(k-5)= 2*h(k-1)-2*h(k-2)+2*h(k-3)+2*(1/2)^(k-5)*h(k-5);
end

figure(1);
plot(x);

Die Hilfe von MATLAB ist aber auch sehr gut! Einfach mal reinschauen...

von mat (Gast)


Lesenswert?

du musst dann noch die länge von h(k) anpassen, entweder nullen hinten 
anhängen, oder wenn du die Schleife von 1 an durchlaufen willst, dann 
Nullen vorne vorsetzen...
Ist immer ein bisschen gebastel mit den Indizes.
Mit "whos" im MATLAB-Fenster kannst du dir die Länge der Variablen 
anzeigen lassen. Seht hilfreich!

h=[h zeros(1,6)];

von Peter M. (Gast)


Lesenswert?

Ich hab da kene Ahnung wie so ein Sprung erzeugen könnte.
Es soll ja so sein, dass wenn der Sprung h(k-1) kommt, dass bei k=1 ein 
Sprung auf 1 erzeugt wird. Wie man dies in Matlab  allgemeingültig 
hinbekommt, das weiss ich nicht.

von Peter M. (Gast)


Lesenswert?

Ich hab mal in Matlab das ganze versucht. Nun ist es so das der Sprung 
bis jetzt nur bei k=1 auf 1 springt. Wie könnte man in Matlab dies 
allgemeingültig hinbekommen? Beispiel: h(k-7): Sprung bei k=7

function [x] = h(k)

if(k==1)
    x=1;
else
    x=0;
end

von mat (Gast)


Lesenswert?

Ich verstehe deine Frage noch nicht so ganz...
Wie soll denn dein Signal h(k) aussehen? Wie lang soll es sein? Wieviele 
Sprünge?
Da es sich um ein diskretes Signal handelt, brauchst du für einen Sprung 
auf 1 nur eine 1 in den Vektor schreiben.
Der Vektorindex fängt aber immer bei 1 an und darf nicht 0 werden!

Bsp.

h=[ 0 0 0 1 1 0 0 0 0 0];

dann hast du bei h(4) einen Sprung auf 1... h(5) ist auch 1 der Rest ist 
Null...

von Peter M. (Gast)


Lesenswert?

Beispiel:

x(k)= 2*h(k-1)-2*h(k-5)

Bei k=1 soll der Sprung auf 1 gehen und bei k=5 soll dieser Sprung 
wieder auf 0 gehen.  Dies bedeutet dass bei k=2 und k=3 und k=4 der 
Sprung auf 1 ja bleiben soll. Erst bei k=5 soll der Sprung wieder auf 0 
gehen und da auch bleiben.

von Peter M. (Gast)


Angehängte Dateien:

Lesenswert?

Sprung Funktion:

function [x] = h(k,m)
if(k==m | k>m)
    x=1;
else
    x=0;
end


Matlab Programm:

x=[0,0,0,0,0,0,0,0,0,0];
for k = 1:8
  x(k)= 2*h(k,1)-2*h(k,5)
end

figure(1);
plot(x);

Was mir da noch nicht so gefällt ist, dass der Sprung bei k=5 nicht 
gleich auf Null springt. Wie könnte man dies in Matlab lösen?

von mat (Gast)


Lesenswert?

also du willst dein x(k) bauen?

hilft es dir, wenn du mit
x=zeros(1,laenge);
x =

     0     0     0     0     0     0     0     0     0     0
einen Vektor der Länge laenge mit Nullen erzeugst und du dann die 
Sprünge einfügst?

x(3)=1;
x(5:8)=1;
x =

     0     0     1     0     1     1     1     1     0     0

von mat (Gast)


Lesenswert?

ok, jetzt habe ich deinen Weg verstanden, so geht es auch... erscheint 
mir aber etwas umständlich. Meist sieht ein Algorithmus auf dem Papier 
anders aus als die MATLAB-Implementation...

die Schräge kommt zustande, weil die Plotfunktion einfach nur die Werte 
geradlinig verbindet. Dein x(4) ist 1, dein x(5) ist 0, also ergibt das 
verbunden eine Schräge...

von Peter M. (Gast)


Lesenswert?

Ich tue mit der Funktion "stem" das ganze grafisch darstellen.
Das ist besser. Danke für die Hilfe.

von Peter M. (Gast)


Angehängte Dateien:

Lesenswert?

Wie erreicht man das der Plot bei 0 beginnt und nicht bei 1?

Bei der Verwendung von Rampen funktioniert meine Funktion nicht.

Beispiel:
N=5;
x=zeros(1,N);

for k = 1:N
  x(k)= k*h(k,0) - k*h(k,3);
end

figure(1);
stem(x);
grid on;

von Peter M. (Gast)


Lesenswert?

Wahrscheinlich muss ich für die Rampe auch eine eigene Funktion 
schreiben.

von mat (Gast)


Lesenswert?

Der Plot kann meines Wissens nicht bei Null anfangen, da der Index Null 
nicht existiert. Bei meinen Simulationen fällt das aber kaum auf... 
(>90000 Samples)

von Peter M. (Gast)


Lesenswert?

Ok. Wie sieht dann die Rampenfunktion aus?

von Peter M. (Gast)


Lesenswert?

x(k)= k*h(k,0) - k*h(k,3);

In diesem Beispiel beginnt die Rampe bei k=0. Bei k=3 geht die Rampe 
wieder nach unten. Das in Matlab zu programmieren bereitet mir probleme.

von mat (Gast)


Lesenswert?

Ich weiß, das ist nicht so, wie du es haben willst, aber vielleicht 
hilft es beim Basteln:

x1=0:1/10:1;
x2=ones(1,10);
x3=1:-1/10:0;
x=[x1 x2 x3];

von Björn (Gast)


Lesenswert?

Plot der bei null anfängt:

>> x= 1:10;
>> t=0:length(x);
>> t=0:length(x)-1;
>> plot(t,x)

von Peter M. (Gast)


Lesenswert?

Die Rampenfunktion ist eine echt knifflige Angelegenheit.

von Peter M. (Gast)


Lesenswert?

y(k) = k * r(k,0,5)

Rampenfunktion:

% m1: Start der Rampe
% m2: Ende Rampe
function [x] = r(k,m1,m2)

if(k>=m1 & k<m2)
    x=k;
else
    x=m2;
end

------------------------------------------------------------------
Soweit funktioniert mal die Rampenfunktion. Nur beim abschalten 
"-k*r(k,5,10)" da klemmt es noch.

von Peter M. (Gast)


Lesenswert?

Kann mir da jemand noch einen Rat geben, wie man so eine Rampenfunktion 
in Matlab programmiert?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.