[SciPy-User] frequency components of a signal buried in a noisy time domain signal
Fri Feb 26 15:32:01 CST 2010
Looking at a periodic signal buried in noise is a well-studied
problem, with many techniques for attacking it. You really need to be
a little more specific about what you want to do. For example, is your
input signal really a sinusoid, or does it have harmonic content? Are
you trying to detect a weak periodic signal or are you trying to
extract the features of a strong periodic signal? Is your signal
exactly periodic, does it have some (deterministic or random) wander,
or are you looking for the power spectrum of a broadband signal?
If your input data are non-uniformly sampled, everything becomes more
difficult (and computationally expensive), but there are solutions
(e.g. the Lomb-Scargle periodogram).
On 26 February 2010 16:24, Nils Wagner <firstname.lastname@example.org> wrote:
> On Fri, 26 Feb 2010 15:56:29 -0500
> Ivo Maljevic <email@example.com> wrote:
>> Yes, FFT can be used to visualize the frequency content
>>of a signal buried
>> in the noise, especially if it is is narrowband,
>> even though more advanced spectral analysis is required
> Thank you very much for your reply.
> Are you aware of free software for advanced applications ?
> What could be done in case of broadband noise ?
>> I cannot help you with non-uniformly spaced samples
>>(some sort of
>> interpolation comes to mind), but next power of 2 should
>>be trivial. Without
>> checking for the argument type, you can implement the
>>function like this:
>> def nextpow2(n):
>> m_f = np.log2(n)
>> m_i = np.ceil(m_f)
>> return 2**m_i
>> Hope it helps,
>> On 26 February 2010 14:05, Nils Wagner
>>> 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 = 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
>>> SciPy-User mailing list
> SciPy-User mailing list
More information about the SciPy-User