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?
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...
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)];
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.
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
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...
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.
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?
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
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...
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;
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)
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.
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.