#include <cvirte.h>
#include <userint.h>
#include "test.h"
#include "analysis.h"
#define POINTS 1000
void show_wave(void);
static int panelHandle;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "test.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK MyWindowCallback(int panel, int event, void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_CLOSE:
QuitUserInterface(0); // 关闭程序
break;
// 其他事件处理...
}
return 0;
}
int CVICALLBACK WaveFormChooseCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
show_wave();
break;
}
return 0;
}
int CVICALLBACK amplitudeChooseCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
int CVICALLBACK frequecyChoose (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
void show_wave(void)
{
int waveForm;
double ample;
double phase = 0.0, waveData[POINTS], filterData[POINTS], specData[POINTS];
double sampleRate = 10000.0, freq;
double cutoff_freq=3000.0; /*设置截止频率*/
GetCtrlVal(panelHandle, PANEL_WAVEFORM, &waveForm);
GetCtrlVal(panelHandle, PANEL_AMPLE, &le);
GetCtrlVal(panelHandle, PANEL_FREQ, &freq);
switch (waveForm)
{
case 0:
DeleteGraphPlot(panelHandle, PANEL_GRAPH1, -1, VAL_IMMEDIATE_DRAW);
break;
case 1:
SineWave(POINTS, ample, freq/sampleRate, &phase, waveData); //注意这里使用的频率指的是归一化的频率。
break;
case 2:
TriangleWave(POINTS, ample, freq/sampleRate, &phase, waveData);
break;
case 3:
SawtoothWave(POINTS, ample, freq/sampleRate, &phase, waveData);
break;
case 4:
SquareWave(POINTS, ample, freq/sampleRate, &phase, 50.0, waveData);
break;
default:
break;
}
if(waveForm)
{
DeleteGraphPlot(panelHandle, PANEL_GRAPH1, -1, VAL_IMMEDIATE_DRAW);
PlotWaveform(panelHandle, PANEL_GRAPH1, waveData, POINTS, VAL_DOUBLE, 1.0, 0.0,
0.0, 1.0/sampleRate, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID,
1, VAL_RED);
Bw_LPF(waveData, POINTS, sampleRate, cutoff_freq, 5, filterData);//低通滤波
Copy1D(filterData, POINTS, specData);//复制数据
Spectrum(specData, POINTS);//进行功率谱分析
DeleteGraphPlot(panelHandle, PANEL_GRAPH2, -1, VAL_IMMEDIATE_DRAW);
PlotWaveform(panelHandle, PANEL_GRAPH2, specData, POINTS, VAL_DOUBLE, 1.0,
0.0, 0.0, sampleRate/POINTS, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画出信号的功率谱
}
}
LabWindows/CVI入门教程的虚拟信号发生器
需积分: 5 122 浏览量
2023-08-11
10:21:07
上传
评论 2
收藏 62KB ZIP 举报
harrybotter
- 粉丝: 4
- 资源: 48
最新资源
- 基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar
- 什么是学生成绩管理系统c++以及学习学生成绩管理系统的意义
- 什么是词向量-以及学习关于了解词向量的意义
- 什么是mybatis动态sql以及学习mybatis动态sql的意义
- 华为数据治理方法论,包括:数据治理框架、数据治理组织架构、数据治理度量评估体系以及华为数据治理案例分享
- 基于matlab实现对表面肌电信号进行归一化处理,并对归一化后的图形显示 .rar
- 基于matlab实现单级倒立摆的 T-S 模型 包括 LMI 程序源码
- 图书管理系统(struts+hibernate+spring+ext).rar
- 基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar
- STM32使用PWM驱动舵机并通过OLED显示
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈