Java Nexus 6P上硬件传感器的Android采样率变化
我正在开发一个Android应用程序,用于一项研究,我正在读取一些传感器数据,如加速度计、陀螺仪、气压计等。 因此,我有4台Nexus 6P设备,所有设备都是最新安装的,除了预装的标准应用程序外,没有安装其他应用程序。 因此,现在出现的问题是,其中一部手机一直落后,因此,例如,我将加速度计记录在105 Hz下半小时(因此加速度计的最大可能速率为400 Hz),以确保至少获得100 Hz下预期的样本量,结果如下: 在100Hz->180000个样本下进行半小时的采样 在105Hz->189000个样品下搅拌半小时 (这只是加速计的一个示例,但每个设备上的其他传感器都是一样的。因此,设备1、3、4对其他传感器的效果大致相同,而设备2对所有其他传感器的效果也相同)Java Nexus 6P上硬件传感器的Android采样率变化,java,android,android-sensors,sampling,nexus-6p,Java,Android,Android Sensors,Sampling,Nexus 6p,我正在开发一个Android应用程序,用于一项研究,我正在读取一些传感器数据,如加速度计、陀螺仪、气压计等。 因此,我有4台Nexus 6P设备,所有设备都是最新安装的,除了预装的标准应用程序外,没有安装其他应用程序。 因此,现在出现的问题是,其中一部手机一直落后,因此,例如,我将加速度计记录在105 Hz下半小时(因此加速度计的最大可能速率为400 Hz),以确保至少获得100 Hz下预期的样本量,结果如下: 在100Hz->180000个样本下进行半小时的采样 在105Hz->189000个
- 装置1:180000个样本
- 设备2:177273个样本我经常使用Android传感器,我可以告诉你,硬件质量参差不齐。如果我需要结果在电话中保持一致,我通常会使用过滤器:
做了以上所有的工作,我得到了相当好的结果,但由于硬件的不同,它永远不会完美 祝你好运// Filter to remove readings that come too often if (TS < LAST_TS_ACC + 100) { //Log.d(TAG, "onSensorChanged: skipping"); return; }
// Filter to remove readings that come too often if (TS < LAST_TS_ACC + 100) { //Log.d(TAG, "onSensorChanged: skipping"); return; }
accelBuffer = new StringBuilder(); accelBuffer.append(LAST_TS_ACC + "," + event.values[0] + "," + event.values[1] + "," + event.values[2] + "\n"); if((accelBuffer.length() > 500000) && (writingAccelToFile == false) ){ writingAccelToFile = true; AccelFile = new File(path2 +"/Acc/" + LAST_TS_ACC +"_Service.txt"); Log.d(TAG, "onSensorChanged: accelfile created at : " + AccelFile.getPath()); File parent = AccelFile.getParentFile(); if(!parent.exists() && !parent.mkdirs()){ throw new IllegalStateException("Couldn't create directory: " + parent); } //Try threading to take of UI thread new Thread(new Runnable() { @Override public void run() { //Log.d(TAG, "onSensorChanged: in accelbuffer"); // Log.d(TAG, "run: in runnable"); //writeToStream(accelBuffer); writeStringBuilderToFile(AccelFile, accelBuffer); accelBuffer.setLength(0); writingAccelToFile = false; } }).start(); }