By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,100 Members | 2,495 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,100 IT Pros & Developers. It's quick & easy.

Frequency spectrum with fft of a real valued array...?

P: n/a


Dear all,

I need to do a FFT on an array of 20k real values. Origin of the sampled
data is a sinus wave with light harmonics.
The goal is an frequency spectrum with the magnitudes of the first 50.
harmonics.

I addressed python like:

test_arr = src_data_dict[ channel ][0:19599]
target_data_dict[ channel ] = FFT.fft(test_arr,n=50,axis=-1)

This results in an array of complex values but with unexpected big
coefficients...
(much higher than the original signal magnitudes)
How do I get the absolute magnitudes of the harmonics, which are much
lower than the
resulting absolute values of the coefficients?

The result should be like this:

1.harmonic (50 Hz) 1,0
2.harmonic (100 Hz) 0,01
3.harmonic (100 Hz) 0,08
4.harmonic (100 Hz) 0,0035
etc.
at the moment I get a resulting array like:

CH1
(1729.80103418+0j)
(366.689810532+19.5196963754j)
(370.688444025+32.162562652j)
(372.122246668+46.9545880507j)
(379.273599053+59.0724599622j)
(369.889589421+75.9247281559j)
(381.070551892+99.07345873j)
(378.800462354+106.761629308j)
(375.014128346+131.34177586j)
(389.110601354+149.320740829j)
(389.23247472+158.909042086j)
(398.875237165+197.86980788j)
(397.927158223+196.858459101j)
(402.455325066+234.651276425j)
(411.599088579+256.32156894j)
(414.469935576+254.512014918j)
(417.198515262+291.400509132j)
(426.745545674+320.769421334j)
(433.987466212+321.929780157j)
(446.124386798+350.810581686j)
(455.876025379+383.099789898j)
(458.083277747+405.592129477j)
(470.908512117+433.929598454j)
(482.083855098+468.256188814j)

What does it mean to me? How do I get to the wanted frequenca spectrum???
...

btw The maximum magnitudes of the original data are app. 70 peak

Thanks in advance for your help!!!

Regards Holger
Jan 11 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Holger wrote:
What does it mean to me? How do I get to the wanted frequenca spectrum???
It's packed in the conventional FFT format. Here is a function in numpy (the
successor to Numeric, which I assume that you are using) that generates the
corresponding frequencies in the same packed format:

In [324]: import numpy

In [325]: numpy.fft.fftfreq?
Type: function
Base Class: <type 'function'>
Namespace: Interactive
File:
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/numpy-1.0.2.dev3507-py2.5-macosx-10.4-i386.egg/numpy/fft/helper.py
Definition: numpy.fft.fftfreq(n, d=1.0)
Docstring:
fftfreq(n, d=1.0) -f

DFT sample frequencies

The returned float array contains the frequency bins in
cycles/unit (with zero at the start) given a window length n and a
sample spacing d:

f = [0,1,...,n/2-1,-n/2,...,-1]/(d*n) if n is even
f = [0,1,...,(n-1)/2,-(n-1)/2,...,-1]/(d*n) if n is odd
--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco

Jan 11 '07 #2

P: n/a
Hello Robert!

Thank you for your tips. They were very useful.

Bye Holger
Am 11.01.2007, 19:08 Uhr, schrieb Robert Kern <ro*********@gmail.com>:
Holger wrote:
>What does it mean to me? How do I get to the wanted frequenca
spectrum???

It's packed in the conventional FFT format. Here is a function in numpy
(the
successor to Numeric, which I assume that you are using) that generates
the
corresponding frequencies in the same packed format:

In [324]: import numpy

In [325]: numpy.fft.fftfreq?
Type: function
Base Class: <type 'function'>
Namespace: Interactive
File:
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/numpy-1.0.2.dev3507-py2.5-macosx-10.4-i386.egg/numpy/fft/helper.py
Definition: numpy.fft.fftfreq(n, d=1.0)
Docstring:
fftfreq(n, d=1.0) -f

DFT sample frequencies

The returned float array contains the frequency bins in
cycles/unit (with zero at the start) given a window length n and a
sample spacing d:

f = [0,1,...,n/2-1,-n/2,...,-1]/(d*n) if n is even
f = [0,1,...,(n-1)/2,-(n-1)/2,...,-1]/(d*n) if n is odd

Jan 22 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.