TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

スマホでのFFTの処理時間

FFTでスペクトル推定を行う際、フレーム長を長くするほどより周波数領域で精度を上げることができる。

しかし、フレーム長を長くすると実行時間も長くなる。

スマホでリアルタイムで解析を行うような場合、実行時間について考慮が必要になる。

ここでは、フレーム長を長くした場合、実行時間がどのように変わるかを検証した。

測定条件は以下の通り。

  • FFTの実装は大浦版FFTJavaに移植したものを使用
  • 1000回繰り返し実行したときの処理時間を測定
  • 5回測定して平均をとる
  • スマホの機種は003SH(CPUはMSM8255 1GHz)

測定結果

フレーム長 時間(ms)
4096 3,216
8192 6,771
16384 14,263
32768 30,336

グラフにすると以下のようになる。

f:id:TadaoYamaoka:20170109103457p:plain

横軸のフレーム長は2のn乗となっているため、対数スケールになっている。

線形スケールにすると以下のようになる。

f:id:TadaoYamaoka:20170109103945p:plain

ほぼ線形に増えているように見える。
なお、理論上の計算量は、O(N logN)である。


スマホでリアルタイムに解析を行う場合のフレーム長について考えてみる。

秒間60回解析を行うとすると、最低でも1000/60≒16.6(ms)以内に計算を行う必要がある。

上記の計測結果から、フレーム長として使用できるは16384までとなる。
FFT以外の処理も行うことを考慮すると、その下の8192が上限ではないかと思う。

秒間の解析回数を減らせばフレーム長は長くできるが、リアルタイム性と解析精度のバランスをとってフレーム長を決める必要がある。電池の消耗についても考慮すべきである。

今回はあえて古い機種で測定したが、最新の機種では当然より速く計算できる。
以前に測定した結果では、新しい機種では実行時間は1/3程になる。