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

📄 gz7.c

📁 基于相位法的相关差计,即用程序的形式把相位的差计表示出来
💻 C
字号:
#include <cvirte.h>		
#include <userint.h>
#include "GZ7.h"
#include <ansi_c.h>
#include <analysis.h>

void GenerateGraphs(void);




static int plot1;
static int plot2;
static int mainpnl;
static int numpoints=256;
static double cycles=3.0;
static double sig1amp=9.0;
static double sig2amp=5.0;
static double sig1phase=10.0;
static double sig2phase=60.0;
static double wave1[2048];
static double wave2[2048];
static double corrwave[(2048*2)-1];
static double wave1maxval=0.0;
static int wave1maxind=0;
static int wave1minind=0;
static double wave2maxval=0.0;
static int wave2maxind=0;
static int wave2minind=0;
static double phasediff;
static int autoGenerateGraphs=1;



int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((mainpnl = LoadPanel (0, "GZ7.uir", MAINPNL)) < 0)
		return -1;
		
		if(autoGenerateGraphs)GenerateGraphs();
		
		
	DisplayPanel (mainpnl);
	RunUserInterface ();

	return 0;
}


int CVICALLBACK Getnumpoints (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		GetCtrlVal (mainpnl,MAINPNL_NUMPOINTS,&numpoints);
SetCtrlAttribute(mainpnl,MAINPNL_CYCLES,ATTR_MAX_VALUE,(double)(numpoints-1));
if (autoGenerateGraphs) GenerateGraphs();
break;
case EVENT_RIGHT_CLICK:
MessagePopup("Sets Number of Points","Sets the number of points in each wave.More points results in greater accuracy in the phase difference calculation.");



			break;
		}
	return 0;
}



int CVICALLBACK Getcycles (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		GetCtrlVal (mainpnl,MAINPNL_CYCLES,&cycles);
if (autoGenerateGraphs) GenerateGraphs();
break;
case EVENT_RIGHT_CLICK:
MessagePopup("Sets Cycles","Sets the number of cycles in each wave.");



			break;
		}
	return 0;
}

int CVICALLBACK Getsig1amp (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		GetCtrlVal (mainpnl,MAINPNL_SIG1AMP,&sig1amp);
if (autoGenerateGraphs) GenerateGraphs();
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Sets Signal 1 Amplitude","Set the amplitude of the first signal.");



			break;
		}
	return 0;
}

int CVICALLBACK Getsig1pahse (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		GetCtrlVal (mainpnl,MAINPNL_SIG1PHASE,&sig1phase);
if (autoGenerateGraphs) GenerateGraphs();
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Sets Signal 1 Phase","Set the phase of the first signal.");


		

			break;
		}
	return 0;
}

int CVICALLBACK Getsig2amp (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		GetCtrlVal (mainpnl,MAINPNL_SIG2AMP,&sig2amp);
if (autoGenerateGraphs) GenerateGraphs();
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Sets Signal 2 Amplitude","Set the amplitude of the second signal.");


		

			break;
		}
	return 0;
}

int CVICALLBACK Getsig2pahse (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		
		GetCtrlVal (mainpnl,MAINPNL_SIG2PHASE,&sig2phase);
if (autoGenerateGraphs) GenerateGraphs();
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Set Signal 2 Phase","Sets the phase of the second signal.");


		

			break;
		}
	return 0;
}



int CVICALLBACK Generate (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		 GenerateGraphs();
			break;   
case EVENT_RIGHT_CLICK:
MessagePopup (" Generate","Generate the wave plots and phase difference calculation.");

		 

			break;
		}
	return 0;
}	  

/*绘图函数*/


void GenerateGraphs(void)
{
double *peakLoc,*peakAmp,*peakDeriv;
int count;

SinePattern(numpoints,sig1amp,sig1phase,cycles,wave1);
SinePattern(numpoints,sig2amp,sig2phase,cycles,wave2);
Correlate(wave1,numpoints,wave2,numpoints,corrwave);
PeakDetector(wave1,numpoints,0.0,3,0,1,1,&count,&peakLoc,&peakAmp,&peakDeriv);
if(count>0)
{
wave1maxind=peakLoc[0];
wave1maxval=peakAmp[0];
}
if(peakLoc)
FreeAnalysisMem(peakLoc);
if(peakAmp)
FreeAnalysisMem(peakAmp);
if(peakDeriv)
FreeAnalysisMem(peakDeriv);
PeakDetector(wave2,numpoints,0.0,3,0,1,1,&count,&peakLoc,&peakAmp,&peakDeriv);
if(count>0)
{
wave2maxind=peakLoc[0];
wave2maxval=peakAmp[0];
}
if(peakLoc)
FreeAnalysisMem(peakLoc);
if(peakAmp)
FreeAnalysisMem(peakAmp);
if(peakDeriv)
FreeAnalysisMem(peakDeriv);
phasediff=(cycles/numpoints)*(wave1maxind-wave2maxind)*360.0;
phasediff=fmod(phasediff,360.0);


/*Update UIR*/
DeleteGraphPlot(mainpnl,MAINPNL_SIGGRAPH,-1,VAL_DELAYED_DRAW);
DeleteGraphPlot(mainpnl,MAINPNL_CORRGRAPH,-1,VAL_DELAYED_DRAW);
plot1=PlotY(mainpnl,MAINPNL_SIGGRAPH,wave1,numpoints,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);
plot2=PlotY(mainpnl,MAINPNL_SIGGRAPH,wave2,numpoints,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_DK_BLUE);
PlotY(mainpnl,MAINPNL_CORRGRAPH,corrwave,((2*numpoints)-1),VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);


    //SetCtrlVal (mainpnl, MAINPNL_SIG1MAX, wave1maxval);
    //SetCtrlVal (mainpnl, MAINPNL_SIG2MAX, wave2maxval);
    //SetCtrlVal (mainpnl, MAINPNL_SIG1IND, wave1maxind);
    //SetCtrlVal (mainpnl, MAINPNL_SIG2IND, wave2maxind);


    SetGraphCursorIndex (mainpnl, MAINPNL_SIGGRAPH, 1, plot1, wave1maxind);
    SetGraphCursorIndex (mainpnl, MAINPNL_SIGGRAPH, 2, plot2, wave2maxind);

 SetCtrlVal (mainpnl, MAINPNL_PHASEDIFF, phasediff); 
}

 
 int CVICALLBACK Quit (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
			QuitUserInterface (0);
			break;
			case EVENT_RIGHT_CLICK:
			MessagePopup("Quit program","Quits the program.");
			break;
		}
	return 0;
}

int CVICALLBACK SetAutoGenerate (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_VAL_CHANGED:
		GetCtrlVal(panel,control,&autoGenerateGraphs);
		

			break;
		}
	return 0;
}

/*int CVICALLBACK Getresult (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		phasediff=(cycles/numpoints)*(wave1maxind-wave2maxind)*360.0;
		SetCtrlVal(mainpnl,MAINPNL_PHASEDIFF,phasediff);
		

			break;
		}
	return 0;
}		  */


⌨️ 快捷键说明

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