我有30分钟的EEG数据,我使用200个样本长度的滑动窗口循环,每个窗口进行小波变换,提取特征并对其进行分类。这导致大约3500个窗口,其中每个窗口循环200个值。
因此循环看起来像这样:
while(shift< 3500 * 100){
// GET 200 SAMPLES
for (int i=starter; i<wl+shift; i++) {
v = dis.readFloat();
data[i] = v;
}
// SHIFT FOR NEXT LOOP
shift = shift + 100;
starter = shift;
// EXTRACT FEATURES
Transform t = new Transform( new FastWaveletTransform( new Daub04( ) ) );
double[ ] arrTime = data;
final double[ ] arrHilb = t.forward( arrTime ); // 1-D FWT Haar forward
// coeff1
for (int j = 0; j < length/2; j++) {
coeff1[j] = arrHilb[length-1-j];
sum1 += coeff1[j];
}
它处理约20分钟然后失败(跳过帧)。在Matlab中,使用数组操作需要几秒钟,但我无法在Android上看到任何其他方法来执行此操作。
这个想法只是将EEG数据分成200个样本块,重叠率为50%,并为每个样本提取特征。
更新已解决:
问题在于数据数组是从read.Float和循环构建的。我最终将整个数据集读入数组数据,然后通过使用System.arraycopy(data,starter,data1,0,data1.length)移动数据200个样本的另一个循环;每次迭代都有starter = starter + 200。这是在几秒钟内完成的,所以不用担心:)
谢谢!