# [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
> applications.

Are you aware of free software for advanced applications ?
What could be done in case of broadband noise ?

Nils

>
>(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
>>