[SciPy-User] frequency components of a signal buried in a noisy time domain signal

Nils Wagner nwagner@iam.uni-stuttgart...
Fri Feb 26 13:05:08 CST 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


Matlab has a function


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))
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)
title('Single-sided amplitude spectrum of y(t)')
xlabel('Frequency (Hz)')

What can be done in case of nonequispaced data ?


Thanks in advance


More information about the SciPy-User mailing list