基于MATLAB的数字信号发生器报告剖析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MATLAB的数字信号发生器设计报告
摘要:数字信号发生器是基于软硬件实现的一种波形发生仪器。在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和,而这些简单信号皆可由数字信号发生器模拟产生,因此它在工程分析和实验教学有着广泛的应用。MATLAB是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令,在数字信号处理方面方便实用。本文介绍了使用MATLAB建立一个简单数字信号发生器的基本流程,并详细叙述了简单波形(正弦波、方波、三角波、锯齿波、白噪声)信号的具体实现方法。
关键字:MATLAB ,数字信号发生器
1前言
随着计算机软硬件技术的发展,越来越多现实物品的功能能够由计算机实现。信号发生器原本是模拟电子技术发展的产物,到后来的数字信号发生器也是通过硬件实现的,本文将给出通过计算机软件实现的数字信号发生器。
信号发生器是一种常用的信号源,广泛应用于电子技术实验、自控系统和科学研究等领域。传统的台式仪器如任意函数发生器等加工工艺复杂、价格高、仪器面板单调、数据存储、处理不方便。以Matlab和LabVlEW为代表的软件的出现,轻松地用虚拟仪器技术解决了这些问题。
Matlab是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱(data acquisition toolbox)为实现数据的输入和输出提供了十分方便的函数和命令,利用这些函数和命令可以很容易地实现对外部物理世界的信号输出和输入。根据声卡输出信号的原理,采用Matlab软件编程,可以方便地输出所需要的正弦波、三角波、方波等多种信号,有效地实现信号发生器的基本功能。
2 方案设计
要设计的数字信号有正弦信号、方波信号、三角波、锯齿波、白噪声、脉冲信号。其中,前五种波形都可以利用MATLAB 提供的函数实现,并根据输入的幅值、相位、频率等信息进行调整。脉冲信号由自己编写程序实现,并以定义的时间节点控制脉冲出现的时刻。
2.1 正弦信号的实现
正弦波信号的数学表达式如2.1,
()sin 2y A ft πφ=+ 2.1
其中:A 为幅值;
f 为频率;
φ为相位。
在MATLAB 中,相应的数字信号可以由下式2.2计算,
()()sin 2y n t A fn t πφ∆=∆+ 2.2
式中时间变量t 可构造为一个一维数组,并由式2.3进行付值,
0:1/:0.5t cf = 2.3
其中:cf ——采样频率。
幅值、频率、相位、采样频率等在用户界面输入。在t 与y 的表达式都得到以后,用plot 二维作图函数获得波形显示。
2.2 方波信号实现
像正弦波一样,从用户界面获得幅值、频率、相位、采样频率等信息,用square 函数获得对应y 坐标值,用plot 绘图,格式如式2.4
(),y square t duty = 2.4
其中,duty ——占空比。
2.3 三角波和锯齿波的实现
这两种波形的y 坐标表达式皆要借助于sawtooth 命令。
Sawtooth(t)用于产生周期为2π,幅值从-1 ~+1的锯齿波,波形的斜率为1/π。
Sawtooth(t ,width)用于产生三角波,其中width 是取值介于0和1之间的一个参数,它决定了在一个周期中峰值的发生点。本设计中取width=0.5,可以获得标准形状的三角波。
完整y 坐标表达式如式2.5, ()()2/360,0.5y a sawtooth ft πφ=⋅+
2.5
3 硬件电路的工作原理
(1)图形界面设计
打开MATLAB ,新建一个空白的图形界面文件,计算需要添加的控件种类及个数并设计它们的布局。
(a ) 添加1个axes 控件,用于显示波形;
(b ) 添加5个static text 控件作为窗口说明使用;
(c ) 添加4个Slider 控件用于输入幅值、频率等信号信息;
(d ) 添加4个edit text 控件用于显示幅值、频率等信号信息;
(e ) 添加7个push button 空间用于各种操作的开始控制;
双击各个控件并修改其颜色、大小及string 属性。得到界面如下:
4软件编程
界面控件及布局创建完成以后,自动生成包含各控件回调函数在内的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
axis([0,0.5,-i,i]);
else
axis([0,0.5,-(a+1),(a+1)]);%超出预定值则重设坐标范围
end
5系统调试和结果分析
正弦波