虚拟仪器实验指导二.doc_第1页
虚拟仪器实验指导二.doc_第2页
虚拟仪器实验指导二.doc_第3页
虚拟仪器实验指导二.doc_第4页
虚拟仪器实验指导二.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二1 任务编写一个函数发生器,要求 :能够通过用户界面选择产生正弦波、三角波、锯齿波、方波等函数波形用曲线图控件绘制用户选择的波形。2 实验步骤步骤1:根据要实现的功能,设计如图2-1所示的用户界面,其具体控件属性设置如表2-1所示。图2-1 最终用户界面表2-1 主要控件的基本属性列表控件类型Constant Name 属性设置面板PanelPANEL命令按钮Command ButtonQUITBUTTONCallback FunctionQuitCallbackLable_Quit曲线图控件GraphGRAPH1ControlModeIndicatorData ModeRetainLable波形显示下拉列表控件RingWAVEFORMCallback FunctionWaveFormChooseCBLabel波形选择Label/ValuePairsLabel无Value0Label正弦波Value1Label三角波Value2Label锯齿波Value3Label方波Value4步骤2:生成代码框架。选择CodeGenerateAll Code, 生成代码框架,接着添加自定义函数show_wave 进行显示。 /*下拉列表控件“波形选择”对应的回调函数*/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;然后,在函数show_wave内添加如下代码。void show_wave(void) int POINTS=200; int waveForm;/*波形选择变量*/double ample=5.0;/*幅度*/double phase=0.0,waveDataPOINTS;/*相位和波形数据变量*/double sampleRate=10000.0,freq=100.0;/*采样率和频率变量*/GetCtrlVal (panelHandle, PANEL_WAVEFORM, &waveForm);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;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 清除所画曲线,调用路径为:LibraryUer Interface LibraryControls/Graphs/Strip Charts.Graphs and Stirp ChartsDelete Graph Plot其参数设置见图2-2。(2) 函数SineWave,TriangleWave,SawtoothWave,SquareWave分别为正弦波,三角波,锯齿波和方波生成函数。它们都在Library Advanced Analysis Library Signal Generation 目录下获得,其参数设置如图2-32-6所示。(3) 函数PlotWaveform,画曲线图函数,调用路径为:LibraryUer Interface LibraryControls/Graphs/Strip Charts.Graphs and Stirp ChartsPlotWaveform,其参数设置见图2-7。图2-2 DeleteGraphPlot函数面板图2-3 正弦波生成函数面板图2-4 三角波生成函数面板图2-5 锯齿波生成函数面板图2-6 方波生成函数面板图2-7 PlotWaveform函数面板步骤3:运行程序。选择RunDebug ex1_dbg.exe。选做:任务:波形的频率幅度可调;用曲线图控件绘制波形频谱。步骤1:根据功能需要,我们添加一曲线图控件和两数值控件,其具体设置如表2-2所示。表2-2 添加控件的基本属性列表控件类型Constant Name 属性设置曲线图控件GraphGRAPH2ControlModeIndicatorData ModeRetainLable频谱显示数值控件NumericAMPLECallback FunctionChangeAmpleCBLable幅度FREQCallback FunctionChangeFreqCBLable频率最终界面如图2-8 所示。图2-8 最终用户界面完成用户界面后,编写回调函数ChangeAmpleCB和ChangeFreqCB,注意把其事件改为EVENT_VAL_CHANGED,其代码如下。/*数值控件AMPLE对应的回调函数*/int CVICALLBACK ChangeAmpleCB (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_VAL_CHANGED:/*事件不是EVENT_COMMIT*/ show_wave();break;return 0;/*数值控件FREQ对应的回调函数*/int CVICALLBACK ChangeFreqCB (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_VAL_CHANGED: show_wave(); break;return 0;然后还需要对show_wave函数作如下改动:void show_wave(void) int waveForm;double ample;double phase=0.0,waveDataPOINTS,filterDataPOINTS,specDataPOINTS;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;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 Advanced Analysis LibrarySignal ProcessingIIR Digital FiltersOne-step Filters FunctionsLowpass Butterworth,其参数设置见图2-8。(2) 函数Copy1D 数组拷贝函数,其调用路径为:Library Advanced Analysis LibraryArray Operations1D Operations,其参数设置见图2-9。(3) 函数Spectrum 功率谱函数,其调用路径为:Library Advanced Analysis LibrarySignal ProcessingFrequency DomainPower Spectrum,其参数设置见图2-10。图2-8Bw_LPF函数面板图2-9 Copy1D函数面板图2-10 Spectrum函数面板最后,保存并运行程序如下:#include #include #include #include test.hstatic 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 QuitCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:QuitUserInterface (0);break;return 0;void show_wave(void) int POINTS=200;int waveForm;double ample;double phase=0.0,waveDataPOINTS,filterDataPOINTS,specDataPOINTS;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); DeleteGraphPlot(panelHandle,PANEL_GRAPH2,-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;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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论