基于MATLAB 的信号发生器设计

基于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 ), 输出选择区,以及输出控制区。界面如下图所示。

v2-c367365c849d1ed5fa664c75af5e912f_b.jpg


信号生成

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




正弦波( sin )

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


v2-7ee56893ea80db1c4cee309193a473bb_b.jpg


  • 数组表示:

 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


v2-1fee8386471dbc2096d6fdd524e86635_b.jpg


  • 数组表示:

 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



v2-0818b2dca8f15395b2e2ffb9983e232b_b.jpg



  • 数组表示:

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

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

1/frequency));



三角波( triangle )

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


v2-175b3cea15faae283f148ee230d7a95b_b.jpg


  • 数组表示:

 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


v2-af938f9cb0d141e7b2854cfcb0613026_b.jpg



  • 数组表示:

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

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



噪声波( random )

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


v2-a60d35102e753959837625ad336fce95_b.jpg


  • 数组表示:

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

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


v2-351a120f9489463280d8a1ed51c713ba_b.jpg

频变波( 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



v2-32342de25473009e85794526d0414a8f_b.jpg


说明:本选项是信号发生器的扩展功能之一,通过菜单区操作可以读取保存为图像和数据的文件,输出信号到输出板卡上。


信号输出

  • 这个部分,就是把上一部分生成的数组输出到输出板卡上。目前本信号发生器只支持 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来实现一个信号发生器,利用了虚拟仪器的灵活性,实现具有除信号发生器一般功能外,还能通过文件或图形获取波形数据,以实现任意波形的生成的信号发生器。
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MATLAB信号发生器GUI设计是使用MATLAB编程语言创建一个图形用户界面(GUI),用于生成不同类型信号。该GUI具有用户友好的界面,提供了用户可以选择的不同信号类型、频率、幅度和时长等参数。 设计该GUI的步骤如下: 1. 创建GUI窗口:使用MATLAB的GUIDE工具,在窗口上添加按钮、滑动条和显示区域等控件,用于设置信号参数并显示信号。 2. 设置信号参数:在GUI上添加不同的控件,如下拉菜单、滑动条和文本框等,用于选择信号类型、频率、幅度和时长等参数。通过设置控件的属性,将用户选择的参数保存到变量中。 3. 生成信号:根据用户选择的参数,使用MATLAB编程语言生成相应类型信号。可以使用MATLAB内置的信号生成函数,如sin、cos等,也可以自定义函数来生成特定类型信号。 4. 显示信号:将生成的信号数据在GUI上的显示区域中显示出来。可以使用MATLAB的绘图函数,如plot、stem等,将信号数据绘制成波形图或频谱图。 5. 添加功能:根据需要,可以添加其他功能,如播放生成的信号、保存信号数据等。通过使用MATLAB的音频处理函数和文件处理函数,可以实现这些功能。 6. 测试和调试:在完成GUI设计后,进行测试和调试,确保功能正常运行。可以使用MATLAB的调试工具来检查程序中的错误和问题。 通过上述步骤,就可以设计一个MATLAB信号发生器GUI,使用户可以方便地选择和生成所需的信号,并进行必要的操作和处理。这样的GUI可以在教学、研究和工程应用中发挥重要的作用,提高信号处理的效率和可视化程度。 ### 回答2: MATLAB信号发生器GUI设计是基于MATLAB的图形用户界面(GUI)开发工具箱来实现的。这个工具箱提供了一系列的函数和工具,用于创建可交互式的GUI应用程序。 在信号发生器GUI设计中,我们可以使用MATLAB库中提供的信号处理函数来生成各种类型信号,如正弦波、方波、三角波等。我们可以将这些信号的参数,如频率、振幅等作为输入项,在GUI界面中使用滑块、输入框等组件来调节这些参数。 首先,我们需要创建一个GUI窗口,可以通过使用MATLAB中的"figure"函数来实现。然后,在窗口中添加各种GUI组件,如滑块、输入框和按钮等,用于调节信号参数和控制信号的生成。 接下来,我们可以使用回调函数来实现滑块和输入框的交互。当用户改变滑块的值或者在输入框中输入新的值时,会触发回调函数,更新所生成信号的参数。 最后,在GUI界面中添加一个按钮,用于控制信号的开始和停止。通过编写相应的回调函数,我们可以在用户点击按钮时开始或停止信号的生成,并将生成的信号显示在一个画图区域中。 总而言之,MATLAB信号发生器GUI设计提供了一个友好的界面,方便用户进行信号的生成和参数调节。通过使用MATLAB的GUI开发工具箱,我们可以很容易地实现一个功能强大的信号发生器应用程序。 ### 回答3: MATLAB信号发生器GUI设计是一个用于生成和调整各种类型信号的图形用户界面。通过这个GUI,用户可以轻松地自定义和生成各种信号。 首先,设计GUI界面,可以使用MATLAB中的GUIDE工具进行可视化设计。用户可以根据需要添加各种控件,如按钮、滑块、文本框和图形区域等。这些控件将用于设置信号的参数和显示生成的信号。 接下来,为每个控件添加回调函数。这些回调函数将实现与信号生成相关的功能。例如,在滑块控件上添加回调函数,用户可以通过滑动滑块来改变信号的频率或振幅。在文本框控件上添加回调函数,用户可以手动输入信号参数。同时,还可以添加按钮控件来启动或停止信号的生成。 在回调函数中,可以使用MATLAB中的信号处理函数或编写自定义的算法来生成信号。例如,可以使用sin或cos函数生成正弦或余弦信号,使用square函数生成方波信号,或者使用自定义的公式生成周期性或非周期性信号。 在信号生成过程中,还可以将生成的信号实时显示在图形区域中。用户可以通过图形界面直观地观察信号的波形和频谱等信息。 此外,还可以在GUI中添加功能,如保存生成的信号数据、导入外部信号数据进行处理等。 最后,进行GUI的测试和优化,确保信号生成的准确性和界面的稳定性。 综上所述,MATLAB信号发生器GUI设计通过图形界面实现信号生成和参数调整的功能,为用户提供了一个方便易用的工具,用于生成和控制各种类型信号

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值