[SciPy-User] frequency components of a signal buried in a noisy time domain signal
Nils Wagner
nwagner at iam.uni-stuttgart.de
Fri Feb 26 14:05:08 EST 2010
Hi all,
A common use of Fourier transforms is to find the
frequency components of a signal buried in a noisy time
domain signal.
I found a Matlab template at
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/fft.shtml
Matlab has a function
nextpow2(L)
Is there a similar build-in function in numpy/scipy ?
I tried to convert the m-file into a pythonic form.
What is needed to obtain a similar figure of the
single-sided amplitude spectrum using
numpy/scipy/matplotlib ?
from numpy import sin, linspace, pi
from numpy.random import randn
from pylab import plot, show, title, xlabel, ylabel
from scipy.fft import fft
Fs = 1000. # Sampling frequency
T = 1./Fs # Sample time
L = 1000 # length of signal
t = arange(0,L)*T
x = 0.7*sin(2*pi*50*t)+sin(2*pi*120*t)
y = x + 2*randn(len(t))
plot(Fs*t[:50],y[:50])
title('Signal corrupted with zero-mean random noise')
xlabel('Time (milliseconds)')
#
#
#
#NFFT = 2^nextpow2(L); # Next power of 2 from length of y
Y = fft(y,NFFT)/L
f = Fs/2*linspace(0,1,NFFT/2+1)
plot(f,2*abs(Y[:NFFT/2+1]))
title('Single-sided amplitude spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
show()
What can be done in case of nonequispaced data ?
http://dx.doi.org/10.1137/0914081
Thanks in advance
Nils
More information about the SciPy-User
mailing list