Computing frequency from phase angle. How to remove the frequency spikes?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jan Kubski
el 22 de Mayo de 2018
Editada: Jan Kubski
el 23 de Mayo de 2018
I want to calculate frequency of a complex signal from its angle deviation. The problem with this is that I am getting large values of difference. See images attached.
How can I remove the large spikes, what method I can use to smooth the data at those samples. Note: The signal or angle deviation can actually be random or varying with time.


ps - the x-axis labeled as time in seconds, which is actually number of time steps or samples.
0 comentarios
Respuesta aceptada
David Goodmanson
el 23 de Mayo de 2018
Hi Jan,
The angle function is restricted to -pi < angle < pi, so in your first plot the angle has a series of sudden jumps from +pi down to -pi, which is phase wrap. You can use the unwrap function to make a continuous function, and then differentiate that. It looks like your frequency is around .04, so:
f0 = .04
t = 0:.01:120;
y = exp(2*pi*i*f0*t);
a = angle(y);
a1 = unwrap(a);
figure(1)
plot(t,a1)
ylabel('angle')
f = (diff(a1)./diff(t))/(2*pi);
f1 = min(f)
f2 = max(f)
There is no point in plotting f since for this waveform it equals .04 for all t. Absent the jumps, your f appears to be up around 50, so it appears that something is not quite right there.
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Digital Filter Analysis en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!