0
votes

I am trying to do FFT and extract high frequency features on smart phones. It turns out too slow to do a full FFT on 44100HZ sampled data on smart phones, but downsampling it will kill high frequency information because of Nyquist Theorem. Is there a way to speed up the FFT while retaining the higher frequencies?

1
An FFT in native ARM code (using the NDK on Android) should easily be able to keep up with a 44.1kHz sample rate on most current smartphones, using only a fraction of the CPU.hotpaw2
What segment size are you using? Do you use overlap-add for the filter implementation? For shorter high-pass filters, you could also implement the convolution directly.Lutz Lehmann
Even in pure Java, you should be able to keep up, unless your windows are HUGE.Bjorn Roche
If you are looking to filter, avoid the FFT altogether and do time-domain filtering.Bjorn Roche

1 Answers

0
votes

It is not clear if you want to use the FFT information or if it is just a way to implement some filter.

For the first case you can subsample the data, i.e., run a highpass filter and then compress (downsample) the sequence. Yes, there will be aliasing, but you can still map particular frequencies from the FFT back to the original higher frequencies.

If it is filtering, the filter should be reasonable long before you get any benefit from applying transform based filtering. Also, if you do this make sure you read up on overlap-add and overlap-save filtering and do not go with the all to common "let's take the FFT, multipliy with an 'ideal' response and then an IFFT". This will in general not give the expected result (unless you expect a transfer function which is time varying and different from the 'ideal').