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
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
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
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
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
nichtNick schrieb: > ich benutze zur Erzeugung von Sweeps immer die Formel: > g(t) = sin(2*pi*Int(f_t)), die ist ja auch richtig.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.