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

Nils Wagner nwagner@iam.uni-stuttgart...
Fri Feb 26 15:24:34 CST 2010


On Fri, 26 Feb 2010 15:56:29 -0500
  Ivo Maljevic <ivo.maljevic@gmail.com> wrote:
> Nils,
> 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 
>for advanced
> applications.

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 ?


Nils

> 
> 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,
> Ivo
> 
> On 26 February 2010 14:05, Nils Wagner 
><nwagner@iam.uni-stuttgart.de> wrote:
> 
>> 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
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>


More information about the SciPy-User mailing list