⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backup.java

📁 Java实现的快速自相关算法:提供交互界面,可读入外部数据文件
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
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;
	double eeg[][][];
	double eegmean[][];
	double eegstd[][];
	double neeg[][][];
	double Sre[][][]=new double[1][1][1];
	double Sim[][][]=new double[1][1][1];
	double C[]=new double[101];
	
	
	public mainform()
	{
		// Required for Visual J++ Form Designer support
		
		initForm();
		/*
		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 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=mean(neeg,2);
						eegstd=std(neeg,1,2);*/
						
						eegmean=new double[electrade+1][datapoint+1];
						this.ComputMEANofNEEG();
						
						eegstd=new double[electrade+1][datapoint+1];
						this.ComputSTDofNEEG();
						
						/**
						 * for i=1:30
						 *   for k=1:300
						 *         neeg(i,:,k)=(neeg(i,:,k)-eegmean(i,1,k))/eegstd(i,1,k);
						 *   end
						 *  end 							 
						 */
						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.panel3.invalidate();
						this.label8.setText("数据规格化完成!正在进行数据的相关/相干运算,请稍候......\n");					
						/////////////////////normalizing finished!Begin to coherence!/////////////////////////////////////
						int t=0;
						double r0[][][]=new double[trial+1][electrade+1][electrade+1];
						double r1[][][]=new double[trial+1][electrade+1][electrade+1];
						double r2[][][]=new double[trial+1][electrade+1][electrade+1];
						double r3[][][]=new double[trial+1][electrade+1][electrade+1];
						double r4[][][]=new double[trial+1][electrade+1][electrade+1];
						double r5[][][]=new double[trial+1][electrade+1][electrade+1];
						double r6[][][]=new double[trial+1][electrade+1][electrade+1];
						double temp[][][]=new double[trial+1][electrade+1][electrade+1];
								
						for(int i=1;i<=trial;i++){
							//初始化协方差矩阵
							for(int c=1;c<=electrade;c++)//for 1
								for(int r=1;r<=electrade;r++){
									r0[i][c][r]=0;
									r1[i][c][r]=0;
									r2[i][c][r]=0;
									r3[i][c][r]=0;
									r4[i][c][r]=0;
									r5[i][c][r]=0;
									r6[i][c][r]=0;
									temp[i][c][r]=0;
									}//for 1
								
								
								for(int j=1;j<=electrade;j++){//for 2
									for(int xx=1;xx<=electrade;xx++)//for 3
										for(int yy=1;yy<=electrade;yy++){
											temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+j];
										}//for 3
									for(int xx=1;xx<=electrade;xx++)//for 4
										for(int yy=1;yy<=electrade;yy++){
											r0[i][xx][yy]+=temp[i][xx][yy];
										}//for 4
									}//for 2
								for(int xx=1;xx<=electrade;xx++)//for 5
									for(int yy=1;yy<=electrade;yy++){
										r0[i][xx][yy]/=(double)electrade;
										}//for 5               compute R(0) for each trial
								
								
								for(int j=1;j<=electrade-1;j++){//for 6
									for(int xx=1;xx<=electrade;xx++)//for 7
										for(int yy=1;yy<=electrade;yy++){
											temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+1+j];
										}//for 7
									for(int xx=1;xx<=electrade;xx++)//for 8
										for(int yy=1;yy<=electrade;yy++){
											r1[i][xx][yy]+=temp[i][xx][yy];
										}//for 8
									}//for 6
								for(int xx=1;xx<=electrade;xx++)//for 9
									for(int yy=1;yy<=electrade;yy++){
										r1[i][xx][yy]/=(double)(electrade-1);
										}//for 9               compute R(1) for each trial
								
								
								for(int j=1;j<=electrade-2;j++){//for 10
									for(int xx=1;xx<=electrade;xx++)//for 11
										for(int yy=1;yy<=electrade;yy++){
											temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+2+j];
										}//for 11
									for(int xx=1;xx<=electrade;xx++)//for 12
										for(int yy=1;yy<=electrade;yy++){
											r2[i][xx][yy]+=temp[i][xx][yy];
										}//for 12
									}//for 10
								for(int xx=1;xx<=electrade;xx++)//for 13
									for(int yy=1;yy<=electrade;yy++){
										r2[i][xx][yy]/=(double)(electrade-2);
										}//for 13               compute R(2) for each trial
								
								
								for(int j=1;j<=electrade-3;j++){//for 14
									for(int xx=1;xx<=electrade;xx++)//for 15
										for(int yy=1;yy<=electrade;yy++){
											temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+3+j];
										}//for 15
									for(int xx=1;xx<=electrade;xx++)//for 16
										for(int yy=1;yy<=electrade;yy++){
											r3[i][xx][yy]+=temp[i][xx][yy];
										}//for 16
									}//for 14

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -