我正在尝试控制安卓手机的振动频率。
我了解 android API 提供了一个接口来通过 ON/OFF 模式控制振动:
公共无效振动(long []模式,int重复)
以给定的模式振动。
传入一个整数数组,它们是打开或关闭振动器的持续时间(以毫秒为单位)。第一个值表示打开振动器之前要等待的毫秒数。下一个值表示在关闭振动器之前保持振动器开启的毫秒数。随后的值在持续时间(以毫秒为单位)之间交替,以关闭振动器或打开振动器。
要使模式重复,请将索引传递到开始重复的模式数组中,或 -1 以禁用重复。
因此,我想,要得到一个振动频率 N,也许我可以在一秒钟内重复打开和关闭振动器 N 次。
例如,为了获得 20Hz 的 10 秒振动,我将模式分配如下:
Vibrator vib = (Vibrator)this.context.getSystemService(Context.VIBRATOR_SERVICE);
...
long[] arrPattern = new long[20*10];
for (int i =0; i<arrPattern.length; ++i) // each duty circle is 50 ms
{
arrPattern[i] = (i%2==0)?1:49;
}
vib.vibrate(pattern, -1);
基于这个幼稚的想法,我进行了几次实验,其中我将振动频率 N 设置为不同的值,并在手机上安装了一个加速度计,并在振动过程中捕获加速度数据。
通过 DFT 将这些时域加速度数据转换为频域后,我注意到无论我设置哪个振动频率,在 10Hz 和 175Hz 附近总是有很大的功率。
我想知道为什么它不起作用?