Signalerzeugung in Matlab (Sinesweep mit steigender Frequenz(e-Funktion))

Gast #3222573
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
Angehängte Dateien:
Gast #3222976
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
Gast #3223351
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
Gast #3223387
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
Gast #3224051
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
Angehängte Dateien:
Gast #3224706
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
Gast #3224733
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren