📄 mainform.java
字号:
import com.ms.wfc.app.*;
import com.ms.wfc.core.*;
import com.ms.wfc.ui.*;
import com.ms.wfc.html.*;
import com.ms.wfc.io.*;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.io.*;
/**
* This class can take a variable number of parameters on the command
* line. Program execution begins with the main() method. The class
* constructor is not invoked unless an object of type 'Form1' is
* created in the main() method.
*/
public class mainform extends Form
{
boolean draw=false;
int trial=10,electrade=16,datapoint=1200;
int wintimelength=10,winfrqlength=5;
double eeg[][][];
double eegmean[][];
double eegstd[][];
double neeg[][][];
double ave[][];
double Sre[][][]=new double[1][1][1];
double Sim[][][]=new double[1][1][1];
double xianggan[];
double xiangguan[];
double C[];
public mainform()
{
// Required for Visual J++ Form Designer support
initForm();
this.comboBox1.setSelectedIndex(0);
this.comboBox2.setSelectedIndex(0);
/*
double re12=-49.39094605210731;
double im12=23.21608944704515;
double re11=-2998.422287813117;
double im11=5487.2851057336775;
double re22=-0.5815660533780922;
double im22=-0.05978839135106076;
double A12=re12*re12+im12*im12;
double A11=Math.sqrt(re11*re11+im11*im11);
double A22=Math.sqrt(re22*re22+im22*im22);
System.out.print("FUCK="+A12/(A11*A22)+"");
*/
// TODO: Add any constructor code after initForm call
}
/**
* Form1 overrides dispose so it can clean up the
* component list.
*/
public boolean IsDoubleChar(char C){
String S="0123456789.";
for(int i=0;i<S.length();i++)
if(C==S.charAt(i))return true;
return false;
}
public int DoubleNumInFile(String Filename){
try{
RandomAccessFile myfile=new RandomAccessFile(Filename,"r");
long filepointer=0;
long filelength=myfile.length();
String S="";
String buffer="";
int x=0;
while(filepointer<filelength){
S=myfile.readLine();
buffer="";
for(int i=0;i<S.length();i++){
if(this.IsDoubleChar(S.charAt(i))){
buffer+=S.valueOf(S.charAt(i));
}
else{
if(buffer.equals("")==false){
x+=1;
}
buffer="";
}
}
if(buffer.equals("")==false){
x+=1;
}
filepointer=myfile.getFilePointer();
}//while :reading file
myfile.close();
return x;
}catch(Exception e){
return 0;
}
}
public boolean ReadDoubleToEEG(String Filename){//成功为true,否则为false
try{
RandomAccessFile myfile=new RandomAccessFile(Filename,"r");
long filepointer=0;
long filelength=myfile.length();
String S="";
String buffer="";
int x=0;
while(filepointer<filelength){
S=myfile.readLine();
buffer="";
for(int i=0;i<S.length();i++){
if(this.IsDoubleChar(S.charAt(i))){
buffer+=S.valueOf(S.charAt(i));
}
else{
if(buffer.equals("")==false){
x+=1;
eeg[(x-1)%electrade+1][(x-1)/(electrade*datapoint)+1][(((x-1)%(electrade*datapoint))/electrade+1)]=Double.valueOf(buffer).doubleValue();
}
buffer="";
}
}
if(buffer.equals("")==false){
x+=1;
eeg[(x-1)%electrade+1][(x-1)/(electrade*datapoint)+1][(((x-1)%(electrade*datapoint))/electrade+1)]=Double.valueOf(buffer).doubleValue();
}
filepointer=myfile.getFilePointer();
}//while :reading file
myfile.close();
return true;
}catch(Exception e){
return false;
}
}
public void ComputEEGMEAN(){
double sum=0;
for(int i=1;i<=electrade;i++)
for(int j=1;j<=trial;j++){
for(int k=1;k<=datapoint;k++)
sum+=eeg[i][j][k];
eegmean[i][j]=sum/(double)datapoint;
sum=0;
}//for j;for i
}
public void ComputEEGSTD(){
double sum=0;
for(int i=1;i<=electrade;i++)
for(int j=1;j<=trial;j++){
for(int k=1;k<=datapoint;k++){
sum+=Math.pow(eegmean[i][j]-eeg[i][j][k],2);
}
eegstd[i][j]=Math.sqrt(sum/(double)datapoint);
sum=0;
}//for j;for i
}
public void ComputNEEG(){
for(int i=1;i<=electrade;i++)
for(int j=1;j<=trial;j++)
for(int k=1;k<=datapoint;k++){
neeg[i][j][k]=(eeg[i][j][k]-eegmean[i][j])/eegstd[i][j];
}
}
public void ComputMEANofNEEG(){
double sum=0;
for(int i=1;i<=electrade;i++)
for(int k=1;k<=datapoint;k++){
for(int j=1;j<=trial;j++){
sum+=neeg[i][j][k];
}
eegmean[i][k]=sum/(double)trial;
sum=0;
}
}
public void ComputSTDofNEEG(){
double sum=0;
for(int i=1;i<=electrade;i++)
for(int j=1;j<=datapoint;j++){
for(int k=1;k<=trial;k++)
sum+=Math.pow(eegmean[i][j]-neeg[i][k][j],2);
eegstd[i][j]=Math.sqrt(sum/(double)trial);
sum=0;
}
}
public void ComputNeegAve(){
double sum=0;
for(int i=1;i<=electrade;i++)
for(int j=1;j<=datapoint;j++){
for (int k=1;k<=trial;k++)
sum+=neeg[i][k][j];
ave[i][j]=sum/(double)trial;
//System.out.print("aveY["+i+"]["+j+"]="+ave[i][j]+"\n");
sum=0;
}
}
public double ComputR(double X[],double Y[],int length){
double sum1=0,sum2=0,sum3=0,avex=0,avey=0;
for(int i=1;i<=length;i++){
avex+=X[i];
}
avex/=length;
for(int i=1;i<=length;i++){
avey+=Y[i];
}
avey/=length;
for(int i=1;i<=length;i++)
sum1+=(X[i]-avex)*(Y[i]-avey);
for(int i=1;i<=length;i++)
sum2+=(X[i]-avex)*(X[i]-avex);
for(int i=1;i<=length;i++)
sum3+=(Y[i]-avey)*(Y[i]-avey);
return sum1/Math.sqrt(sum2*sum3);
}
public void dft(double X[]){
double midre=0,midim=0;
double re[]=new double[X.length],im[]=new double[X.length];
int N=X.length-1;
for(int i=1;i<=N;i++){
re[i]=0;im[i]=0;
for(int j=1;j<=N;j++){
midre=Math.cos(2*Math.PI*(i-1)*(j-1)/N);
midim=Math.sin(2*Math.PI*(i-1)*(j-1)/N);
re[i]+=X[j]*midre;
im[i]+=X[j]*midim;
}
}//for i=1:N
double sum=0;
for (int i=1;i<=N;i++)
sum+=Math.sqrt(re[i]*re[i]+im[i]*im[i]);
for(int i=1;i<=N;i++)
X[i]=Math.sqrt(re[i]*re[i]+im[i]*im[i])/sum;
}
public void dispose()
{
super.dispose();
components.dispose();
}
private void button1_click(Object source, Event e)
{
//int iii=0;
OpenFileDialog ofd = new OpenFileDialog();
ofd.setFilter("EEG数据文件(*.eeg)|*.eeg|所有文件(*.*)|*.*\n");
int OK = ofd.showDialog();
if (OK==DialogResult.OK) {
try{
trial=Integer.parseInt(this.edit2.getText());
try{
electrade=Integer.parseInt(this.edit1.getText());
try{
datapoint=Integer.parseInt(this.edit3.getText());
this.label5.setText(String.valueOf(trial*electrade*datapoint));
this.label7.setText("testing......\n");
this.label8.setForeColor(Color.BLACK);
this.label8.setText("格式检验......\n");
int doublenuminfile=this.DoubleNumInFile(ofd.getFileName());
this.label7.setText(String.valueOf(doublenuminfile));
if(doublenuminfile==trial*electrade*datapoint){//检验通过
this.label8.setForeColor(Color.BLACK);
this.label8.setText("检验通过!正在数据初始化,请稍候......");
eeg=new double[electrade+1][trial+1][datapoint+1];
this.ReadDoubleToEEG(ofd.getFileName());
this.label8.setText("数据初始化完成!正在进行数据规格化,请稍候......");
//经检验,初始化无误!:)
eegmean=new double[electrade+1][trial+1];//均值
this.ComputEEGMEAN();
eegstd=new double[electrade+1][trial+1];//偏移量
this.ComputEEGSTD();
neeg=new double[electrade+1][trial+1][datapoint+1];
this.ComputNEEG();
eegmean=new double[electrade+1][datapoint+1];
this.ComputMEANofNEEG();
eegstd=new double[electrade+1][datapoint+1];
this.ComputSTDofNEEG();
for(int i=1;i<=electrade;i++)
for(int k=1;k<=datapoint;k++)
for(int j=1;j<=trial;j++)
{
neeg[i][j][k]=(neeg[i][j][k]-eegmean[i][k])/eegstd[i][k];
//System.out.print("neeg["+i+"]["+j+"]"+k+"]="+neeg[i][j][k]+"\n");
}
this.label8.setText("数据规格化完成!正在进行数据的相关/相干运算,请稍候......\n");
/////////////////////normalizing finished!Begin to coherence!/////////////////////////////////////
ave=new double[electrade+1][datapoint+1];
this.ComputNeegAve();
draw=true;
this.panel3.invalidate();
int first=this.comboBox1.getSelectedIndex()+1;
//System.out.print("first="+first+"\n");
int second=this.comboBox2.getSelectedIndex()+1;
wintimelength=datapoint/12;
winfrqlength=12;
double sigelX[]=new double[datapoint+1];
double sigelY[]=new double[datapoint+1];
for(int i=1;i<=datapoint;i++){
sigelX[i]=ave[first][i];
//System.out.print("sigelX["+i+"]="+sigelX[i]+"\n");
sigelY[i]=ave[second][i];
//System.out.print("sigelY["+i+"]="+sigelY[i]+"\n");
}
xiangguan=new double[datapoint+1-wintimelength];
double midx[]=new double[wintimelength+1];
double midy[]=new double[wintimelength+1];
for(int i=1;i<xiangguan.length;i++){
for(int j=1;j<=wintimelength;j++){
midx[j]=sigelX[i+j];
midy[j]=sigelY[i+j];
}
xiangguan[i]=this.ComputR(midx,midy,wintimelength);
//System.out.print(xiangguan[i]+"\n");
}
draw=true;
this.panel1.invalidate();
this.dft(sigelX);
this.dft(sigelY);
midx=new double[winfrqlength+1];
midy=new double[winfrqlength+1];
xianggan=new double[73-winfrqlength+1];
for(int i=1;i<xianggan.length;i++){
for(int j=1;j<=winfrqlength;j++){
midx[j]=sigelX[i+j];
midy[j]=sigelY[i+j];
}
xianggan[i]=Math.abs(this.ComputR(midx,midy,winfrqlength));
//System.out.print(xiangguan[i]+"\n");
}
this.panel4.invalidate();
this.label8.setText("计算结束!请观察输出结果。\n");
}//检验通过
else{//检验未通过
this.label8.setForeColor(Color.RED);
this.label8.setText("文件格式检验未通过!请检查输入的数据格式是否正确!\n");
}
}catch(NumberFormatException ee){
this.label8.setForeColor(Color.RED);
this.label8.setText("错误:datapoint处输入的不是整数!请检查后重新输入!\n");
}
}catch(NumberFormatException ee){
this.label8.setForeColor(Color.RED);
this.label8.setText("错误:electrade处输入的不是整数!请检查后重新输入!\n");
}
}catch(NumberFormatException ee){
this.label8.setForeColor(Color.RED);
this.label8.setText("错误:trail处输入的不是整数!请检查后重新输入!\n");
}
}
}
private void panel1_paint(Object source, PaintEvent e)
{
int x0=20,y0=this.panel1.getHeight()-20;
e.graphics.setPen(new Pen(Color.DARKGRAY,PenStyle.DOT,1));
for(int i=0;i<=10;i++)
e.graphics.drawLine(x0,y0-(panel1.getHeight()-40)/10*i,panel1.getWidth()-20,y0-(panel1.getHeight()-40)/10*i);
for(int i=0;i<=100;i++)
e.graphics.drawLine(x0+(int)((double)(panel1.getWidth()-40)/100*i),y0,x0+(int)((double)(panel1.getWidth()-40)/100*i),20);
y0-=(this.panel1.getHeight()-40)/2;
e.graphics.setPen(new Pen(Color.WHITE,PenStyle.SOLID,2));
e.graphics.drawLine(x0,y0,this.panel1.getWidth()-20,y0);
e.graphics.setTextColor(Color.WHITE);
e.graphics.drawString("0",x0-10,y0);
e.graphics.drawString("1",x0-10,20);
e.graphics.drawString("-1",x0-10,panel1.getHeight()-30);
e.graphics.drawString("ms",panel1.getWidth()/2,panel1.getHeight()-15);
e.graphics.drawString("1200",panel1.getWidth()-40,panel1.getHeight()-20);
if(draw){
double step=(double)(this.panel1.getWidth()-40)/(datapoint-wintimelength);
e.graphics.setPen(new Pen(Color.RED,PenStyle.SOLID,2));
for(int i=1;i<datapoint-wintimelength;i++){
e.graphics.drawLine(x0+(int)(step*(i-1)),y0-(int)(xiangguan[i]*((this.panel1.getHeight()-40)/2)),x0+(int)(step*i),y0-(int)(xiangguan[i+1]*((this.panel1.getHeight()-40)/2)));
}
}
}
private void button2_click(Object source, Event e)
{
if(draw){
int first=this.comboBox1.getSelectedIndex()+1;
int second=this.comboBox2.getSelectedIndex()+1;
//this.wintimelength=Integer.parseInt(edit2.getText());
//this.winfrqlength=Integer.parseInt(edit1.getText());
double sigelX[]=new double[datapoint+1];
double sigelY[]=new double[datapoint+1];
for(int i=1;i<=datapoint;i++){
sigelX[i]=ave[first][i];
//System.out.print("sigelX["+i+"]="+sigelX[i]+"\n");
sigelY[i]=ave[second][i];
//System.out.print("sigelY["+i+"]="+sigelY[i]+"\n");
}
xiangguan=new double[datapoint+1-wintimelength];
double midx[]=new double[wintimelength+1];
double midy[]=new double[wintimelength+1];
for(int i=1;i<xiangguan.length;i++){
for(int j=1;j<=wintimelength;j++){
midx[j]=sigelX[i+j];
midy[j]=sigelY[i+j];
}
xiangguan[i]=this.ComputR(midx,midy,wintimelength);
//System.out.print(xiangguan[i]+"\n");
}
this.panel1.invalidate();
this.dft(sigelX);
this.dft(sigelY);
midx=new double[winfrqlength+1];
midy=new double[winfrqlength+1];
xianggan=new double[73-winfrqlength+1];
for(int i=1;i<xianggan.length;i++){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -