1、 基于 MATLAB的数字信号发生器设计报告 洗手 洗手 洗手 摘 要 : bef数字信号发生器是基于软硬件实现的一种波形发生仪器 。 洗手在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和 , 吃饭 而这些简单信号皆可由数字信号发生器模拟产生 , 吃饭 因此它在工程分析和实验教学有着广泛的应用 。 洗手 MATLAB 是一个数据分析和处理功能十分强大的工程实用软件 , 吃饭 他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令 , 吃饭 在数字信号处理方面方便实用 。 洗手 本文介绍了使用 MATLAB 建立一个简单数字信号发生器的基本流程 , 吃饭 并详细叙述
2、了简单波形(正弦波 、 beef方波 、 beef三角波 、 beef锯齿波 、b eef白噪声)信号的具体实现方法 。 洗手 洗手 关键字 : beefMATLAB , 吃饭 数字信号发生器 洗手 概述 洗手 随着计算机软硬件技术的发展 , 吃饭 越来越多现实物品的功能能够由计算机实现 。 洗手 信号发生器原本是模拟电子技术发展的产物 , 吃饭 到后来的数字信号发生器也是通过硬件实现的 , 吃饭 本文将给出通过计算机软件实现的数字信号发生器 。 洗手 洗手 信号发生器是一种常用的信号源 , 吃饭 广泛应用于电子技术实验 、 bef自控系统和科学研究等领域 。 洗手 传统的台式仪器如任意函数发
3、生器等加工工艺复杂 、 beef价格高 、 bef仪器面板单调 、 bef数据存储 、 bef处理不方便 。 洗手 以 Matlab和 LabVlEW 为代表的软件的出现 , 吃饭 轻松地用虚拟仪器技术解决了这些问题 。 洗手 洗手 Matlab 是一个数据分析和处理功能十分强大的工程实用软件 , 吃饭 他的数据采集工具箱( data acquisition toolbox)为实现数据的输入和输出提供了十分方便的函数和命令 , 吃饭 利用这些函数和命令可以很容易地实现对外部物理世界的信号输出和输入 。 洗手 根据声卡输出信号的原理 , 吃饭 采用Matlab 软件编程 , 吃饭 可以方便地输出
4、所需要 的正弦波 、 bef三角波 、 bef方波等多种信号 , 吃饭有效地实现信号发生器的基本功能 。 洗手 洗手 设计原理 洗手 要设计的 数字信号 有正弦信号 、 bef方波信号 、 bef三角波 、 bef锯齿波 、 bef白噪声 、bef脉冲信号 。 洗手 其中 , 吃饭 前五种波形都可以利用 MATLAB提供的函数实现 ,吃饭 并根据输入的幅值 、 bef相位 、 bef频率等信息进行调整 。 洗手 脉冲信号由自己编写程序实现 , 吃饭并以定义的时间节点控制脉冲出现的时刻 。 洗手 洗手 正弦信号的实现 洗手 正弦波信号的数学表达式如 2.1, 吃饭 洗手 sin 2y A ft
5、错误 !文档中没有指定样式的文字。 .1 洗手 其中 : beefA 为幅值 ; bef洗手 f 为频率 ; beef洗手 为相位 。 洗手 洗手 在 MATLAB中 , 吃饭相应的数字信号可以由下式 2.2计算 , 吃饭 洗手 sin 2y n t A fn t 错误 !文档中没有指定样式的文字。 .2 洗手 式中时间变量 t可构造为一个一维数组 , 吃饭并由 式 2.3进行付值 , 吃饭 洗手 0 :1/ : 0.5t cf 错误 !文档中没有指定样式的文字。 .3 洗手 其中 : beefcf 采样频率 。 洗手 洗手 幅值 、 bef频率 、 bef相位 、 bef采样频率等在用户界面
6、输入 。 洗手 在 t与 y 的表达式都得到以后 , 吃饭用 plot二维作图函数获得波形显示 。 洗手 洗手 方波信号实现 洗手 像正弦波一样 , 吃饭 从用户界面获得幅值 、 bef频率 、 bef相位 、 bef采样频率等信息 ,吃饭用 square函数获得对应 y 坐标值 , 吃饭用 plot绘图 , 吃饭格式如式 2.4 洗手 ,y squ are t du ty 错误 !文档中没有指定样式的文字。 .4 洗手 其中 , 吃饭 duty 占空比 。 洗手 洗手 三角波和锯齿波的实现 洗手 这两种波形的 y 坐标表达式皆要借助于 sawtooth 命令 。 洗手 洗手 Sawtooth
7、(t)用于产生 周期为 2 , 吃饭 幅值从 -1 +1 的 锯齿波 , 吃饭 波形的斜率为 1/ 。 洗手 洗手 Sawtooth(t, 吃饭 width)用于产生三角波 , 吃饭 其中 width是取值介于 0和 1 之间的一个参数 , 吃饭 它决定了在一个周期中峰值的发生点 。 洗手 本设计中取width=0.5, 吃饭可以获得标准形状的三角波 。 洗手 洗手 完整 y 坐标表达式 如式 2.5, 吃饭 洗手 2 / 3 6 0 , 0 . 5y a sa w to o th ft 错误 !文档中没有指定样式的文字。 .5 洗手 白噪声的实现 洗手 白噪声的定义 : bef白噪声是指功率
8、谱密度在整个频域内均匀分布的噪声 。 洗手 换句话说 , 吃饭 此信号在各个频段上的功率是一样的 , 吃饭 由于白光是由各种频率(颜色)的单色光混合而成 , 吃饭 因而此信号的这种具有平坦功率谱的性质被称作是 “白色的 ”, 吃饭此信号也因此被称作白噪声 。 洗手 洗手 白噪声的实现借助于 randn 函数 , 吃饭 它的功能是产生一个均值为零方差为 1 的随机高斯分布序列 , 吃饭如式 2.6 洗手 *y a ran dn size t 错误 !文档中没有指定样式的文字。 .6 洗手 其中 , 吃饭 a 幅值 ; bef洗手 1:1/ : 0.5t cf 洗手 脉冲信号的实现 洗手 考虑到脉
9、冲信号出现的时刻可以进行调节 , 吃饭 借助图形界面输入相位信息设置时间节点 , 吃饭如式 洗手 0 :1/ : 0.5;0.5* / 360;t cfnxy t n 错误 !文档中没有指定样式的文字。 .7 洗手 设计方法 洗手 ( 1)图形界面设计 洗手 打开 MATLAB, 吃饭 新建一个空白的图形界面文件 , 吃饭 计算需要添加的控件种类及个数并设计它们的布局 。 洗手 洗手 添加 1 个 axes 控件 , 吃饭用于显示波形 ; bef洗手 添加 5个 static text 控件作为窗口说明使用 ; bef洗手 添加 4个 Slider 控件用于输入幅值 、 bef频率等信号信息
10、; bef洗手 添加 4个 edit text 控件用于显示 幅值 、 bef频率等信号信息 ; bef洗手 添加 7个 push button 空间用于各种操作的开始控制 ; bef洗手 双击各个控件并修改其颜色 、 bef大小及 string属性 。 洗手得到界面如下 : beef洗手 ( 2)各控件对应的回调函数的编辑 洗手 界面控件及布局创建完成以后 , 吃饭 自动生成包含各控件回调函数在内的m 文件 。 洗手 点击保存时可以修改 fig 及 m 文件名 。 洗手 系统自动生成的 m文件包括 : beef洗手 function varargout = signalgenerator(v
11、arargin)function signalgenerator_OpeningFcn(hObject, eventdata, handles, varargin)洗手 function varargout = signalgenerator_OutputFcn(hObject, eventdata, handles 洗手 以及各个控件对应的回调函数的框架 , 吃饭如 : bef洗手 function a_Callback(hObject, eventdata, handles)等等 。 洗手 洗手 在前面已经介绍了各个波形的实现原理及方法 , 吃饭 现仅以正弦函数的实现为例介绍回调函数的使用
12、及编辑 。 洗手 洗手 回调函数即在一定的操作下自动执行的指令代码 。 洗手 注意回调函数中定义的变量只在其内部有效 。 洗手正弦波按钮的回调函数如下 : bef洗手 % - Executes on button press in pushbuttonzhengxian.洗手 function pushbuttonzhengxian_Callback(hObject, eventdata, handles)洗手 % hObject handle to pushbuttonzhengxian (see GCBO)洗手 % eventdata reserved - to be defined in
13、 a future version of MATLAB 洗手 % handles structure with handles and user data (see GUIDATA)洗手 洗手 a=str2double(get(handles.editFUZHI,String);beef洗手 f=str2double(get(handles.editPINLU,String);beef洗手 x=str2double(get(handles.editXIANGWEI,String);beef洗手 cf=str2double(get(handles.editk,String);beef洗手 t=0
14、:1/cf:0.5 ;beef%按设定的采样频率将时间均匀分割 洗手 y=a*sin(2*pi*(f*t+x/360);beef洗手 plot(t,y);beef洗手 wavplay(y);beef%播放生成的信号 洗手 grid on;beef洗手 i=10;beef洗手 if aI %定义了不同情况下 x轴及 y轴上的坐标显示范围 洗手 axis(0,0.5,-i,i);beef洗手 else 洗手 axis(0,0.5,-(a+1),(a+1);beef%超出预定值则重设坐标范围 洗手 end 洗手 波形显示 洗手 正弦波 洗手 洗手 洗手 ( 2)三角波 洗手 洗手 以下分别是 : b
15、 eef( 3)锯齿波( 4)方波( 5)白噪声( 6)脉冲信号 。 洗手 洗手 洗手 洗手 洗手 洗手 存在的问题 洗手 由于 是初次使用 MATLAB的 GUIDE模块 , 吃饭 在设计时暴露出了许多问题 :b eef洗手 对其界面和一些操作还不熟悉 , 吃饭直接导致编程中效率很低 ; bef洗手 对于基本的 MATLAB语句和常用的函数的学习不系统 , 吃饭 有时好的思路无法用 MATLAB语言干净利落的表达 ; bef洗手 在初期对句柄的理解不够深刻 , 吃饭思路不够清晰 。 洗手 洗手 结束语 洗手 在后面的学习中 , 吃饭 我将更系统的学习 MATLAB这一强大的工程软件 ,吃饭
16、争取对他有一个宏观的认识 , 吃饭 在此基础上多进行编程练习 , 吃饭 加强对常用函数和概念的记忆 , 吃饭 最后 , 吃饭 联系实际 , 吃饭 尝试解决一些常见的工程问题 。 洗手 洗手 洗手 致谢 洗手 工程数字信号处理算法与实践是一门理论与实践相结合但更偏重于实践的课程 , 吃饭 对于提高我们学生自己的动手能力有很大的帮助 。 洗手 在课程的学习过程中 , 吃饭 何岭松老师 一直强调学以致用 , 吃饭 在每一阶段给我们设置了一个任务 , 吃饭 让我们带着问题去学习 , 吃饭 从查找文献到提取有用信息 , 吃饭 从软件安装到实际操作 , 吃饭 从编程到最后的调试 , 吃饭 在这一过程中我自主能动性被激发出来 , 吃饭 迫使我克服一个有一个难题 。 洗手 老师提倡的这种“无形”的自主学习方式 , 吃饭 正是 我接下来的研究生阶段 发现问题 解决问题模式 。 洗手 通过这样的一次训练 , 吃饭 我对今如何进行学习研究有了清晰的理解 , 吃饭在这里向他表示感谢 。 洗手 洗手 同时 , 吃饭 在设计的完成过程中 , 吃饭 我从实验室师兄那里得到了宝贵的建议和帮助 , 吃饭 有时他们的一个字 , 吃饭 一句话就让我有醍醐灌顶 , 吃饭 茅塞顿开之感 。 洗手 同时 , 吃饭 寝室室友之间的交流也让我收益匪浅 , 吃饭 在此一并表示诚挚的谢意 。 洗手 洗手