基于MATLAB 的信号发生器设计

一、前言

  • 目前, MATLAB 已经广泛地应用于工程设计的各个领域,如电子、通信等领域,它已成为国际上最流行的计算机仿真软件设计工具。 MATLAB 不再仅仅是一个矩阵实验室,而是一种功能强大的的实用高级计算机编程语言。
  • Data Acquisition Toolbox 是MATLAB 自带的数据获取工具箱, 其中包含了许多有用的函数供用户调用,这些函数根据各自不同的功能大致可分为以下几组:数据获取对象的构造,获取和设置参数,执行,模拟输入 / 输出函数,数字输入/ 输出函数。在本次设计通用信号发生器的过程中,大量使用了以上函数,并采用两种不同的方式完成数 / 模转换的工作。

二、信号发生器的设计和实现

程序简介

  • 程序参考MATLAB 的Data Acquisition Toolbox 实现。在MATLAB 的GUI 设计中,有两种设计方式:利用 GUI 编辑器和编写M 文件。
  • GUI 是用户的操作界面,是选择波形、设定和修改波形参数、设定采样率、选择输出通道和运行、停止程序的人机交互接口。本程序的界面中,可选波形包括正余弦( sin ), Sa 波( sin

c ),方波( square ),三角波( triangle ),锯齿波( toot h ),噪声波( random ),频变波( chirp ),以及自定义波形

(读取图形和数据文件)。波形参数包括频率( frequency ), 幅度( amplitude ),直流偏置( offset ),初相位( phase ), 占空比( duty cycle ),频变方法( method ),频变时间

( target time ),初始频率( initial ( F )),目标频率

( target ( F ))等。因为 PCI-6024E 只有 2 路DAC ,所以输出通道的选择只有这 2 路,或者只输出其中的一路。运行、停止则是开始和停止计算波形、输出波形的过程。编写 M 文件来处理GUI 界面的事件的响应。

  • 本设计的独特之处在于输出通道的可选择性,可选择 NI-DAQ

( PCI-6024E ),声卡,或者并行等。考虑到信号幅度范围对于不同硬件也是不同的( PCI-6024E 是-10 ~ 10v ),超出范围的部分是无效的,程序同样会报错并停止运行。

  • 触发 start 按钮将使程序进入运行状态,这包括计算波形

(二维数组),绘制波形(在 PC 界面坐标系中),以及输出波形

(在选定的输出板卡中)。触发stop 按钮(运行状态时 start 按钮就转变为stop 按钮了)将停止程序的运行,以及数组数据输出到板卡上。

界面浏览

  • 本信号发生器的界面大致是有以下五个区域组成:菜单区,参数 设定区( output1 , output2 ),波形绘制( output1output2 ), 输出选择区,以及输出控制区。界面如下图所示。

信号生成

  • 信号生成,即是用数学方法将所选波形(连续信号)按采样率离散为数字序列,序列中的各个数字既是信号在采样率分之一时间间隔的采样值。再将各相邻采样点用短直线相连,即可近似还原出原波形。可见,同等情况下,采样率越高,信号的恢复程度越好。

正弦波( sin )

  • 正弦波参数如表 1 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • y= offset + amplitude

*sin(2*pi*frequency*t+phase*pi/180);

  • 说明: t 在 1 秒内有 samp 个均匀采样点, y 做为samp×1 的一维

数组输出到板卡的一个通道

Sa 波( sinc )

  • Sa 波参数如表 2 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • y=offset+amplitude*sin(2*pi*frequency*t+phase*pi/

180+eps)./ ( 2*pi*frequency*t+phase*pi/180+eps ) ;

  • 这里“ /” 用的是“ ./” ,表示数组中对应元素运算。为了2*pi*frequency*t+phase*pi/180 = 0 的情况表达式仍然有效, 加入无限小量“ eps” 。

方波( square )

  • 方波参数如表 3 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • y= offset + amplitude* sign(duty/100/ frequency -mod(t,

1/frequency));

三角波( triangle )

  • 三角波参数如表 4 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • y=(4*amplitude*frequency*mod(t,1/frequency)- 2*amplitude).*sign(mod(t1,1/frequency)-1/frequency/2)- amplitude+offset;
  • 上升和下降的占空比均为 50 %。

锯齿波( tooth )

  • 锯齿波参数如表 5 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • y1=2 *amplitude *frequency *mod(t,1/ frequency)- amplitude+ offset;

噪声波( random )

  • 噪声波参数如表 6 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • y=2* amplitude*(rand(1,length(t))-0.5)+ offset;
  • 说明: seed 为每个周期内的采样点数, t 在 1 秒内有 samp 个均匀采样点, y 做为 samp×1 的一维数组输出到板卡的一个通道。

频变波( chirp )

  • 频变波参数如表 7 所示。设采样率: samp
  • 数组表示:

 t=0:(1/samp):1;

  • method = linear 时
  • y=sin(2*pi*mod(t,tTime).*(iF+mod(t,tTime)*(tF-iF)/tTime));
  • method = log 时
  • y=sin(2*pi*mod(t,tTime).*mod(t,tTime)*exp(log(tF/iF))*iF/ tTime)
  • 说明: t 在 1 秒内有 samp 个均匀采样点, y 做为 samp×1 的一维数

组输出到板卡的一个通道。频率变化的方式不同,输出表达式也不同。

  • 注意: method 有两个选项: linear 和 log ;
  • 符号“ ./” 用于数组间运算。

自定义波( self-define )

  • 自定义波参数如表 8 所示。设采样率: samp
  • 说明:本选项是信号发生器的扩展功能之一,通过菜单区操作可以读取保存为图像和数据的文件,输出信号到输出板卡上。

信号输出

  • 这个部分,就是把上一部分生成的数组输出到输出板卡上。目前本信号发生器只支持 PCI-6024E 和winsound 。因为 MATLAB 对 PC 扩展板卡的支持十分全面,集成化,所以驱动和 winsound 的代码是非常相似的。

硬件设定(板卡选择和通道选择

  • 板卡选择
  • 源代码段:
  • out = daqhwinfo;
  • device=out.InstalledAdaptors
  • set(handles.device,'string',device);
  • 说明: daqhwinfo.InstalledAdaptors 包含安装的硬件板卡的信息,将其加入作为下拉列表框的选项。

通道选择

  • 源代码段:
  • if ~strcmp(get(handles.channel1,'checked'),'on')

y1=zeros(1,samp+1);

  • end
  • if ~strcmp(get(handles.channel2,'checked'),'on')

y2=zeros(1,samp+1);

  • end
  • 说明:通道 1 或 2 不输出其实就是把输出数组置为全 0 。

PCI-6024E 相关代码

  • 源代码段:
  • AO = analogoutput('nidaq',1);
  • addchannel(AO,0:1);
  • set(AO,'SampleRate',samp)
  • set(AO,'RepeatOutput',inf)
  • putdata(AO, [y1' y2'])
  • start(AO)

 …………

  • stop(AO)
  • delete(AO)
  • clear AO
  • 说明: analogoutput 指定输出板卡,( PCI-6024E )的 ID 是 1 ; addchannel 加入通道;接着设定采样率,重复次数,; start 启动输出; stop 停止输出, delete 删除输出。
  • 注意: putdata 指定输出信号时要用列数组,如上 [y1' y2'] 。

winsound 相关代码

  • 源代码段:
  • AO = analogoutput('winsound');
  • addchannel(AO,1:2);
  • set(AO,'SampleRate',samp)
  • set(AO,'RepeatOutput',inf)
  • putdata(AO, [y1' y2'])
  • start(AO)

…………

  • stop(AO)
  • delete(AO)
  • clear AO

三、结束语

  • 本设计的主要内容就是基于 MATLAB来实现一个信号发生器,利用了虚拟仪器的灵活性,实现具有除信号发生器一般功能外,还能通过文件或图形获取波形数据,以实现任意波形的生成的信号发生器。

基于MATLAB 的信号发生器设计相关推荐

  1. 基于 MATLAB 的信号发生器设计

    基于 MATLAB 的信号发生器设计 虚拟仪器能充分利用现有计算机资源,通过配以独特设计的软硬件,实现普通仪器的全部功能以及一些在普通仪器上无法实现的功能的软件或程序.本设计的主要内容就是基于 MAT ...

  2. matlab设计长度为50的滤波器,实验5 基于Matlab的数字滤波器设计

    实验五 基于Matlab 的数字滤波器设计 实验目的:加深对数字滤波器的常用指标和设计过程的理解. 实验原理:低通滤波器的常用指标如下所述,其典型规格如下: ?? ????????≤≤≤≤+≤≤-πδ ...

  3. 实验matlab滤波器心得,实验报告基于MATLAB的数字滤波器设计

    <实验报告基于MATLAB的数字滤波器设计>由会员分享,可在线阅读,更多相关<实验报告基于MATLAB的数字滤波器设计(5页珍藏版)>请在人人文库网上搜索. 1.实验78 基于 ...

  4. 基于单片机的信号发生器设计

    基于单片机的信号发生器设计 摘 要 在电子产品调试和测量领域,常常需要有信号种类多.精度高且频率.幅度等信号参数方便可调的信号源.尤其随着电子.通信.网络行业的发展,频段的分布日趋密集,更要求有高精度 ...

  5. 圆形上下挤压 matlab,基于Matlab的GUI设计双螺杆挤压机系统仿真软件

    基于Matlab的GUI设计双螺杆 挤压机系统仿真软件 王玉德,张文孝,韩翠玲 (1.大连水产学院,辽宁大连116023;2.山东省机电学校,山东兖州272105) 1 1 2 DesignofSim ...

  6. 基于matlab数字滤波器设计,毕业设计 基于MATLAB的数字滤波器设计

    毕业设计 基于MATLAB的数字滤波器设计,共55页,19284字 摘 要 本文分别研究了在MATLAB环境下IIR数字滤波器和FIR数字滤波器的设计方法及实现方法,并进行图形用户界面设计,以显示本文 ...

  7. 反激式开关电源仿真 基于Matlab simulin仿真软件设计

    5V2A反激式开关电源仿真 基于Matlab simulin仿真软件设计,采用电流电压双闭环反馈PID控制方式,输出电压恒定5V 输入85-265AC 结构:单向桥式?反激变换器 详细的反激Mathc ...

  8. 机械设计matlab,基于MATLAB的机械设计方法分析

    随着计算机技术的不断发展,一系列计算软件得到了开发和应用,继而为机械设计带来了新的发展方向.而MATLAB作为强大的数学计算软件,拥有可靠性强.功能多和操作方便等多种优点,所以被广泛地应用在机械设计中 ...

  9. matlab火控雷达,基于MATLAB的GUI设计伺服系统仿真软件

    ·2003年 3月 火控雷达技术 第 32卷 j ' . 基于 MATLAB的GUI设计伺服 系统仿真软件 王 唪 李 忱 .. (南京 电子技术研 究所 南京 210013) 一 _ . , ● [ ...

最新文章

  1. 浅谈电量传感器在数据中心不间断电源中的应用
  2. linux创建mysql视图,MySQL视图入门浅析
  3. OpenGL创建hello Window窗口
  4. Jmeter(一)-精简测试脚本
  5. 打开Excel显示:新建EXCEL文件格式和扩展名不匹配(原因+解决办法)
  6. 深度学习数据集中数据差异大_使用差异隐私来利用大数据并保留隐私
  7. LeetCode 1390. 四因数
  8. 【转】贝塞尔曲线介绍
  9. Android开发之如何实现日历控件
  10. (二)golang数组和切片
  11. javaweb + websocket实现客户端
  12. python设计一个爱心_python画一个玫瑰和一个爱心
  13. 数据库开发基础-教案-3-认识数据库备份和事务日志备份
  14. js双击事件条件触发_js页面触发chargeRequest事件和Nginx获取日志信息
  15. 转载:Visio2013的密钥
  16. 利用JDK发布webService实例
  17. 从小白到架构师原来是这样修炼出来的
  18. 考点图文详解 - 网络管理(第十一章)
  19. webpack中对CSS压缩
  20. 美国国土安全部:Log4j 漏洞的影响将持续十年或更久

热门文章

  1. CSP-J第二轮真题 分类题单
  2. 5.3 Python图像处理之图像编码-算术编码
  3. 给PyQt5 exe程序设置自启动(Windows)
  4. 简单的小学生试卷组卷系统
  5. c 语言代码 读入一个浮点数,c – 从.txt文件读取浮点数
  6. 数据挖掘:实用案例分析 下载_实用!变频器选型误区 选型方法 案例分析 ?...
  7. Spring5框架基础详解(五)(JdbcTemplate概念和准备、jdbcTemplate操作数据库添加功能、修改和删除功能、查询功能)
  8. 外星人dl踩坑记01——双系统
  9. 测绘中的各种坐标问题?
  10. [附源码]JAVA毕业设计医院医护人员排班系统(系统+LW)