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

Problem mit IFFT aus PSD

 

tobiassc
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 30.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2013, 13:26     Titel: Problem mit IFFT aus PSD
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kontinuierliches PSD als Vorlage erhalten:
Konstantes Beschleunigungsspektrum 10g von 10Hz bis 30 Hz

Jetzt möchte ich gerne prüfen, wie ein daraus erzeugtes Zeitsignal aussieht. Dafür habe ich das PSD mit konstanten Frequenzintervallen diskretisiert und durch ein IFFT gejagt. Was mir dabei Probleme bereitet, ist, dass sich insbesondere die Amplituden ändern, je nachdem in wie viele Punkte ich das kontinuierliche PSD diskretisiere. Meine Vermutung ist, dass ich auch die Energie dadurch ändere. Allerdings weiß ich nicht so recht, wie ich das skalieren bzw. normieren müsste.

Habt Ihr vielleicht einen Rat für mich?
Als Info: Für diskrete PSDs mit singulären Punkten klappt der Algorithmus problemlos.


Hier wäre ein Beispiel-Code:
Code:

function PSD_Program()

% Parameter
FMax   = 50;  % Maximale Frequenz für Diskretisierung
NPts   = 200; % Anzahl diskreter Punkte

freq   = 1:FMax/(NPts):FMax;
acc    = freq; % Dummy
amp    = freq; % Dummy

% Erstelle Spektrum Beschleunigung vs. Frequenz
for ind=1:1:length(freq)
       f = freq(ind);
       acc(ind) = AccConst(10*9.81,10,30,f);
       amp(ind) = acc(ind) / (2*pi*f)^2;
end
% plotyy(freq,acc,freq,amp);

% Berechne Phasenspektrum für IFFT & IFFT
% - Phase 0: Nur reelle Schwingungen, keine Dämpfung
Phase = rand(size(amp))*2.*pi*0;
Spect = amp .* exp(i*Phase);
time = (0 : length(freq)-1 ) / FMax;
signal = real(ifft(Spect))*length(freq);

A1=max(amp);
A2=max(signal);
sprintf('AMP Acc: %10.2f - AMP Sig: %10.2f - FAK: %10.2f',A1,A2,A2/A1)

show=1;
if show==1
    subplot(3,1,1); plot(freq, acc); xlabel('Input Spektrum [Hz]');
    subplot(3,1,2); plot(freq, amp); xlabel('Input Amplituden [m]');
    subplot(3,1,3); plot(time, signal); xlabel('Zeitsignal x(t)');
end

% Gleichverteilt: Amplitude, Min, Max, Frequenz, DeltaFreq
function a = AccConst(A,min,max,f)
    a = 0;
    if f>=min && f<=max
        a = A;
    end
end

end
 
Private Nachricht senden Benutzer-Profile anzeigen


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.