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

📄 sample4.c

📁 用CVI实现的相位差计
💻 C
字号:
#include <ansi_c.h>
#include <analysis.h>
#include <cvirte.h>		/* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#include "sample4.h"

static int panelHandle,i;
static double fai1,fai2,detafai;
int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)	/* Needed if linking in external compiler; harmless otherwise */
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "sample4.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);
	RunUserInterface ();
	return 0;
}

int CVICALLBACK AcquireData (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	double x2[200],y1[200],z[200];
	double phase1,rxy,rxyy,ry,phase3,b1;
	double x1[200],datapoints[200],y[200],a,b,fai,afterfilter[400];
	double phase,phase2,sigmaf,sigmaa,phase4;
	int n=200,i;
	//原始信号的相位
	phase=30;
	//标准信号的相位
	phase2=0;
	phase3=90;
	switch (event)
		{
		case EVENT_COMMIT:
			//无噪声的正弦信号
			SineWave (n, 5.0, 0.01, &phase, x1);
			//显示理想幅值
		    SetCtrlVal (panelHandle, PANEL_AVALUE, 5.0);
		    //显示理想相位
		    SetCtrlVal (panelHandle, PANEL_PHASE, 30.0); 
		    //白噪声信号
		    WhiteNoise(n,1.0,1,x2);
			// 产生两个标准信号
			SineWave (n, 3.0, 0.01, &phase2,y);
			SineWave (n, 3.0, 0.01, &phase3, y1);
			//产生带有噪声的信号
			Add1D (x1, x2, n, datapoints);
			//图形显示原始波形
			DeleteGraphPlot (panelHandle, PANEL_WAVEFORM, -1, VAL_IMMEDIATE_DRAW);
			PlotY (panelHandle, PANEL_WAVEFORM, datapoints, n, VAL_DOUBLE,
				   VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLACK);
			//自相关运算
			Correlate(datapoints,n,datapoints,n,afterfilter);
			for (i=0; i<n; i++)
				{
				afterfilter[i]= afterfilter[i]/n;
				}
			//显示经过自相关处理之后的波形
			DeleteGraphPlot (panelHandle, PANEL_WAVEFORM2, -1, VAL_IMMEDIATE_DRAW);
			PlotY (panelHandle, PANEL_WAVEFORM2, afterfilter, n, VAL_DOUBLE,
				   VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLACK); 
			//按照前面介绍的方法求取信号的幅值和相位
			Mul1D (datapoints, y, n, z);
			Sum1D (z, n, &rxy);
			rxy=rxy/n;
			Clear1D (z, n);
			Mul1D (datapoints, y1, n, z); 
			Sum1D (z, n, &rxyy); 
			rxyy=rxyy/n;
			Clear1D (z, n); 
			Mul1D (y, y, n, z); 
			Sum1D (z, n, &ry);
			ry=ry/n;
			b=sqrt(2*ry);
			fai=atan(rxyy/rxy);
			fai1=fai*180/3.1415926;
			a=2*rxy/(b*cos(fai));
			SetCtrlVal (panelHandle, PANEL_AMEASURE, a);
			SetCtrlVal (panelHandle, PANEL_FAIVALUE, fai1);
			break;
		case EVENT_RIGHT_CLICK:

			break;
		}
	return 0;
}

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:

			break;
		}
	return 0;
}

⌨️ 快捷键说明

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