WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Systemverhalten aus gemessenen Daten ermittelen/ Bodediagram

 

assem
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2012, 17:45     Titel: Systemverhalten aus gemessenen Daten ermittelen/ Bodediagram
  Antworten mit Zitat      
Hallo,

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??
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 23.10.2012, 21:45     Titel:
  Antworten mit Zitat      
Ja, dass ist möglich...mittels FFT, welche auch die Bode Funktion benutzt.
Schau dir dazu mal dieses Skript an

http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html

bzw. es gibt hier auch einige Threads zum selber erstellen des Bodediagramms. In dem Skript wird das Betragsspektrum erzeugt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2012, 21:49     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 09:14     Titel:
  Antworten mit Zitat      
Coja hat Folgendes geschrieben:
Hallo,

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.10.2012, 10:22     Titel:
  Antworten mit Zitat      
Nein...das würde nicht viel bringen.

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 10:32     Titel:
  Antworten mit Zitat      
die frage wie kann ich das in bode ploten. und ob es über FFT methode richtig ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.10.2012, 10:41     Titel:
  Antworten mit Zitat      
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?
if mod(nfft,2) == 0;
    k = (nfft/2) + 1;
else
    nfft = nfft + 1;
    k = (nfft/2) + 1;
end

fn = fa/2; % Nyquistfreq.
df = fa/nfft; % Frequenzauflösung des Spektrums
% Frequenzvektor: Darstellung bis Nyquistfreq.
fv = 0: df : fn;

sig = signal(:);

% Signal transformieren
Fy = fft(sig,nfft);
 
%   Betrag - nur positives Freq.spektrum  
Fy_pos0 = abs(Fy(1:k));
 
%   Skalierung  
mag = [Fy_pos0(1)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft];

% Umrechnung in dB
mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0)
 


Nutze die Funktion für das Betragspektrum.

Zur Darstellung nutzt du dann die Rückgabevektoren der Funktion
Code:

semilogx(fv,mag_dB)
xlabel('Freuqenz in Hz');
ylabel('Magnitude in dB');
 


Jetzt musst du noch das Phasendiagramm erstellen. Auch hier gibt es Bsp. im Forum...nutze einfach mal die Suchfunktion Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 10:43     Titel:
  Antworten mit Zitat      
ok danke
ich versuche es jetzt zu machen
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 13:28     Titel:
  Antworten mit Zitat      
ich hab den amplitudengang geplotte.

aber den phasengang kriege ich nicht hin, alles was ich bis jetzt gefunden hab basieren sich auf eine Übertragungsfunktion.

muss man es mit diese Formel machen : Phasengang = arctan(Im/Re)?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.10.2012, 13:41     Titel:
  Antworten mit Zitat      
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
Code:
ansehen.

Code:


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?
if mod(nfft,2) == 0;
    k = (nfft/2) + 1;
else
    nfft = nfft + 1;
    k = (nfft/2) + 1;
end

fn = fa/2; % Nyquistfreq.
df = fa/nfft; % Frequenzauflösung des Spektrums
% Frequenzvektor: Darstellung bis Nyquistfreq.
fv = 0: df : fn;

sig = signal(:);

% Signal transformieren
Fy = fft(sig,nfft);
 
%   Betrag - nur positives Freq.spektrum  
Fy_pos0 = abs(Fy(1:k));
 
%   Skalierung  
mag = [Fy_pos0(1)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft];

% Umrechnung in dB
mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0)

% Berechung der Phase in rad/s
phase_rad = angle(Fy(1:k));

% Umrechnung in grad
phase_grad = phase_rad * (pi/180) ;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 13:53     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:
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
Code:
ansehen.

Code:


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?
if mod(nfft,2) == 0;
    k = (nfft/2) + 1;
else
    nfft = nfft + 1;
    k = (nfft/2) + 1;
end

fn = fa/2; % Nyquistfreq.
df = fa/nfft; % Frequenzauflösung des Spektrums
% Frequenzvektor: Darstellung bis Nyquistfreq.
fv = 0: df : fn;

sig = signal(:);

% Signal transformieren
Fy = fft(sig,nfft);
 
%   Betrag - nur positives Freq.spektrum  
Fy_pos0 = abs(Fy(1:k));
 
%   Skalierung  
mag = [Fy_pos0(1)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft];

% Umrechnung in dB
mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0)

% Berechung der Phase in rad/s
phase_rad = angle(Fy(1:k));

% Umrechnung in grad
phase_grad = phase_rad * (pi/180) ;
 


% Umrechnung in grad
phase_grad = phase_rad * (pi/180) ;

mus das nicht so heißen: phase_grad = phase_rad * (180/pi) ;
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.10.2012, 13:59     Titel:
  Antworten mit Zitat      
Ja...das war falsch.
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 15:26     Titel:
  Antworten mit Zitat      
danke dir, es hat alles so gut geklapt.

kannst du drauf ein blick werfen

ich muss das noch annähren.

Bode.m
 Beschreibung:
M-file

Download
 Dateiname:  Bode.m
 Dateigröße:  1.48 KB
 Heruntergeladen:  800 mal
Bodediagram.fig
 Beschreibung:
Bodediagram

Download
 Dateiname:  Bodediagram.fig
 Dateigröße:  13.62 KB
 Heruntergeladen:  765 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.10.2012, 17:09     Titel:
  Antworten mit Zitat      
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);

% Funktionsaufruf - [Ergebnisse links],  (Übergabe der Daten rechts)
[mag, mag_dB, fv, phase_rad, phase_grad] = FFT_bode( signal, nfft, fa) ;

% Nutzen der Ergebnisse
subplot(2,1,1);
semilogx(fv,mag_dB)
xlabel('Freuqenz in Hz');
ylabel('Magnitude in dB');
xlim([min(fv) max(fv)])
grid on;

subplot(2,1,2);
semilogx(fv,phase_grad);
ylabel('Phase [°]');
xlabel('Frequenz [rad/s]');
xlim([min(fv) max(fv)]);
grid on;
 


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 Wink. Wenn das Eingangssignal kein Impuls ist, muss man das Eingangssignal explizit kennen (also ebenfalls das Frequenzspektrum davon). Sonst kann man das System nicht bestimmen!
Private Nachricht senden Benutzer-Profile anzeigen
 
assem
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 11.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 19:43     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3, 4, 5, 6, 7  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.