I have fft of a signal, I want to calculate phase of that signal?
26 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Sin(2*pi*f*t+phi)...i want phi from the fft of the given signal
0 Kommentare
Antworten (1)
Star Strider
am 16 Okt. 2015
3 Kommentare
Star Strider
am 16 Okt. 2015
Bearbeitet: Star Strider
am 16 Okt. 2015
The phase is by definition going to be the inverse sine of the value of your signal at t=0, or in a fft, the value (in radians or degrees) of the calculated phase compared to a similar signal with no phase. There appears to be no other way to calculate it.
Example:
t = linspace(0, 10*pi, 2500);
f = 5;
phi = pi/5;
s = [sin(2*pi*f*t); sin(2*pi*f*t + phi)]'; % Create Signals: s(:,1) phase - 0, s(:,2) phase = pi/5
Ts = mean(diff(t));
Fs = 1/Ts;
Fn = Fs/2;
fts = fft(s)/length(t); % Do FFT
Fv = linspace(0, 1, fix(length(t)/2)+1)*Fn;
Iv = 1:length(Fv);
[pk,ix] = max(abs(fts(Iv,:)));
phsmin = [min(angle(fts(ix(1),:))); max(angle(fts(ix(2),:)))];
phsminpi = phsmin*pi;
phsdif = diff(phsmin); % Calculate Phase Difference
out = sprintf('Phase difference = %.3f rad', phsdif)
figure(1)
subplot(2,1,1)
semilogy(Fv, abs(fts(Iv,:)))
grid
subplot(2,1,2)
plot(Fv, angle(fts(Iv,:)))
grid
BA Mustafa
am 25 Jun. 2022
t = 1 : 1000;
phaseshift= pi/5 ;
s1 = sin (2*pi*t/500);
s2 = sin (2*pi*t/500+ phaseshift);
Para1=s1;
Para2=s2;
time=t;
h1 = hilbert (Para1);
h2 = hilbert (Para2);
p1 = unwrap(angle(h1));
p2 = unwrap(angle(h2));
figure
plot (t,p1,t,p2);
title('evolution des phases des deux signaux','FontWeight','bold','FontSize',12)
xlabel('t (temps en secondes)','FontWeight','bold','FontSize',12);
ylabel('phase en radian','FontWeight','bold','FontSize',12);
legend('s1','s2');
grid on;
Depha_en_rad = mean (p2-p1)
Depha_en_degre = rad2deg(Depha_en_rad)
Siehe auch
Kategorien
Mehr zu Transforms finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!