Forum: Digitale Signalverarbeitung / DSP / Machine Learning Impulsantwort aus Frequenzgang durch IFFT in Matlab


von Janek U. (patalmqx)


Angehängte Dateien:

Lesenswert?

Guten Abend liebe Götter des DSP!

Ich sitze wieder einmal vor Matlab und habe diesmal einen Frequenzgang 
eines Balkenschwingers (SISO, Eingang: Kraftaufnehmer am 
elektrodynamischen Shaker, Ausgang: 1 Beschleunigungssensor auf dem 
Balken) mittels der Welch Methode ermittelt.
Dieser stimmt auch mit dem Frequenzgang einer kommerziellen 
Schwingungsanalyse Software überein, soweit ich das sehen kann.

Der Frequenzgang ist in der frf.png zu sehen.
Der dazugehörige Frequenzvektor ist: fv=0:0.25:1599.75 [Hz] (Länge 
6400). Die DC Komponente der frf ist reell.

Nun kann man sich die Impulsantwort des Systems ja meines Wissens nach 
mit einer ifft berechnen. Dazu habe ich das Spektrum folgendermaßen 
erweitert (einseitig zu zweiseitig):

h1n=[0.5*h1 h1(1) 0.5*fliplr(conj(h1(2:end)))];

Der Frequenzvektor wird ebenfalls 'verlängert': (Länge nun 12800)

fvp=0:df:2*fv(end)+df;
fvp=0:0.25:3199.75;

Ifft dieser FRF h1n ergibt, wie erwartet, ein reelles Signal. Am Anfang 
besitzt es jedoch mit fast -9 einen sehr starken Ausschlag, der sofort 
abnimmt. Den Anstieg gegen Ende der IRF deute ich mal als mathematische 
Ungenauigkeiten/Messungenauigkeiten/Nichtlinearitäten..?

Habe ich etwas übersehen, oder ist diese Impulsantwort für dieses Modell 
richtig? Oder ist der starke Ausschlag eine Folge der Annahme als 
LZI-System?  Bei Bedarf kann ich auch den Code plus Daten zur Verfügung 
stellen!

Für Tips wäre ich sehr dankbar, da Beispiele zu diesem Problem sehr rar 
gesät sind!

Danke, patalmqx

: Bearbeitet durch User
von Detlef _. (detlef_a)


Lesenswert?

Bei 1600Hz hast Du noch fette Frequenzkomponenten. Du solltest für hohe 
Frequenzen keine Spektralanteile mehr haben. Im Zeitbereich heißt das, 
dass Nyquist erfüllt sein muß.

Der 'mittlere' Wert, bei Dir h1(1) ist der Nyquistanteil, den setzt Du 
0.

>>Den Anstieg gegen Ende der IRF deute ich mal als mathematische
Ungenauigkeiten/Messungenauigkeiten/Nichtlinearitäten..?

Glaub ich nicht, das liegt an was anderem, vllt. wie die Daten 
gefenstert/gemittelt werden. Was ist mit den Phasen, ich dachte Welch 
liefert ne PSD? Wenn Du alle Phasen Null setzt kommt genau der fette 
peak bei t=0 raus.

Cheers
Detlef

von Janek U. (patalmqx)


Angehängte Dateien:

Lesenswert?

Danke erstmal für die Antwort!
Zu den Spektralanteilen: Ich habe die Sensor-Position auf dem Balken 
variiert und damit mehrere FRFs aufgenommen. Wenn nun bei 1550 Hertz 
eine Eigenfrequenz des Balkens sitzt, muss ich die doch auch in der 
Amplitude sehen können, oder nicht?

Mit Nyquist meinst Du wahrscheinlich das Abtasttheorem? Ich denke, dass 
ich das nicht verletzt habe. Ich habe in meiner Software die maximale 
Frequenz im Spektrum auf 1,6kHz eingestellt, worauf es einen AA Filter 
einsetzt. Die Rohdaten (Kraft, Beschleunigung) zeigen auch, dass mit 
4,096 kHz abgetastet wurde, also dem 2.56 fachen von 1,6 kHz..für mich 
ein Signal, dass ein AA Filter eingesetzt wird. Bei der hochpreisigen 
Software würde mich ein fehlender AA Filter auch wundern. Ebenfalls ist 
ein 0,7 Hz Hochpass eingestellt.

Zum Nyquistanteil: Wieso setze ich den gleich 0? Ich hatte mit meiner 
"Methode" mal ein einfaches Beispiel (f(t)->F(f) einseitig->F(f) 
zweiseitig -> (IFFT) f(t)) programmiert. Dieses hatte funktioniert. Hier 
der Code:
1
clear;close all;
2
%23.10.13
3
%FRF2IRF test
4
5
n=1024; %Länge der Daten/FFT
6
fs=30;  %Abtastfrequenz
7
t=n/fs; %Gesamtzeit
8
dt=t/n; %Zeitinkrement
9
df=1/(t-dt);  %Frequenzinkrement im Spektrum
10
11
tv=0:dt:t-dt; %Zeitvektor
12
fv=0:df:fs; %Frequenzvektor
13
14
freq1=1;%Hz
15
freq2=0.5;%Hz
16
for j=1:length(tv)
17
    tj=j*dt; %aktuelle Zeit
18
    u(j)=0.5*sin(2*pi*freq1*tj)+cos(2*pi*freq2*tj); %Zeitsignal
19
end
20
plot(tv,u); hold on;
21
22
%Spektrum erzeugen mit FFT
23
sp=(1/length(u))*fft(u);
24
25
%Originalsignal durch IFFT
26
u_selbst=length(u)*ifft(sp);
27
%plot(tv,u_selbst,'r--');xlabel('t[s]');ylabel('u(t)');
28
29
%Einseitiges Spektrumn
30
lh=length(u)/2; %halbe Länge
31
hsp=2*sp(1:lh); %doppelte Amplitude
32
33
%Einseitiges Spektrum zu zweiseitigem Spektrum zusammensetzen
34
sp_s=0.5*[hsp hsp(1) fliplr(conj(hsp(2:end)))];
35
36
figure();
37
plot(fv,abs(sp),fv,abs(sp_s),'r--');title('zweiseitiges Spektrum aus FFT und aus einseitigem Spektrum zusammengesetzt (gestrichelt)');
38
39
fu_s=length(u)*ifft(sp_s); %Zeitsignal durch IFFT des zweiseitgen Spektrums wieder herstellen
40
figure();
41
plot(tv,fu_s,tv,u_selbst,'k')
42
hold on;
43
plot(tv,u,'r--');title('Originales Signal (rot) und aus IFFT erzeugtes Signal (schwarz)');


Angehangen sind die FRF von einer anderen Position am Balken aufgenommen 
plus PHase. Die rote Kurve ist die IRF aus meinem FFT Programm (noch 
ohne Frequenzachse) und die grüne IRF aus dem Programm. Die Kurven sehen 
sich doch schon irgendwie ähnlich..
Wieso ist die Einheit der IRF des Programms eigentlich 
(m/s^2)/N/s=1/(kg*s)? Eigenartig, ich hätte erstmal m/s^2 vermutet.

In meinem Messungen gab es bei 1-1,2 kHz meist Oszillationen in den FRFs 
sowie eine schlechte Kohärenz, wahrscheinlich sind die Daten von 
schlechter Qualität. Das könnte zumindest die Abweichung zur 
Programm-IRF erklären, bei dieser FRF Messung traten nämlich keine 
Oszillationen auf.

Ich muss mich damit noch eingehender beschäftigen, besser spamme ich 
nicht das Forum zu ;)

: Bearbeitet durch User
von patalmqx (Gast)


Lesenswert?

Für die Nachwelt: Das oben gezeigte Phänomen kann bei nichtlinearen 
Systemen auftreten. Neben einem linearen System und möglichst guter 
Datenqualität kann man das je nachdem noch mit der 
Hilbert-Transformation behandeln (Anders Brandt, "Noise and Vibration 
Analysis" behandelt das z.B.).

Die Lösung scheint aber vor allem zu sein, dass man für die irf nur die 
Hälfte der Werte aus der IFFT des doppelseitigen Spektrums nehmen darf, 
um die IRF zu erhalten (wenn ich mich nicht irre). So komme ich mit dem 
Zeitvektor wieder genau auf meine Messdauer T=4s und erhalte eine IRF 
die auch zu einem kausalen System passt.

So, gute Tat getan.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.