Forum: Digitale Signalverarbeitung / DSP / Machine Learning MATLAB Sägezahn plotten


von Kevin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Habe eine kleine Frage, ich müsste das Signal x2[n] wie im Anhang in 
MATLAB plotten. Dabei soll M=25 sein und die Samplingfrequenz 
fs=16.000Hz.
Das Signal selbst soll 2 Sekunden lang dauern, sprich x-Achse ist die 
Zeit t.

Ich habe schon folgende Lösung nur habe ich keine wirkliche Idee wie ich 
das ganze plotten soll!

n = 0:T_s:M-1;

x_2 = n/((M-1)/2) - 1; %Erzeugtes Sinussignal

signal = repmat(x_2,1,2);

plot(signal) //Gibt mir aktuell nur 2 Perioden aus, aber mit irgendeiner 
x-Achse.

Hättet ihr ein paar Ideen?

LG Kevin

von TestX (Gast)


Lesenswert?

Plot(n, signal) ... guck dir mal die hilfe zu plot an...da gibt es viele 
beispiele wie man im diskreten raum plottet

von Kevin (Gast)


Lesenswert?

Danke!

Habe es mal nach deinem Vorschlag hin versucht.
Wenn ich folgendes verwende

signal = repmat(x_2,1,1);

plot(n, signal)

Bekomme ich eine Periode welche n=25 dauert, aber keine 2 Sekunden, da 
komme ich nicht wirklich weiter.
Der Befehl stem() wäre für Diskreten Plot - ergibt aber leider dasselbe 
Ergebnis

von Alexander (Gast)


Lesenswert?

Zeig mal den gesamten Code, nicht nur Ausschnitte. So ist das alles nur 
Rätselraten.
Im Code ist nirgendwo die Abtastrate fs=16000 drinnen, sondern 
bestenfalls T_s, was ich annehme, ist T_s=1/f_s - richtig?

Wie viele Einträge hat dein n im Workspace? Bei Abtastfrequenz 1/16000 
bis hin zu 25-1=24 sollte das ein ziemlich großer Vektor sein.

Gleiches gilt für x_2.

Passen die Werte für n und x_2, dass du eine Periode bekommst?

von Kevin (Gast)


Lesenswert?

Das hier wäre der gesamte Code:

f   = 640;               % Frequenz
T   = 1/f;               % Periodendauer
A   = 1;                 % Amplitude
f_s = 16000;             % Abtastfrequenz
T_s = 1/f_s;             % Abtastperiode
N   = 1280;              % Anzahl abzutastender Perioden
M = 25;
n = 0:T_s:M-1;
%t_s = 0:T_s:(T*N);

x_2 = n/((M-1)/2) - 1;
signal = repmat(x_2,1,2);
plot(signal)

Die letzte Ziffer in der Funktion repmat() ergibt quasi die Duplikation, 
sprich die Perioden des Signals.

Das funktioniert schon mal. Eben die 2 Sekunden im Zeitbereich als plot 
ist schwierig.

von Jan K. (jan_k)


Lesenswert?

Häh, was rechnest du denn da? Du musst dich entscheiden ob du in Samples 
oder Zeit denken möchtest.
Die Anzahl deiner Samples (length(n)) und die Abtastrate f_s definiert 
doch automatisch, wie lang dein Signal ist. Nämlich genau n./f_s.

Allerdings ist n hier widersprüchlich definiert, denn n hat aus 
irgendwelchen Gründen die Schrittweite T_s. n sollte aber ein Integer 
sein. Ein diskreter Zeitpunkt.

Willst du über die Zeit gehen, so erzeuge auch einen Zeitvektor:
1
t = 0:T_s:2; % zeitvektor von 0 bis 2 (inklusive 2) Sekunden
2
n = t./T_s; % length(n) diskrete Zeitschritte

Btw, A und N werden nicht benutzt, lösch' die Variablen! Die Kommentare 
sind auch teilweise murks.
Unterstriche in Variablennamen sind mega umständlich einzutippen.

edit:
hab' mir nochmal die Definition des Signals angesehen und bin gerade 
etwas ratlos. Wenn n nur zwischen 0 und 24 sein darf, was passiert für 
größere n? Wird das Signal periodisch fortgesetzt? Wenn ja, wo steht 
das?

: Bearbeitet durch User
von Detlef _. (detlef_a)


Lesenswert?

So vllt.:

fs=16000;     % samplefrequenz
t=0:1/fs:2 ;  %Zeitachse
M=25;

x2= rem(0:length(t)-1,M); % In Blöcke von M Stueck aufteilen
x2= x2/((M-1)/2)-1; %verschieben,skalieren
plot(t,x2)

Cheers
Detlef

von Kevin (Gast)


Lesenswert?

Hallo,

Besten Dank hat mir verdammt gut weitergeholfen eure Antworten! :D

Bin gerade richtig happy das alles funktioniert!

Wünsche euch einen schönen Abend!

LG Kevin

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.