DSPRelated.com
Forums

FFT of ADC-captured values on ARM µC

Started by enforcer June 3, 2008
Hello,

i'm a student and very new to the topic of signal processing.
Currently i'm working with a networking/microcontroller board which is
equipped with an ARM9-CPU @ 200MHz.

The target is to use the integrated ADC (1Mhz sampling rate) to capture
samples from an extern audio signal. Those should be processed by an FFT to
get a nice visualization of the "basefrequencies" (is that the right
word?).

An example:
                      XX
  XX                  XX
  XX            XX    XX
  XX     XX     XX    XX
  XX     XX     XX    XX

  0     100Hz  1KHz  5KHz
  to     to     to    to
 100Hz  1KHz   5KHz  20KHz

After searching for a long time i found out that i need a FFT-Algorithm
which makes a "real to complex" transform. Real to complex, because it's
faster than complex to complex and my input data is only real (tha adc
sample-values).

Does anybody know a fast C-implementation of an "r2c" FFT (best would be
in-place)?


enforcer wrote:

> Hello, > > i'm a student and very new to the topic of signal processing. > Currently i'm working with a networking/microcontroller board which is > equipped with an ARM9-CPU @ 200MHz. > > The target is to use the integrated ADC (1Mhz sampling rate) to capture > samples from an extern audio signal. Those should be processed by an FFT to > get a nice visualization of the "basefrequencies" (is that the right > word?). > > An example: > XX > XX XX > XX XX XX > XX XX XX XX > XX XX XX XX > > 0 100Hz 1KHz 5KHz > to to to to > 100Hz 1KHz 5KHz 20KHz > > After searching for a long time i found out that i need a FFT-Algorithm > which makes a "real to complex" transform. Real to complex, because it's > faster than complex to complex and my input data is only real (tha adc > sample-values). > > Does anybody know a fast C-implementation of an "r2c" FFT (best would be > in-place)? > >
Have you tried http://www.google.com/search?q=fast%20fft%20%2Bc which hints that you may wish http://www.google.com/search?q=fast+fft+%2Bc+%22in+place%22+%22real+to+complex%22+site%3Awww.fftw.org ???? ;)
Richard Owlett wrote:
> enforcer wrote: > >> Hello, >> >> i'm a student and very new to the topic of signal processing. >> Currently i'm working with a networking/microcontroller board which is >> equipped with an ARM9-CPU @ 200MHz. >> >> The target is to use the integrated ADC (1Mhz sampling rate) to capture >> samples from an extern audio signal. Those should be processed by an >> FFT to >> get a nice visualization of the "basefrequencies" (is that the right >> word?). >> >> An example: >> XX >> XX XX >> XX XX XX >> XX XX XX XX >> XX XX XX XX >> >> 0 100Hz 1KHz 5KHz >> to to to to >> 100Hz 1KHz 5KHz 20KHz >> >> After searching for a long time i found out that i need a FFT-Algorithm >> which makes a "real to complex" transform. Real to complex, because it's >> faster than complex to complex and my input data is only real (tha adc >> sample-values). >> >> Does anybody know a fast C-implementation of an "r2c" FFT (best would be >> in-place)? >> >> > > Have you tried > > http://www.google.com/search?q=fast%20fft%20%2Bc > > which hints that you may wish > > http://www.google.com/search?q=fast+fft+%2Bc+%22in+place%22+%22real+to+complex%22+site%3Awww.fftw.org
and are you really sampling audio at 100 MHz? How many bits per sample? How long a signal can your available memory hold? Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
>>> The target is to use the integrated ADC (1Mhz sampling rate) to
capture
>>> samples from an extern audio signal.
>and are you really sampling audio at 100 MHz? How many bits per sample? >How long a signal can your available memory hold?
Looks like 1 MHz to me... still kinda high, but not nearly as bad as 100 MHz would be. ;) I was about to put in my vote for visiting fftw.org before Jerry beat me to it, btw. Mark
markt wrote:
>>>> The target is to use the integrated ADC (1Mhz sampling rate) to > capture >>>> samples from an extern audio signal. > > >> and are you really sampling audio at 100 MHz? How many bits per sample? >> How long a signal can your available memory hold? > > Looks like 1 MHz to me... still kinda high, but not nearly as bad as 100 > MHz would be. ;)
Oops!
> I was about to put in my vote for visiting fftw.org before Jerry beat me > to it, btw.
Credit Richard, not me. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
>Credit Richard, not me.
Gotcha. Mark
On Jun 3, 2:25 pm, "markt" <tak...@pericle.com> wrote:
> I was about to put in my vote for visiting fftw.org before Jerry beat me > to it, btw.
I assume fftw is highly optimized for desktop/server class CPU's with pipelined FPUs. But is fftw well optimized for integer arithmetic on a embedded CPU such as an ARM9?
On Jun 3, 6:40 pm, Ron N <ron.nichol...@gmail.com> wrote:
> On Jun 3, 2:25 pm, "markt" <tak...@pericle.com> wrote: > > > I was about to put in my vote for visiting fftw.org before Jerry beat me > > to it, btw. > > I assume fftw is highly optimized for desktop/server class > CPU's with pipelined FPUs. But is fftw well optimized for > integer arithmetic on a embedded CPU such as an ARM9?
As far as I know, FFTW is floating-point only, so I don't think it's really geared toward such an embedded application at all. Jason
First about the sample-rate:
The maximum supported SR is 1MHz - what I'm NOT going to use.
I think the system would be a little little little bit to slow for so much
data in so less time.
My goal is about 44KHz. As i read, this is needed to analyse a 0-20KHz
audio signal. And it sounds logical to me.
The samples have an size of 10 bit (int 0-1023). Maybe an "int-real to
float-complex FFT would be even more interesting :D I'm a dreamer...

Than about FFTW:
I already had contact with FFTW and KissFFT . Both seem to me very
integrated   (geared) and not for embedded use.... I think a port or
extraction of the code i need would be very difficult.

Any other suggestions?
enforcer wrote:
> First about the sample-rate: > The maximum supported SR is 1MHz - what I'm NOT going to use. > I think the system would be a little little little bit to slow for so much > data in so less time. > My goal is about 44KHz. As i read, this is needed to analyse a 0-20KHz > audio signal. And it sounds logical to me. > The samples have an size of 10 bit (int 0-1023). Maybe an "int-real to > float-complex FFT would be even more interesting :D I'm a dreamer... > > Than about FFTW: > I already had contact with FFTW and KissFFT . Both seem to me very > integrated (geared) and not for embedded use.... I think a port or > extraction of the code i need would be very difficult. > > Any other suggestions?
There may be a library of routines for your processor that includes the code you want, either free or for purchase. Have you looked? 44 KHz is at the edge of possible for sampling 20 KHz audio. You will make the design much easier if you go up to 48 KHz. (The 2.5x rule of thumb would call for 50 KHz.) Jerry -- Engineering is the art of making what you want from things you can get. &#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;