ich sitze gerade daran eine transferfunktion zu verstehen und anzuwenden und vlt kann mir hier jmd vlt helfen...
Ich würde gerne die transferfunktion meines beschleunigungssignal darstellen lassen. Also mir wurde gesagt ich solle die FFT durch die frequenz^4 teilen. Sow ürde ich dann die EIgenfrequenzen des Systems erkennen können. wenn die Dämpfung nicht zu groß ist. Also die amplitude soll durch die frequenz^4 geteilt werden. Nur verstehe ich das nicht so ganz. Also habe ich das folgende versucht....
Code:
y=xx;
FS=1000;
L=length(y);
fft_tmp=fft(y); %fft-Ergebnis ist ein Array aus komplexen Zahlen, wobei der Realteil die Amplitude und der Imaginärteil die Phase darstellt
fft_ampl=2*abs(fft_tmp(1:L/2+1))/L; %Phase interessiert nicht und komplexe Zahlen lassen sich schwer darstellen, deswegen wird der Absolutwert(Realteil) bestimmt und dann noch normiert
fff=linspace(0,FS/2,L/2+1);
fft_ampl=fft_ampl./ fff^4
Leider kommen da diverse Errors und ich bin mir nicht ganz sicher warum...
Das war eigentlich nur ein Versuch, um überhaupt zu sehen ob und inwiefern man was sehen/erkennen kann.
Eigentlich arbeite ich ja mit der Funktion, die mir hier nahegelegt worden ist. Könnte man das dort auch einbringen? Also so dass ich eine Transferfunktion erhalte?
Code:
function[mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa, window, scale) % Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % window: Fensterfunktion als Vektor % scale: 0 = keine Impulsantwort als Eingang, 1 = Impulsantwort % Output: % Magnitude des Spektrums linear und dB skaliert % Frequenzvektor fv in [Hz] von 0...fa/2
% un-,gerade Anzahl Messwerte? ifmod(nfft,2) == 0;
k = (nfft/2) + 1;
else
nfft = nfft + 1;
k = (nfft/2) + 1;
end
% Betrag - nur positives Freq.spektrum if scale == 0
Fy_pos0 = abs(Fy(1:k));
% Skalierung
mag = [Fy_pos0(1)/Lsig ;Fy_pos0(2:k-1)/(Lsig/2);Fy_pos0(k)/Lsig];
else% nicht durch nfft teilen bei Impulsantwort
mag = abs(Fy(1:k));
end
% Umrechnung in dB
mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0)
Aus der FFT eines Signals kannst Du keine Übertragungsfunktion (oder engl. transfer function) bestimmen. Geht einfach nicht.
Eine Übertragungsfunktion gibt das Eingangs-Ausgangsverhalten eines Systems an. Also es kommt dass Signal B raus, wenn man das Signal A reinsteckt. Wenn man die Übertragungsfunktion aus Messungen bestimmen will, benötigt man also *zwei* Signale. Eine FFT ist die Zerlegung *eines* Signals in seine Frequenzbestandteile.
Bevor Du anfängst, irgendwas durch die vierte Potenz von irgendwelchen Vektoren oder Matrizen zu dividieren, wäre es sicher hilfreich, wenn Du erst mal herausfindest, was folgende Dinge sind:
* Laplace-Transformation
* Übertragungsfunktion
* Bode-Diagramm
* Fouriertransformation
* Verhalten einfacher Übertragungsglieder (P, I, PT1, PT2, DT1, ...)
Wenn Du das alles verstanden hast, dürfte sich auch dein Matlab-Problem von selbst in Luft auflösen. Das sind Grundlagen der Systemtheorie - die wirst Du früher oder später ohnehin können müssen. Also lieber jetzt lernen, als später ;)
Ehrlich gesagt, habe ich auch nicht verstanden was genau der Typ von mir will, als er meinte ich solle das teilen und durch die vierte Potenz teilen...
Das macht für mich so direkt auch keinen Sinn... War das denn ein vertrauenswürdiger Typ?
Was für eine Messung hast Du denn genau bekommen? Und gibt es sonst noch weitere Informationen? Zum Beispiel, unter welchen Umständen die Messung zustande gekommen ist? Also was wurde für ein Versuch gefahren? In dieser Information könnte nämlich schon die Auskunft über das Eingangssignal stecken...
Naja ich habe Erregerfrequenzen bis zu 4 Hz. Es wurde eine horizontale Schwingung ausgeübt auf ein Bauwerk quasi und dabei haben Sensoren im Boden Beschleunigungen gemessen. Also theoretisch weiß ich womit angeregt worden ist. Und ich weiß auch, dass die Frequenzen von 4Hz beispielsweise im Boden ankamen bzw. zu erkennen sind in einer FFT.
Der Typ ist schon vertrauenswürdig. Ich versteh nur eigentlich absolut gar nicht warum ich das jetzt so machen sollte und was genau mir das zeigen soll. Weil ich habe natürlich gestern auch schon ein wenig gelesen was eigentlich eine Übertragungsfunktion ist. Aber hat für mich jetzt so wenig Sinn gemacht.
Ah, die Geschichte...Nur, weil Du die Erregerfrequenz kennst, kennst Du das Erregersignal noch lange nicht. Da fehlen Dir noch Amplitude und Phasenlage.
Was Du machen willst, heißt Frequenzganganalyse. Da solltest Du tonnenweise Material finden, wie Du da grundsätzlich vorgehen kannst.
Dein ganzes Vorhaben macht generell nur Sinn, wenn Du ein lineares System hast. Solltest Du in Deinen Messungen irgendeine Art von nicht linearem Effekt erkennen können (zum Beispiel Oberschwingungen) kann man keine Übertragungsfunktion angeben.
um die notwendigen Grundlagen zur Analyse und Beschreibung von dynamischen Systemen zu erlangen empfehle ich:
Heinz Unbehauen, Regelungstechnik I + II
Das sollte einen guten Überblick über die Kriterien eines dynamischen Systems und deren Ermittlung geben.
Band III dieser Serie wäre dann etwas zur Systemidentifikation.
Gruß
_________________
"Who you gonna call?!?" - "Matlab."
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.