基于 MATLAB 的数字信号发生器

基于 MATLAB 的数字信号发生器

摘 要:数字信号发生器是基于软硬件实现的一种波形发生仪器。在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和,而这些简单信号皆可由数字信号发生器模拟产生,因此它在工程分析和实验教学有着广泛的应用。MATLAB 是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令,在数字信号处理方面方便实用。本文介绍了使用 MATLAB 建立一个简单数字信号发生器的基本流程,并详细叙述了简单波形(正弦波、方波、三角波、锯齿波、白噪声)信号的具体实现方法。

关键字:MATLAB ,数字信号发生器

概述

随着计算机软硬件技术的发展,越来越多现实物品的功能能够由计算机实现。信号发生器原本是模拟电子技术发展的产物,到后来的数字信号发生器也是通过硬件实现的,本文将给出通过计算机软件实现的数字信号发生器。

信号发生器是一种常用的信号源,广泛应用于电子技术实验、自控系统和科学研究等领域。传统的台式仪器如任意函数发生器等加工工艺复杂、价格高、仪器面板单调、数据存储、处理不方便。以 Matlab为代表的软件的出现,轻松地用虚拟仪器技术解决了这些问题。

Matlab 是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱(data acquisition toolbox)为实现数据的输入和输出提供了十分方便的函数和命令,利用这些函数和命令可以很容易地实现对外部物理世界的信号输出和输入。根据声卡输出信号的原理, 采用Matlab 软件编程,可以方便地输出所需要的正弦波、三角波、方波等多种信号,有效地实现信号发生器的基本功能。

设计原理

要设计的数字信号有正弦信号、方波信号、三角波、锯齿波、白噪声、脉冲信号。其中,前五种波形都可以利用 MATLAB 提供的函数实现,并根据输入的幅值、相位、频率等信息进行调整。脉冲信号由自己编写程序实现,并以定义的时间节点控制脉冲出现的时刻。

设计方法

  1. 图形界面设计

打开MATLAB,新建一个空白的图形界面文件,计算需要添加的控件种类及个数并设计它们的布局。

  1. 添加 1 个axes 控件,用于显示波形;
  2. 添加 5 个static text 控件作为窗口说明使用;
  3. 添加 4 个Slider 控件用于输入幅值、频率等信号信息;
  4. 添加 4 个edit text 控件用于显示幅值、频率等信号信息;
  5. 添加 7 个push button 空间用于各种操作的开始控制; 双击各个控件并修改其颜色、大小及string 属性。得到界面如下:

v2-11ff5f452dc60c67150ae2825a0c54c9_b.jpg


  1. 各控件对应的回调函数的编辑

界面控件及布局创建完成以后,自动生成包含各控件回调函数在内的m 文件。点击保存时可以修改fig 及m 文件名。系统自动生成的m 文件包括:

function varargout = signalgenerator(varargin)function signalgenerator_OpeningFcn(hObject, eventdata, handles, varargin) function varargout = signalgenerator_OutputFcn(hObject, eventdata, handles

以及各个控件对应的回调函数的框架,如:


function a_Callback(hObject, eventdata, handles)等等。


在前面已经介绍了各个波形的实现原理及方法,现仅以正弦函数的实现为例介绍回调函数的使用及编辑。

回调函数即在一定的操作下自动执行的指令代码。注意回调函数中定义的变量只在其内部有效。正弦波按钮的回调函数如下:

% --- Executes on button press in pushbuttonzhengxian.


function pushbuttonzhengxian_Callback(hObject, eventdata, handles)


% hObject handle to pushbuttonzhengxian (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB


% handles structure with handles and user data (see GUIDATA)



a=str2double(get(handles.editFUZHI,'String')); f=str2double(get(handles.editPINLU,'String')); x=str2double(get(handles.editXIANGWEI,'String')); cf=str2double(get(handles.editk,'String')); t=0:1/cf:0.5 ;%按设定的采样频率将时间均匀分割

y=a*sin(2*pi*(f*t+x/360));


plot(t,y);


wavplay(y);%播放生成的信号grid on;

i=10;


if a<I %定义了不同情况下x 轴及y 轴上的坐标显示范围

axis([0,0.5,-i,i]);


else


axis([0,0.5,-(a+1),(a+1)]);%超出预定值则重设坐标范围


end


波形显示

v2-4e8bcc353ec91a57b9ebf2002725ac2e_b.jpg

正弦波


v2-bc3612ec80fd88ab1651db284793f3ab_b.jpg

三角波

以下分别是:(3)锯齿波(4)方波(5)白噪声(6)脉冲信号。

v2-82f67f0e5339e383a0c68f8313b2e05b_b.jpg



v2-91917ab88864de3b44aba9e5b7317e2d_b.jpg

v2-85e5395e6802dd6f1a6e380a967467af_b.jpg


v2-48909bc5eb53787f8bd1e275c879c490_b.jpg


结束语

在后面的学习中,我将更系统的学习 MATLAB 这一强大的工程软件,争取对他有一个宏观的认识,在此基础上多进行编程练习,加强对常用函数和概念的记忆,最后,联系实际,尝试解决一些常见的工程问题。


参考文献


  1. 车子萍. 基于Matlab 的虚拟信号发生器设计. 电脑学习. 2016.2 No.1
  2. 薛年喜.MATLAB 在数字信号处理中的应用.[M] 北京:清华大学出版社,2015.
  3. 唐向宏,岳恒立等. MATLAB 及在电子信息类课程中的应用.[M] 北京:电子工业出版社,2015.8
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值