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
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.
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.