Forum: Digitale Signalverarbeitung / DSP / Machine Learning Signalerzeugung in Matlab (Sinesweep mit steigender Frequenz(e-Funktion))


von Mille (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich komme bei meinem folgenden Problem einfach nicht weiter:
Ich möchte mit Matlab eine Anregung erzeugen (Sinussignal mit nach einer 
e-Funktion steigender Frequenz und konstanter Amplitude; das alles mit 
1000Hz Auflösung) und irgendwie geht das so nicht:

Amp = 5;
T_End=55;
EKoeff=0.8432;
EExp=0.061;
T=0:0.001:T_End;
T=T';
Frequ=EKoeff*exp(EExp*T);
omega=2*pi*Frequ;
Master=Amp*sin(omega.*T);

Die Koeffizienten der e-Funktion habe ich aus Messtechnik gefittet 
(siehe Anhang). Laut Excel soll mit diesen Koeffizienten die e-Funktion 
bei 55 Sekunden (T_End... Endzeitpunkt) die Apmlitude (maximale 
Frequenz) bei ca. 25Hz sein.
Aus irgendeinem Grund hat das Signal am Endzeitpunkt jedoch 100Hz.
Kann mir da jemand weiterhelfen?

Danke und LG,
Mille

von Ärger (Gast)


Lesenswert?

Sin ( 2 x Omega t)

von Gerhard Zintel (Gast)


Lesenswert?

Hallo,

ich bin mir ziemlich sicher, dass man das so nicht machen kann. Der 
Fehler scheint daran zu liegen, dass zu einem beliebigen Zeitpunkt die 
Formel

  sin(omega.*T)

davon ausgeht, dass omega eine Konstante für alle früheren Zeitpunkte 
war, was sie aber nicht ist.

Kann dir keine geschlossene Lösung bieten (im Sinne einer Formel), aber 
Pseudo-Code, der das richtige Ergebnis liefern müsste (Pseudo-Code, da 
ich Matlab nicht kann);

Amp = 5;
T_End=55;
EKoeff=0.8432;
EExp=0.061;
DeltaT=0.001;

T = 0; Argument = 0; i=0;
repeat
  Frequ=EKoeff*exp(EExp*T);
  Argument = Argument + PI*Frequ*DeltaT;
  Master[i]=Amp*sin(Argument);
  i = i+1;
  T = T + DeltaT;
until T > T_End

Dieser Code berechnet für jeden neuen Zeitschritt den dann notwendigen 
Phasenwinkel (hier Argument genannt) und benötigt diesen später zur 
Berechnung des nächsten Zeitschrittes.

Kann es in Matlab nicht ausprobieren, läuft aber gut in Pascal bei mir 
wenn man für Master ein entsprechen großes Array benutzt.

Gerhard

von Mille (Gast)


Lesenswert?

Hallo,

danke für deine Antwort, du hast Recht gehabt.
Ich habe deinen Pseudo-Code umgesetzt und es funktioniert:

Amp = 5;
T_End=55;
EKoeff=0.8432;
EExp=0.061;

Master = zeros(55000,2);
Argument = 0;
T = 0;
DeltaT = 0.001;
for i = 1 : 55000
    Frequ = EKoeff * exp(EExp * T);
    Argument = Argument + 2  pi  Frequ * DeltaT;
    Master(i,1) = T;
    Master(i,2) = Amp * sin(Argument);
    T = T + DeltaT;
end


Ich habe nur das Problem bei meiner Variante im Vergleich zu deiner 
nicht verstanden???
Deine Variante ändert ja das Argument der sin-Funktion auch in jedem 
Zeitschritt...

LG Mille

von Mille (Gast)


Angehängte Dateien:

Lesenswert?

Hier sieht man noch das omega graphisch über der Zeit (durch 2*pi ergibt 
das schon die 25Hz) bei meiner Lösungsvariante...
Soll zeigen das das omega eigentlich passen sollte.

LG Mille

von nichtNick (Gast)


Lesenswert?

Hallo,

ich benutze zur Erzeugung von Sweeps immer die Formel:
g(t) = sin(2*pi*Int(f_t)),

wobei f_t der Frequenzvektor mit der gewünschten Zunahmefunktion 
(linear, logarithmisch, e-Funktion, ...) ist. Somit spart man sich die 
Schleife.

Die Zeile "Argument = Argument + 2  pi  Frequ * DeltaT;" in der 
For-Schleife ist auch nichts anderes als eine Integralbildung.

LG nichtNick

von Dumdi D. (dumdidum)


Lesenswert?

nichtNick schrieb:
> ich benutze zur Erzeugung von Sweeps immer die Formel:
> g(t) = sin(2*pi*Int(f_t)),

die ist ja auch richtig.

von Gerhard Zintel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Mille,

ja, dein Omega stimmt, habe ich nicht in Frage gestellt. Aber du darfst 
die Formel so nicht verwenden. Ich habe mal zur Veranschaulichung ein 
Bild angehängt. Darin rotiert ein Zeiger im Einheitskreis im 
Uhrzeigersinn. Links mit konstanter Frequenz. Im Beispiel wird der 
Zeiger pro Sample gerade um 30° weiter rotiert (von t1 über t2 nach t3).

Jetzt nimm an, die Frequenz wächst, so dass zwar t1 nach t2 30°, von t2 
nach t3 aber 45° rotiert werden muss. Du bekommst die richtige 
Darstellung wie im mittleren Bild.

In deiner Formel wird aber im Zeitpunkt 3 angenommen, dass das neue 
Omega für alle alten Zeitpunkte gegolten hat, also wird der Zeitpunkt t3 
berechnet, als ob immer 45° verschoben werden müssen, dein neuer Zeiger 
rotiert also von t2 zu t3 um 60°. Da dieser Fehler für jedes neue Sample 
passiert, rotiert dein Zeiger insgesamt zu schnell und du bekommst als 
Effekt zu hohe Frequenzen, selbst wenn dein Omega richtig berechnet ist!

@nichtNick: Danke für den Tip. Ja, mir war nicht aufgefallen, das meine 
diskrete Summe im Endeffekt das Integral ist. Wieder was gelernt.

Gerhard

von Mille (Gast)


Lesenswert?

Danke Gerhard, jetzt habe ich meinen Fehler verstanden!

Nur eine Frage bleibt noch übrig:
Wieso bekomme ich mit meiner Formel genau die 4-fache Endfrequenz 
heraus?
Ist zwar nicht wichtig, interessiert mich aber trotzdem :-)

LG

von Gerhard Zintel (Gast)


Lesenswert?

Tja, da fällt mir auf Anhieb auch keine vernünftige Begründung ein. 
Müsste eigentlich an der Steigung der Frequenzsweeps liegen. Du kannst 
ja mal mit anderen Steigungen fon Omega über der Zeit die alte und die 
neue Methode vergleichen.

Gerhard

von Dumdi D. (dumdidum)


Lesenswert?

Mille schrieb:
> Wieso bekomme ich mit meiner Formel genau die 4-fache Endfrequenz
> heraus?

ist es genau 4-fach? Normalerweise ist die instantan Frequenz durch die 
Ableitung des Argumentes mit der Zeit definiert, in Deinem Fall sollte 
es das 4,35 Fache der 'erwarteten' sein.

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.