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

Berechnung der Phase einer einfachen Cosinus-Schwingung

 

Mat
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 17.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2017, 22:14     Titel: Berechnung der Phase einer einfachen Cosinus-Schwingung
  Antworten mit Zitat      
Ein herzliches Hallo zusammen,

Vielleicht könnt ihr mir mit meinem Problem zur Phasenbestimmung eines Signals weiterhelfen.

Es soll der Phasenwinkel für eine Cosinusschwingung einer beliebigen Frequenz ermittelt und dargestellt werden. Diese Cosinusschwingung wird im Vektor sig gespeichert.

Durch die vorgegebene Abtastfrequenz/Samplingfrequenz f_sample und die Anzahl an Samplen N wird die Frequenzauflösung df = f_sample/N vorgegeben –> Es ergeben sich N „Frequenzstufen“.
Für jede Frequenzstufe bis zur halben Abtastfrequenz/Samplingfrequenz werden Cosinusschwingungen mit der Phase = 0 erzeugt und in der Matrix xs gespeichert, bzw. zu einem Summensignal aufsummiert und im Vektor x gespeichert. Zu diesem Vektor wird anschließend auch die Cosinusschwingung addiert, für die die Phase ermittelt werden soll.
Diese Schritte wurde durchgeführt, da mit aufgefallen ist, dass wenn ich den Phasenwinkel alleine vom Testsignal bestimmen möchte, bei allen anderen durch die Frequenzauflösung vorgegebenen Signale ebenfalls ein Random-Phasenwinkel dargestellt wird.

Die Berechnung des Phasenwinkels für das Testsignal funktioniert solange gut, wie das Testsignal eine Frequenz aufweist, die exakt ein Vielfaches der Frequenzauflösung df aufweist.
Wird für die Cosinusfunktion eine Frequenz gewählt, die zwischen den Frequenzstufen liegt, wird für alle Frequenzstufen eine Phase mit einem Wert ungleich 0 angezeigt.
Warum ist das so?
Wenn mein Testsignal jetzt aus Cosinusschwingungen verschiedener Freqeunz besteht, kann ich dadurch keine exakte Aussage zur Phase jeder einzelnen Frequenz machen?


Vielen Dank schonmal!



Code:
%clear all; close all; clc;
% ________________________________________________________________________
%
% Erzeugen eines Testsignals mit definierter Frequenz, Ampliude, Phase
% ________________________________________________________________________

N = 10;
f_sample = 10;
ft = 2.5;
A = 1;
phase = 0;
% phase = pi/4;

for t = 0 : N
sig(t+1,1) = 1*cos(2*pi*ft/f_sample*t+phase);
end
sig(t+1,:) = [];
% sig = 0;

figure(1)
plot(sig)

% ________________________________________________________________________
%
% Erzeugen einer Signalmatrix mit Cosinussignalen aller Frequenzstütz-
% stellen (im Abstand df) mit Phase=0 um Werte>0 in der Darstellung zu
% vermeiden.
% ________________________________________________________________________

% Auflösung des dargestellten Frequenzbandes
df = f_sample/N;

% Erzeugen der Cosinussignalmatrix
As   = 0.0001;
f0   = 0*df;
fend = (N/2-2)*df;
xs = zeros(N+1,fend/df+1);
for f = f0 : df : fend
    f
    for t = 0 : N
        xs(t+1,f/df+1) = As*cos(2*pi*f/f_sample*t);
    end
end

x = sum(xs,2);
x(t+1,:) = [];
x = x+sig;

figure(2)
plot(x)
% ________________________________________________________________________

f_nyquist = f_sample/2;      % Nyquistfrequenz
df = f_sample/N;             % Frequenzauflösung

% FFT
y = fft(x);

% Bestimmen des Phasenwinkels
phs = atan2(imag(y),real(y));
phsu = unwrap(angle(y));

phs = phs/pi;   % Phasenwinkel in vielfachen von pi ausgeben
phsu = phsu/pi;

% ________________________________________________________________________
%
% Plot
% ________________________________________________________________________
% Frequenzvektoren (werden bei der graphischen Darstellung benötigt):
x_fn = 0 : df : f_nyquist-df;
phs = phs(1:N/2);
phsu = phsu(1:N/2);

% Phasenspektrum unwrapped
figure(4)
stem(x_fn,phsu,'r')
ylabel('Phase / \pi')
xlabel(['Frequenz in Hz','      Auflösung: ',num2str(df),' Hz'])
grid on
set(gca,'GridLineStyle','-')
set(gca,'XColor',[0.6,0.6,0.6],'YColor',[0.6,0.6,0.6])
title('Phase unwrapped')

% Phasenspektrum
figure(5)
stem(x_fn,phs,'r')
ylabel('Phase / \pi')
xlabel(['Frequenz in Hz','      Auflösung: ',num2str(df),' Hz'])
grid on
set(gca,'GridLineStyle','-')
set(gca,'XColor',[0.6,0.6,0.6],'YColor',[0.6,0.6,0.6])
title('Phase')
Private Nachricht senden Benutzer-Profile anzeigen


Mat
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 17.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2017, 21:25     Titel: Ergänzung
  Antworten mit Zitat      
Hallo nochmal,

ich habe nochmal die Plots kopiert.
Auf dem ersten Plot bildet eine Cosinusschwingung bei 2 Hz die untersuchte Testfunktion. (Das bei 4 Hz ein Ausreißer ist kann ich mir nicht erklären, da es aber am Rand des untersuchten Frequenzbereichs ist, ist dieser Ausreißer für mich nicht von Interesse).
Der zweite Plot wurde für eine Testfunktion mit 2 Hz und einer Phase von pi/4 erzeugt, welche im Plot auch deutlich dargestellt wird.
Der dritte Plot ist dann für eine Cosinusschwingung mit 2,5 Hz und einer Phase von 0° erzeugt worden. Hier verstehe ich die Ausgabe nicht.

Vielleicht kann mit jemand von euch helfen? Irgendwer?

Cosinusschingung bei 2,5 Hz (Phase = 0).JPG
 Beschreibung:

Download
 Dateiname:  Cosinusschingung bei 2,5 Hz (Phase = 0).JPG
 Dateigröße:  31.03 KB
 Heruntergeladen:  399 mal
Cosinusschingung bei 2,0 Hz (Phase = 0.25 pi).JPG
 Beschreibung:

Download
 Dateiname:  Cosinusschingung bei 2,0 Hz (Phase = 0.25 pi).JPG
 Dateigröße:  29.48 KB
 Heruntergeladen:  469 mal
Cosinusschingung bei 2,0 Hz (Phase = 0).JPG
 Beschreibung:

Download
 Dateiname:  Cosinusschingung bei 2,0 Hz (Phase = 0).JPG
 Dateigröße:  29 KB
 Heruntergeladen:  386 mal
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.