1 year ago

#366112

test-img

Greyfrog

Android Kotlin Real-Time FFT and plot

I am trying to apply Real-time FFT on a sensor data which is connected over the bluetooth BLE.

There is a sdk which allows you to receive the data from the sensor in the Android using handler. I am using ViewModel to send the sensor data in various parts of the app to plot the data using GraphView and perform FFT.

I am using JTransform to perform the FFT but before I was using JDSP to perform STFT.

Below is the code use to perform FFT on a unfiltered raw sensor data using JTransform

    var t = 0
    var fs  = 512
    var sampleSize = 2*fs
    val windowSize = sampleSize/2
    
    private fun getFFT(sample:DoubleArray): Array<DataPoint>{
        val fft = DoubleFFT_1D(sampleSize.toLong())
        fft.realForward(sample)
        return analysed(sample)
    } 
    
    private fun analysed(sample:DoubleArray): Array<DataPoint> {
        val series:Array<DataPoint> =  Array(sample.size) { i -> DataPoint(0.0,0.0) }
        sample.forEachIndexed { i, y -> 
            val x = i.toDouble()
            series[i] = DataPoint(x, y)
        }
        return series
    }

    
    sensorViewModel.getRaw().observe(this){
        if(t<sampleSize-1){
            sample[t] = it.toDouble()
            t++
        }else{
            sample = sample.takeLast(windowSize).toDoubleArray().plus(DoubleArray(2*windowSize) { i -> 0.0 })
            t = windowSize

            // Plot FFT
            asyncTask.execute(onPreExecute = {
            }, doInBackground = {
                getFFT(sample)
            }, onPostExecute = {
                fftseries.resetData(it)
            })
        }
    }

Although my code runs without crash but I can see so many problems with the app.

  1. Using a sliding window to create "sample" to perform FFT on the created sample feels really inefficient. Can anyone please suggest how can I do write it better with the better control of window size.

  2. How to make this FFT plot fast?

android

kotlin

fft

android-graphview

0 Answers

Your Answer

Accepted video resources