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

📄 信号产生.txt

📁 搜集的用LABWINDOWS/CVI开发平台设计的一款一般波形发生器,对学习虚拟仪器开发的有一定的帮助
💻 TXT
字号:
#include "toolbox.h"
#include <ansi_c.h>
#include <analysis.h>
#include <cvirte.h>		
#include <userint.h>
#include "signal generation.h"

static int panelHandle;

//自定义函数,产生信号波形
void drawgraph (void);
int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "signal generation.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);
	
	//装载界面时产生信号
	drawgraph ();
	RunUserInterface ();
	DiscardPanel (panelHandle);
	return 0;
}

int CVICALLBACK QuitCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			QuitUserInterface (0);
			break;
	}
	return 0;
}

int CVICALLBACK signalwave (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			
			//调用产生波形函数
			drawgraph ();
	}
	return 0;
}

//产生信号波形
void drawgraph (void)
{
	double amp;
	int cycle;
	double phase;
	int samplepoint;
	double *wave;
	int type;
	
	//以下代码为获得信号的单周期采样点数、周期、增益、相位信息
	GetCtrlVal (panelHandle, PANEL_NUMERIC_SAMPLEPOINT, &samplepoint);
	GetCtrlVal (panelHandle, PANEL_NUMERIC_CYCLE, &cycle);
	GetCtrlVal (panelHandle, PANEL_NUMERIC_AMP, &amp);
	GetCtrlVal (panelHandle, PANEL_NUMERIC_PHASE, &phase);
	
	//获得信号的类型
	GetCtrlVal (panelHandle, PANEL_RING, &type);
	DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
	
	//获得信号的总采样点数
	samplepoint = samplepoint * cycle;
	
	//为信号波形数组动态分配内存
	wave = malloc (samplepoint * sizeof (double));
	switch (type)
	{
		case 0:
			
			//冲击信号
			Impulse (samplepoint, amp, 0, wave);
			break;
		case 1:
			
			//脉冲信号
			Pulse (samplepoint, amp, 0, 10, wave);
			break;
		case 2:
			
			//斜坡信号
			Ramp (samplepoint, 0.0, amp, wave);
			break;
		case 3:
			
			//正弦信号
			SinePattern (samplepoint, amp, phase, cycle, wave);
			break;
		case 4:
			
			//均匀白噪声信号
			Uniform (samplepoint, 1, wave);
			break;
		case 5:
			
			//白噪声信号
			WhiteNoise (samplepoint, amp, 1, wave);
			break;
		case 6:
			
			//高斯白噪声信号
			GaussNoise (samplepoint, 1.0, 1, wave);
			break;
		case 7:
			
			//扫描频率信号
			Chirp (samplepoint, amp, 0.0, 0.5, wave);
			break;
		case 8:
			
			//余弦信号
			SinePattern (samplepoint, amp, 90.0, cycle, wave);
			break;
		case 9:
			
			//抽样函数信号
			Sinc (samplepoint, amp, 0.0, Random (0, 1), wave);
			break;
		case 10:
			
			//三角波信号
			TriangleWave (samplepoint, amp, (double)cycle/samplepoint, &phase, wave);
			
			break;
	}
	PlotY (panelHandle, PANEL_GRAPH, wave, samplepoint, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);

	//释放动态分配的内存
	free (wave);
}

⌨️ 快捷键说明

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