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

FFT Ermittlung der Phase bei gegebener Frequenzauflösung

 

Johannes.2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2021, 19:01     Titel: FFT Ermittlung der Phase bei gegebener Frequenzauflösung
  Antworten mit Zitat      
Hallo, das ist mein erster Beitrag und ich hoffe alles verständlich erklären zu können.

Mein Problem ist das folgende:
Bei der Durchführung einer FFT und anschließender Bestimmung der Phasenlage ist mir aufgefallen, dass die Phase sich stark verändert, wenn die Frequenz der Schwingung nicht ein Vielfaches der Frequenzauflösung ist. (Quasi ein Leakage-Effekt wie bei der Amplitudenbestimmung)

Als Beispiel hier der folgende Code. Dabei erstelle ich zunächst ein Cosinus-Signal mit mir bekannter Phase, multipliziere das ganze mit einem han-Fenster und führe dann die FFT durch. Mir ist sowohl Amplitude, als auch Phasenlage am Ende wichtig.

Code:
%
fs = 50000;                  % Abtastfrequenz [Hz]
N = 500000;                   % Anzahl Samples im Trigger []
df = fs/N;                   % Frequenzauflösung
T = N/fs;                    % Länge Signal [s]
dt = T/N;                    % Zeitschritte [s]
f0 = 19.91;                 % Frequenz Motor [Hz]

time = dt:dt:T;              % Vektor für Zeit zum plotten
f = fs*(0:(N/2)-1)/N;        % Frequenzvektor erstellen

signal_1 = 15*cos(2*pi*time*f0+(55*pi/180));

%% FFT
w = hann(N);                           % Fenster Berechnung
FM = sum(w)/N;                         % Fenstermittelwert (zur Korrektur)
signal_1_windowed = signal_1(:).*w;    % Signal mit Fenster
s_1 = fft(signal_1_windowed)/N/FM;     % bereits genormt und /N /FM
s_1_einseitig = s_1(1:N/2);            % einseitiges Spektrum

%% Amplitude
amp_1 = 2*abs(s_1_einseitig);

% Plot Spektrum
figure (2)
stem(f,amp_1)       % FFT Matlab Messung 1

axis([15 25 0 20])
set(gca,'FontSize',14);     % Schriftgröße
title('Frequenzspektrum');  % Titel
legend('Messung 1')    % Beschriftung Legende
xlabel('Frequenz in Hz');   % Beschriftung x-Achse
ylabel('Amplitude');        % Beschriftung x-Achse
grid;

%% Phase
ph_1 = angle(s_1_einseitig)*180/pi;  % Ermittlung Phase


for i=1:N/2             % Phasenwinkel von kleinen Amplituden = 0 setzen, besser zum Verständnis
    if amp_1(i) <0.1    %
       ph_1(i) = 0;     %
    end                 %
end                     %


% Plot Phase
figure (4);
stem(f,ph_1)           % Phase Matlab Messung 1

axis([15 25 -180 180])
set(gca,'FontSize',14);     % Schriftgröße
title('Phase');             % Titel
legend('Messung 1','Messung 2');     % Beschriftung Legende
xlabel('Frequenz in Hz');   % Beschriftung x-Achse
ylabel('Phase in Grad');    % Beschriftung x-Achse
grid on
 


Das wichtige ist nochmal kurz zusammengefasst:
- Frequenzauflösung = 0.1 Hz (gegeben)
- Sinus mit Frequenz von 19.91 Hz
- Phase sowie Amplitude werden korrekt gebraucht
- Für die Amplitude wird daher ein Fenster eingebaut
- Phase wird nicht korrekt dargestellt

Wie kann ich die Phase annähern? Was gibt es für Möglichkeiten?

Ich hoffe mir kann jemand weiterhelfen
Vielen Dank, Johannes


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 09.05.2021, 19:06     Titel:
  Antworten mit Zitat      
Die Begründung, warum das so ist, hast du doch schon geschrieben: Leakage-Effekt.

Die FFT beruht nun einmal darauf, dass von ganzen Vielfachen ausgegangen wird.

Für die Anwendung in der Praxis kannst du dein Signal durch mit einer Gewichtsfunktion dazu "zwingen" dies zu erfüllen. Also eine weitere Multiplikation mit einer Fensterfunktion.
Hier ein Beispiel mit recht guter Erklärung, ehr ich hier Romane schreibe:
https://www.nti-audio.com/de/servic.....ourier-transformation-fft
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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.