ich habe Messwerte von eine Maschine. Durch diese Messdaten will ich den Systemverhalten der Maschine ermitteln und anschließend ein Regelalgorithmus erstellen um die maschine zu regeln.
Die Messdaten habe ich schon gefiltert sowie den effektivwert gebildet.
als nächstes will ich dies in bode diagramm plotten um dadurch den System verhalten zu ermitteln.
Meine frage ist, wie plotte ich das? ist das überhaupt möglich wenn man nur die Messwerte und die Abtast frequenz hat??
ja genau mit einer FFT sollte das recht gut gehen. Wenn es sich um eine SISO-System handelt kannst du auch eine Systemidendifikation (siehe Toolbox System Identification) durchführen, da eine Übertragungsfunktion dir sicher mehr weiterhilft als das Bodediagramm.
ja genau mit einer FFT sollte das recht gut gehen. Wenn es sich um eine SISO-System handelt kannst du auch eine Systemidendifikation (siehe Toolbox System Identification) durchführen, da eine Übertragungsfunktion dir sicher mehr weiterhilft als das Bodediagramm.
Viele Grüße
Coja
aus dem System ist mir nur das Messsignal vom Sensoren bekannt.
das Toolbox System Identification verlangt auch ein Input was ich ja nicht hab. oder muss ich selber es den Input frei deffinieren?
Das System (Übertragungsfunktion) beschreibt ja den Zusammenhang zwischen Ein- und Ausgangssignal. Um ein System möglichst gut zu identifizieren, benötigt man eben beide Signale. Ist gibt zwar auch Modelle (AR) die nur das Ausgangssignal berücksichtigen, aber doch je nach System und tatsächlichem Eingangssignal sehr ungenau werden. Diese Modelle sind lediglich für einfachste Systeme und Anregungen (z.B. Sprungantwort) wo keinerlei Störungen auftreten.
Sollte es sich allerdings wirklich um PT1 und PT2 handeln, sollte es ja wohl sehr einfach sein, dies aus der Sprung- bzw. Impulsantwort (Bodediagramm) zu bestimmen.
Schau dir bitte das Skript aus dem Link an...das Bodediagramm wird mit der FFT erstellt. Dazu brauchst du nur deine Daten, Abtastfrequenz und Anzahl Messwerte.
Code:
function[mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa) ;
% Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % 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
Könnte man...aber so geht es deutlich einfacher. Man muss nur etwas die Funktion anpassen. Evtl. solltest du dir für die Darstellung auch mal den Befehl
function[mag, mag_dB, fv, phase_rad, phase_grad] = FFT_bode( signal, nfft, fa) ;
% Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % 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
Könnte man...aber so geht es deutlich einfacher. Man muss nur etwas die Funktion anpassen. Evtl. solltest du dir für die Darstellung auch mal den Befehl
function[mag, mag_dB, fv, phase_rad, phase_grad] = FFT_bode( signal, nfft, fa) ;
% Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % 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
Offensichtlich ist dir die Funktionsweise einer Funktion nicht geläufig. Das solltest du dringend nachholen.
Das Laden der Daten und das Plotten soll nicht innerhalb der Funktion passieren. Sicherlich braucht man keine Funktion wenn man nur einen Datensatz auswerten will. Aber deine Verwendung macht so eigentlich keinen Sinn.
Eine Funktion wird in einem seperaten m-file gespeichert und in einem anderen aufgerufen.
Code:
fa = 4000;
signal = evalin('base','Y_eff')%load('vc50_vf18_ae4_f3_1__s3.txt');%)%
nfft = length(signal);
Ebenfalls sollte man es vermeiden m-files Namen zu geben, die bereits durch Matlab eigene Funtkionen belegt sind. Das führt nämlich zu schwer nachvollziehbaren Fehlern, wenn man dann die Funktion aufruft.
Ansonsten sehe ich keine Fehler
EDIT: Die Frequenz beim Phasendiagramm ist nicht in rad/s. Außerdem scheint es, dass du sehr wenige Punkte hast und somit das Spektrum ungenau sein kann. Bei diesem Verlauf ist es allerdings nicht ganz einfach auf das Übertragungsverhalten zu schließen. Dir sollte bewusst sein, dass man bei einem Bodediagramm das Systemverhalten auf einen Impuls (Dirac-Stoß) als Eingangssignal hin untersucht . Wenn das Eingangssignal kein Impuls ist, muss man das Eingangssignal explizit kennen (also ebenfalls das Frequenzspektrum davon). Sonst kann man das System nicht bestimmen!
Das system den ich modellieren will liefert durch angebrachte sensoren ein messsignal (schwingung) Diese Messwerte sind stark verrauscht. Die habe ich mit ein tiefpass gefiltert und anschliessend den Effektivwert mit ein interval von 100 messwerte gebildet.
Aus dem gemittelten effektivwert versuch ich den systemverhalten zu ermitteln durch das plotten in bode diagramm.
Als eingangsignal auf dem System istl die vorschub geschwindigkeit sowie die schnittgeschwindigkeit.
Ob ich auf diese weise zu eine losung kommen werde, weisse ich noch nicht.
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.