I finally got to spend some time on this, if anyone is still interested. The
results are promising. I had to brush up on my DSP skills. The core of my
proof of concept is this:

  /**
  * A recursive digital band-pass filter with sampling frequency of 12 Hz,
center 3.6 Hz, bandwidth 3 Hz,
  * low cut-off 2.1 Hz, high cut-off 5.1 Hz.
  *
  * Source: http://www.dspguide.com/ch19/3.htm
  */
 class Filter // inner class
 extends TimerTask {
  private float a0 = (float) 0.535144118;
  private float a1 = (float) -0.132788237;
  private float a2 = (float) -0.402355882;
  private float b1 = (float) -0.154508496;
  private float b2 = (float) -0.0625;
  private float x_1, x_2, y_1, y_2; // x_1 means x[n-1], etc.
  @Override
  public void run() {
   float x_0 = currentInput; // from the enclosing Activity
   float y_0 = a0 * x_0 + a1 * x_1 + a2 * x_2
     + b1 * y_1 + b2 * y_2;
   currentOutput = y_0; // to the enclosing Activity
   x_2 = x_1;
   x_1 = x_0;
   y_2 = y_1;
   y_1 = y_0;
  }
 }

I ran this on a java.util.Timer at 83 ms period, using the highest
accelerometer sampling of about 10 ms on a Droid. I only used the X axis for
the proof of concept. For testing, I displayed the RMS of the currentFilter
output in a horizontal progress bar. The bar remains at zero when the device
is stationary, < 10% at most movements, including when the accelerometer X
is +9, when the device is gently tapped on the X axis, or when the vibrator
kicks in by changing the ringer volume. It goes to 100% when the device is
shaken at a good 2 Hz or so along the X axis by hand. Checking the cut-off
frequency (aside from taps and vibrator) is not really possibly manually. I
did run into some forced closes, probably because in the proof of concept I
didn't handle the timer in the Activity lifecycle correctly. The main
problem is the battery use is very high, but this may be because of some
other processing in my code in the sensor event listener.

Let me know if you guys are still interested in detecting shake and if you
have any questions. I'll try to post the the complete demo code when I get
some time.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to