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

Dämpfungsbestimmung mittels FFT und IFFT

 

Sop_hia

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2022, 13:03     Titel: Dämpfungsbestimmung mittels FFT und IFFT
  Antworten mit Zitat      
Hallo,

ich habe die Messdaten eines Beschleunigungssensors und möchte daraus die 1. Eigenfrequenz ermitteln und das Signal im Bereich der ersten Eigenfrequenz anschließend wieder in den Zeitbereich transformieren um aus dem geglätteten Beschleuniguns-Zeitschrieb die Dämpfung zu bestimmen (es handelt sich um die Daten einer als Einfeldträger gelagerte Platte).
Aktuell mache ich das, indem ich alle Amplituden außerhalb des Frequenzbereiches zu 0 setzt und anschließend eine IFFT durchführe. Allerdings scheint mir diese nicht Richtig, da die Dämpfungswerte zu gering sind und außerdem zu stark abhängig vom Frequenzbereich.
Wie wäre das besser zu lösen?

Danke!


Code:


clear;
%--------------------------------------------------------------------------
% E I N G A B E W E R T E
%--------------------------------------------------------------------------
dateiname = 'Versuch_02_20220928_001.xlsb';
kanal_kraft = 1;
kanal_beschleunigung = 2;


minf = 3;   % minimale Frequenz für Darstellung
maxf = 50;  % maximale Frequenz für Darstellung

%--------------------------------------------------------------------------
% Split Impulshammerschläge
t1 = (1:4700);
t2 = (4701:8900);
t3 = (8901:11800);
t4 = (11801:17000);
t5 = (17001:21200);
t6 = (21201:30247);

werte = xlsread('Versuch_02_20220928_001.xlsb');
zeit = werte(t4,1);
kraft = werte(t4,1+kanal_kraft);
beschleunigung = werte(t4,1+kanal_beschleunigung);
fs = round(1/mean(diff(zeit)));  % Abtastrate in Hz (Durchschnittliche Aufzeichnungen je Sekunde)

n = length(kraft);                  % Länge verwendete Daten
freq = linspace(0,(n-1)/n,n)*fs;    % Frequenz
F = fft(kraft)/n;
A = fft(beschleunigung)/n;

close all

%Grafische Darstellung der Messdaten
%Plot Impulshammerschläge
figure
plot(zeit,kraft);
xlabel('t (s)')
ylabel('F(N)')
title('Zeit - einwirkende Kraft')

%Plot Zeit - Beschleunigung
figure
plot(zeit,beschleunigung);
xlabel('t (s)')
%xlim([17,19])
ylabel('a(m/s^2)')
title('Zeit-Beschleunigung')

%------------------------------------------------------
% Ermittlung der Eigenfrequenzen
%------------------------------------------------------

%Plot der FFT über die Frequenz
figure;
plot(freq,abs(A))
xlabel('f (Hz)')
xlim([minf,maxf])
ylabel('Amplitude')
title('Frequenzverteilung')

% Test IFFt über gesamten Bereich
ifft_a = ifft(A)*n;
figure;
plot(zeit,ifft_a)
xlabel('Zeit [s]')
% xlim([minf,maxf])
ylabel('Beschleunigung [m/s^2]')
title('Zeit')

% Ermittlung der ersten Eigenfrequenz
a = abs(A);
[val pos] = max(a);         %Wieso wird immer der Wert bei 0 Hz und die 1. Eigenfrequenz ausgegeben?

fi = freq(pos);
f1 = fi(1);

%--------------------------------------------
%Intervall der ersten Eigenfrequenz
%--------------------------------------------

% WIE BREIT??
f_min = f1-1;
f_max = f1+1;


%-------------------------------------------------------------------------
%Herausfiltern erste Eigenfrequenz und Nullsetzten der anderen Frequenzen
%-------------------------------------------------------------------------
Eigenfreq = freq;
Eigenfreq(Eigenfreq < f_min)=0;
Eigenfreq(Eigenfreq > f_max)=0;
a_neu = a*n;


% Werte von a_neu 0 setzten, die bei Eigenfreq 0 sind
i = 1;
while i < n
    if Eigenfreq(i) == 0
        a_neu(i,1)=0;
    end
    i=i+1;
end


beschleunigung_f1 = ifft(a_neu, n);
beschleunigung_f1 = real(beschleunigung_f1);
 
figure;
plot(freq, a_neu)
xlabel('f (Hz)')
xlim([minf,maxf])
ylabel('Amplitude')
title('Frequenzverteilung nach Nullsetzen')

%-------------------------------
%Ermittlung der Dämpfung
%-------------------------------

% Einhüllende bestimmen
a_Daempfung = beschleunigung_f1*1000;
a2=diff(a_Daempfung);
pos_hoch=find(a2(1:end-1)>0 & a2(2:end)<0);
pos_tief=find(a2(1:end-1)<0 & a2(2:end)>0);
figure
plot(zeit,a_Daempfung)
hold on
plot(zeit(pos_hoch+1),a_Daempfung(pos_hoch+1),'ro-')
plot(zeit(pos_tief+1),a_Daempfung(pos_tief+1),'bo-')
title('Beschleunigung über die Zeit im Bereich der ersten Eigenfrequenz')
ylabel('Beschleunigung [mm/s^2]')
xlabel('Zeit[s]')

%Beschleungigungswerte bestimmen
x0 = pos_hoch(1)+1; % x-Position
x10 = pos_hoch(11)+1; % x - Position

a0 = a_Daempfung(x0);    % max. Beschleunigung
a10 = a_Daempfung(x10);   % Beschleunigung 10 Perioden später


% Dämpfung
D = 1/(2*pi)*1/10*log(a0/a10);
 


Neues Thema eröffnen Neue Antwort erstellen



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.