Harmonic distortion of a input signal

Oscar Benjamin oscar.j.benjamin at gmail.com
Sun May 19 18:49:52 EDT 2013


On 19 May 2013 23:25,  <killybeard91 at gmail.com> wrote:
> How can i at least find a peek in FFT spectrum of a square wave ?
> From there i could easily build formula. Sorry for bothering but i am new to Python.

Are you the same person who posted the original question?

You probably want to use numpy for this. I'm not sure if I understand
your question but here goes:

First import numpy (you may need to install this first):

>>> import numpy as np

Create a square wave signal:

>>> x = np.zeros(50)
>>> x[:25] = -1
>>> x[25:] = +1
>>> x
array([-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

Compute the magnitude spectrum:

>>> spect = abs(np.fft.fft(x)[:25])
>>> spect
array([  0.        ,  31.85194222,   0.        ,  10.67342282,
         0.        ,   6.47213595,   0.        ,   4.69726931,
         0.        ,   3.73254943,   0.        ,   3.13762901,
         0.        ,   2.7436023 ,   0.        ,   2.47213595,
         0.        ,   2.28230601,   0.        ,   2.15105461,
         0.        ,   2.06487174,   0.        ,   2.01589594,   0.        ])

Find the index of the maximum element:

>>> np.argmax(spect)
1

So the peak is the lowest non-zero frequency component of the DFT. In
Hz this corresponds to a frequency of 1/T where T is the duration of
the signal.


Oscar



More information about the Python-list mailing list