哈尔滨工业大学CVI实验实验二.docx
- 文档编号:7322842
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:206.40KB
哈尔滨工业大学CVI实验实验二.docx
《哈尔滨工业大学CVI实验实验二.docx》由会员分享,可在线阅读,更多相关《哈尔滨工业大学CVI实验实验二.docx(14页珍藏版)》请在冰豆网上搜索。
哈尔滨工业大学CVI实验实验二
实验二
1.任务
编写一个函数发生器,要求:
能够通过用户界面选择产生正弦波、三角波、锯齿波、方波等函数波形
用曲线图控件绘制用户选择的波形。
2.实验步骤
步骤1:
根据要实现的功能,设计如图2-1所示的用户界面,其具体控件属性设置如表2-1所示。
图2-1最终用户界面
表2-1主要控件的基本属性列表
控件类型
ConstantName
属性设置
面板
Panel
PANEL
命令按钮
CommandButton
QUITBUTTON
CallbackFunction
QuitCallback
Lable
__Quit
曲线图控件
Graph
GRAPH1
Control
Mode
Indicator
DataMode
Retain
Lable
波形显示
下拉列表控件
Ring
WAVEFORM
CallbackFunction
WaveFormChooseCB
Label
波形选择
Label/Value
Pairs
Label
无
Value
0
Label
正弦波
Value
1
Label
三角波
Value
2
Label
锯齿波
Value
3
Label
方波
Value
4
步骤2:
生成代码框架。
选择Code→Generate→AllCode,生成代码框架,接着添加自定义函数show_wave进行显示。
/*下拉列表控件“波形选择”对应的回调函数*/
intCVICALLBACKWaveFormChooseCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
show_wave();
break;
}
return0;
}
然后,在函数show_wave内添加如下代码。
voidshow_wave(void)
{
intwaveForm;/*波形选择变量*/
doubleample=5.0;/*幅度*/
doublephase=0.0,waveData[POINTS];/*相位和波形数据变量*/
doublesampleRate=10000.0,freq=100.0;/*采样率和频率变量*/
GetCtrlVal(panelHandle,PANEL_WAVEFORM,&waveForm);
switch(waveForm)
{
case0:
/*无波形*/
DeleteGraphPlot(panelHandle,PANEL_GRAPH1,-1,VAL_IMMEDIATE_DRAW);/*清除所画曲线*/
break;
case1:
/*正弦波*/
SineWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case2:
/*三角波*/
TriangleWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case3:
/*锯齿波*/
SawtoothWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case4:
/*方波*/
SquareWave(POINTS,ample,freq/sampleRate,&phase,50.0,waveData);
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);/*画出波形*/
}
}
代码中的函数意义及调用方法如下
(1)函数DeleteGraphPlot清除所画曲线,调用路径为:
Library→UerInterfaceLibrary→Controls/Graphs/StripCharts….→GraphsandStirpCharts→DeleteGraphPlot
其参数设置见图2-2。
(2)函数SineWave,TriangleWave,SawtoothWave,SquareWave分别为正弦波,三角波,锯齿波和方波生成函数。
它们都在Library→AdvancedAnalysisLibrary→SignalGeneration目录下获得,其参数设置如图2-3~2-6所示。
(3)函数PlotWaveform,画曲线图函数,调用路径为:
Library→UerInterfaceLibrary→Controls/Graphs/StripCharts….→GraphsandStirpCharts→PlotWaveform,
其参数设置见图2-7。
图2-2DeleteGraphPlot函数面板
图2-3正弦波生成函数面板
图2-4三角波生成函数面板
图2-5锯齿波生成函数面板
图2-6方波生成函数面板
图2-7PlotWaveform函数面板
步骤3:
运行程序。
选择Run→Debugex1_dbg.exe。
选做:
任务:
波形的频率幅度可调;
用曲线图控件绘制波形频谱。
步骤1:
根据功能需要,我们添加一曲线图控件和两数值控件,其具体设置如表2-2所示。
表2-2添加控件的基本属性列表
控件类型
ConstantName
属性设置
曲线图控件
Graph
GRAPH2
Control
Mode
Indicator
DataMode
Retain
Lable
频谱显示
数值控件
Numeric
AMPLE
CallbackFunction
ChangeAmpleCB
Lable
幅度
FREQ
CallbackFunction
ChangeFreqCB
Lable
频率
最终界面如图2-8所示。
图2-8最终用户界面
完成用户界面后,编写回调函数ChangeAmpleCB和ChangeFreqCB,注意把其事件改为EVENT_VAL_CHANGED,其代码如下。
/*数值控件AMPLE对应的回调函数*/
intCVICALLBACKChangeAmpleCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_VAL_CHANGED:
/*事件不是EVENT_COMMIT*/
show_wave();
break;
}
return0;
}
/*数值控件FREQ对应的回调函数*/
intCVICALLBACKChangeFreqCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_VAL_CHANGED:
show_wave();
break;
}
return0;
}
然后还需要对show_wave函数作如下改动:
voidshow_wave(void)
{
intwaveForm;
doubleample;
doublephase=0.0,waveData[POINTS],filterData[POINTS],specData[POINTS];
doublesampleRate=10000.0,freq;
doublecutoff_freq=3000.0;/*设置截止频率*/
GetCtrlVal(panelHandle,PANEL_WAVEFORM,&waveForm);
GetCtrlVal(panelHandle,PANEL_AMPLE,&le);/*获得幅度值*/
GetCtrlVal(panelHandle,PANEL_FREQ,&freq);/*获得频率值*/
switch(waveForm)
{
case0:
DeleteGraphPlot(panelHandle,PANEL_GRAPH1,-1,VAL_IMMEDIATE_DRAW);
break;
case1:
SineWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case2:
TriangleWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case3:
SawtoothWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case4:
SquareWave(POINTS,ample,freq/sampleRate,&phase,50.0,waveData);
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);/*画出信号的功率谱*/
}
}
上面代码中的函数意义及调用方法如下
(1)函数Bw_LPF
巴特沃兹低通滤波器函数,其调用路径为:
Library→AdvancedAnalysisLibrary→SignalProcessing→IIRDigitalFilters→One-stepFiltersFunctions→LowpassButterworth,其参数设置见图2-8。
(2)函数Copy1D
数组拷贝函数,其调用路径为:
Library→AdvancedAnalysisLibrary→ArrayOperations→1DOperations,其参数设置见图2-9。
(3)函数Spectrum
功率谱函数,其调用路径为:
Library→AdvancedAnalysisLibrary→SignalProcessing→FrequencyDomain→PowerSpectrum,其参数设置见图2-10。
图2-8Bw_LPF函数面板
图2-9Copy1D函数面板
图2-10Spectrum函数面板
最后,保存并运行程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈尔滨工业大学 CVI 实验