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

📄 sample3.c

📁 用CVI开发的滤波程序
💻 C
字号:
#include <cvirte.h>		/* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#include <math.h>
#include <analysis.h>
#include <ansi_c.h>
#include "sample3.h"

static int panelHandle;
static int typenn;
int num,status;

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, "sample3.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);
	RunUserInterface ();
	return 0;
}

int CVICALLBACK Filtertype (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		     //选择滤波器类型
		     GetCtrlVal (panelHandle, PANEL_RING, &status);
		     switch (status) 
            {
			 	case 0:
             		typenn=0;
             	break;
             	case 1:
             		typenn=1;  
             	break;
             	case 2:
             		typenn=2;  
             	break;
             }
             break;
		case EVENT_RIGHT_CLICK:

			break;
		}
	return 0;
}

int CVICALLBACK Tuichu (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;
}

int CVICALLBACK Zhixing (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	//定义变量,分别表示滤波器纹波系数、衰减系数、截止频率,数组个数
	int order;
    double ripple,attenuation,samplefrequency,cutofffrequency;
    int n=500; 
    //定义数组,x表示滤波前数组,y表示滤波后数组、datapoints表示白噪声干扰,numpoints表示正弦信号
    double x[500],y[500],datapoints[500],numpoints[500];
	switch (event)
		{
		case EVENT_COMMIT:
			 //产生白噪声干扰信号
			 WhiteNoise(n,1.0,1,datapoints);
			 //产生正弦信号
			 SinePattern(n,10.0,0.0,5.0,numpoints);
			 //白噪声和正弦信号迭加
			 Add1D (datapoints, numpoints, n, x); 
			 DeleteGraphPlot (panelHandle, PANEL_GRAPH1, -1, VAL_DELAYED_DRAW); 
			 PlotY (panelHandle, PANEL_GRAPH1, x, n,
		          VAL_DOUBLE, VAL_THIN_LINE, VAL_NO_POINT, VAL_SOLID, 1,
		          VAL_BLACK);
             //获取滤波器波纹系数        
             GetCtrlVal (PANEL, PANEL_RIPPLE, &ripple);		     
	         //获取滤波器衰减系数
	         GetCtrlVal (PANEL, PANEL_ATTENUATION, &attenuation); 
             //获取滤波器阶数           
             GetCtrlVal (PANEL, PANEL_ORDER, &order);	     
             //获取滤波器上限频率                
             GetCtrlVal (PANEL, PANEL_CUTOFF, &cutofffrequency);      
             //获取采样频率
             GetCtrlVal (PANEL, PANEL_SAMPLEFRE, &samplefrequency);
			if (typenn==0)
				{
				//巴特沃斯低通滤波
				Bw_LPF(x,n,samplefrequency,cutofffrequency,order,y);
				}
			if (typenn==1)
				{
				//切比雪夫低通滤波
				Ch_LPF(x,n,samplefrequency,cutofffrequency,ripple,order,y);
				}
			if (typenn==2)
				{
				//椭圆低通滤波
				Elp_LPF(x,n,samplefrequency,cutofffrequency,ripple,attenuation,order,y);
				}
			DeleteGraphPlot (panelHandle, PANEL_GRAPH2, -1, VAL_DELAYED_DRAW); 
			PlotY (panelHandle, PANEL_GRAPH2, y, n,
		          VAL_DOUBLE, VAL_THIN_LINE, VAL_NO_POINT, VAL_SOLID, 1,
		          VAL_BLACK);
			break;
		case EVENT_RIGHT_CLICK:

			break;
		}
	return 0;
}

⌨️ 快捷键说明

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