栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

完成SSVEP的刷新刺激相关的一些经历和代码

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

完成SSVEP的刷新刺激相关的一些经历和代码

        因为工作涉及到了这一个问题,在这一年里也做了很多的尝试,所以在此分享一下经验,以免后来人没有资料再过多的浪费时间。

        1.刺激刷新稳定性需要使用OpenGL或者Direct3D从显卡角度进行编写操作,所有定时器、线程等相关的代码,都无法满足稳定性为±2ms的刺激刷新操作(极低的频率刷新也许可以,但是时间上的稳定性再后来我就再也没有验证过。

        2.低于15Hz的刺激可以通过简单调用OpenGL的API进行操作。

        以下附Java以及C++的代码,均实现了15Hz以下的稳定性,但是再往上想要更高的稳定性时均失败。

Java(该方法是做一个活动时和游戏公司出来的大佬那边偶然讨论到的):

import processing.core.*;
import processing.data.*;
import processing.event.*;
import processing.opengl.*;

import java.util.HashMap;
import java.util.ArrayList;
import java.io.File;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;

public class sketch_220301a extends PApplet {

 public void setup()
{

  frameRate(30);
  ;
}
int i=0;
 public void draw() {
  background(162);
    noStroke();

  textSize(30);
  text("frameRate:"+ frameRate,20,40);
 
  rectMode(CENTER);
  rect(width/2, 100, 200, 200);
  rect(100, height/2, 200, 200);
  rect(width-100, height/2, 200, 200);
  rect(width/2, height-100, 200, 200);
  if (i!=0)
  {
    fill(255, 255, 255);
    i=0;
  } else
  {
    fill(0, 0, 0);
    i=1;
  }

}

 public void keyPressed()
{
switch(key) {
  case '+':
   frameRate(frameRate++);
    break;
      case '-':
   frameRate(frameRate--);
    break;
  default:
    break;
  }

}


  public void settings() { fullScreen(); }

  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "sketch_220301a" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}

其稳定性测试相关情况,在15Hz下是可以接受的,15Hz以上则掉帧严重:

        C++代码(此代码是从github上downLoad后经过了一些修改,因此我直接放上了该github地址):

        C++版本的刺激实现

        3.完成30Hz的刺激,目前除了Matlab之外我成功了两种工具,一种是Python的PsychoPy,另一种是Unity3D.这两款是我已知的可以完成30Hz稳定性测试的项目,并且已经完全实现。

        (等我有时间了一定把代码放上来,现在还要提炼打包就比较麻烦)。

        关于30Hz的稳定性实现并且拓展性强还是要用C++调用OpenGL的显卡语言进行操作。关于这方面我一直没时间研究(本来的方向也并非计算机图形学)。

        欢迎一些同样有这问题,或者已经解决了这问题的工程师和我踊跃探讨这方面的实现方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号