*****************实践教学*******************题目:基于MATLAB的数字电子琴设计专业班级:姓名:学号:指导教师:成绩:摘要本次课设的任务是基于MATLAB设计一个数字电子琴,首先实现数字信号发生器的设计。
数字信号发生器是一种基于软硬件实现的波形发生器,可以实现各种基本波形的产生。
在工程的各种复杂信号是由这些基本信号叠加产生,因此它在工程分析和实验教学中有着广泛的应用,可用MATLAB实现。
MATLAB是一个数据分析和处理功能十分强大的工程实用软件,它的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令,在数字信号处理方面方便实用。
本文首先详细介绍了基于MATLAB的数字发生器的设计过程,实现了简单波形(正弦波、方波、三角波、锯齿波、白噪声、脉冲、阶跃)信号的具体实现方法。
其次介绍了利用该数字信号发生器产生的正弦波信号和声卡设计的简易电子琴。
关键词:MATLAB;数字信号发生器;简易电子琴目录前言 (1)一、数字信号发生器 (2)1.1图形用户界面的简介 (2)1.2设计流程 (2)1.3波形实现的基本原理 (3)二、电子琴的实现 (5)2.1简易数字电子琴的简介 (5)2.2实现原理 (5)三、基于MATLAB的仿真及结果分析 (6)3.1 GUI界面 (6)3.2编写M文件 (7)总结 (14)参考文献 (14)附录 (15)致谢 (22)前言MATLAB(矩阵实验室)是Matrix Laboratory的缩写,是一种用于算法开发、数据可视化、数据分析以及数值计算的高级计算机语言和交互式环境。
MATLAB 可以进行矩阵运算、绘制函数图像和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面,可在图形用户界面内根据需要搭建图形,并对控件的回调函数进行编写,完成最完整的GUI界面编辑即可运行。
本文主要利用MATLAB的图形用户界面设计数字信号发生器,在数字信号发生的基础上实现简易电子琴的设计。
信号发生器又称信号源或振荡器,是一种能提供各种频率、波形和输出电平电信号的仪器,数字信号发生器只是信号发生器的一种,在生产实践和科技领域中有着广泛的应用。
信号发生器按信号波形可分为正弦信号、函数(波形)信号、脉冲信号和随机信号发生器等四大类。
能够产生多种波形,如正弦波、三角波、锯齿波、矩形波(含方波)、阶跃信号、脉冲信号的电路被称为函数信号发生器。
本文设计了一种基于MATLAB图形用户界面的可以产生正弦波、方波、三角波、锯齿波、白噪声、脉冲信号、阶跃信号的虚拟数字信号发生器。
一、数字信号发生器1.1图形用户界面的简介图形用户界面即Graphical User Interface,简称GUI,又称图形用户接口。
Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
MATLAB的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可产生丰富的内容。
对图形用户界面的操作一般有两个部分,首先按照设计的原理、要求,根据需要选择适当的图形对象搭建合理的GUI界面;然后对每个控件的回调函数在M文件内进行编写,使搭建的GUI界面能够运行。
数字信号发生器的设计所使用的工具即GUI界面,用到的图形对象有pushbutton、Aexs、Slider、Static Text、Edit Text。
模拟了七种信号:正弦波、方波、三角波、阶跃信号、斜波信号、锯齿波以及白噪声信号。
具体的实现原理如下。
1.2设计流程根据设计的要求分析出数字信号发生器的GUI界面构图,然后在MATLAB 的workplace界面中输入guide,打开GUI界面。
在GUI界面中搭建好具体的数字信号发生器的界面,并对每个控件的回调函数进行编写、保存M文件。
运行,若结果正确,再同一个GUI界面中搭建好电子琴的GUI界面,利用数字信号发生器产生的正弦波,对电子琴每个控件的回调函数进行编写、保存M文件。
运行,观察仿真结果。
若数字信号发生器的仿真结果不正确,检查控件的回调函数,修改并保存M文件,再次运行观察仿真结果。
具体的设计流程图如下:1.3波形实现的基本原理1.3.1正弦波的实现正弦信号的数学表达式如下:)2sin()sin(ϕπϕ+=+=ft A wt A y (1.1)其中:A 为幅值;f 为频率;φ为相位。
在MATLAB 中,由于处理对象均是离散的数字信号,将时间变量离散化并构造成一个一维数组用0.1:/1:0s f t = 其中:fs 为采样频率。
但s f 的值不能太大,否则波形显示会很慢。
相应的正弦波信号的数字信号表达式为)2sin()(ϕπ+∆=∆t fn A t n y (1.2)幅值、频率、相位参数可以由用户界面上的滑动条或编辑框输入。
在分别得到t 与y 的离散值后,用plot 作图函数即可获得相应波形显示。
1.3.2方波信号的实现方波信号的数学表达式为),(duty t square y = (1.3)该式可直接生成一个周期为2π,峰值为1±,占空比为duty 的方波信号,duty 的默认值为50%。
在MATLAB 中可得到幅值、频率、相位可调的方波信号函数)2(ϕπ+=ft Asquare y (1.4)1.3.3三角波信号的实现在MATLAB 中,可以用函数sawtooth 直接生成一个三角波信号,该函数可生成一个周期为2π,峰值为1±,最大值出现在2width π⨯位置的三角波。
利用该函数,可得到幅值、频率、相位可调的三角波信号函数)2(ϕπ+=ft Asawtooth y (1.5)1.3.4锯齿波信号的实现由于锯齿波信号与三角波信号相似,所以将sawtooth 函数中的width 参数值设为1,可得到锯齿波。
该函数得到的幅值、频率、相位可调的锯齿波信号函数)1,2ϕπ+=ft Asawtooth y ( (1.6)1.3.5脉冲信号的实现由于脉冲信号与方波信号波形相似,用方波信号函数square 函数为基础,将其函数值加1,可得到最大值为2,最小值为0的脉冲波形,原函数的duty 参数可用来调节脉冲的宽度。
用该函数,得到幅值、频率、相位可调的脉冲信号函数2/)1)1,2(++=ϕπft square A y (。
(1.7)1.3.6阶跃信号的实现由于阶跃信号比较特殊,可用函数直接表示,其函数表达式为)}()(0{00t t A t t y >+<= (1.8)1.3.7白噪声信号的实现白噪声信号是指功率谱密度在整个频域内均匀分布的噪声。
白噪声的实现可借助于MATLAB 中的randn 函数,它的功能是产生一个均值为0,标准差为1的随机数列或矩阵函数,可得到一个均值为0,标准差为a 的fs 维的随机矩阵。
二、电子琴的实现2.1简易数字电子琴的简介在设计界面中包含A、B、C、D、E、F、G共7个琴键,由于低音频率区分不是很明显,此次课设选择的是中音频率,其中每个按键对应一个频率的正弦波信号,各按键对应的信号频率分别为392、440、494、523、587、659、698、784Hz。
当用鼠标按下相应的键时发声,松开时发声停止,然后将数字信号写入声卡的缓冲区,由声卡播放出相应的声音。
当用鼠标按下对应的键时即可发出相应频率的声音。
2.2实现原理电子琴的实现基于之前设计的数字信号发生器,选择数字发生器产生的正弦波信号作为发声及显示波形,由回调函数和数字信号发生器结合起来,实现对波形的调用。
每个键对应一定的频率,在各个键的回调函数中设置好频率及频谱显示,实现每个键有自己特定频率的功能,为了使最终仿真结果更好,选择音阶中音调高的频率作为调试频率。
当键按下的时候,首先由相应的键和数字信号关联起来,随后将数字信号写入声卡的缓冲区,由声卡发出相应频率的声音,并显示波形及对应频率的频谱图,当键松开时声音即停止。
此次电子琴的设计实现了正弦波显示、频谱显示以及发声的功能,从而实现虚拟电子琴的模仿功能。
具体的实现流程图如下:开始打开MATLAB搭建电子琴的GUI界面执行并观察仿真结果结束图2.1 电子琴的实现流程图三、基于MATLAB的仿真及结果分析3.1 GUI界面3.1.1搭建数字信号发生器的GUI界面搭建的GUI界面如下图3.1:图3.1 数字信号发生器的GUI界面3.1.2电子琴的GUI界面。
搭建的数字电子琴GUI界面如图3.2所示:图3.2 数字电子琴的GUI界面G该界面主要由琴键组成,每个按键对应一定的频率,模拟电子琴的发声功能,它的波形显示及频谱图在数字信号发生器中。
3.2编写M文件3.2.1数字信号发生器的M文件(1)正弦信号的实现由正弦信号的数学表达式可知在程序中用到的具体表达式为ftpia=(3.1)y+*q*sin())/360*2(将时间变量离散化并构造成一个一维数组,要求采样频率不能太大,否则波形显示会很慢(2)方波信号的实现用square函数直接生成一个方波信号,程序中使用的具体函数为)50,***2*t f pi square A y (= (3.2) (3)三角波的实现函数sawtooth 直接生成一个三角波信号,程序中用到的具体实现函数为)5.0,***2(*t f pi sawtooth A y = (3.3) (4)锯齿波信号的实现具体的函数实现形式为)1,***2(*t f pi sawtooth A y = (3.4) (5)脉冲信号的实现抽样频率为8000,时间范围为[0,1],坐标抽为[0,a+1]。
得到的幅值、频率、相位可调的脉冲信号函数。
具体的函数2/)11),360/*(**2(*++=q t f pi square a y ( (3.5)(6)阶跃信号的实现0t 取1,A 取1,t 取[0,2π],时间间隔为π/100。
阶跃信号的函数表达式为)}()(0{00t t A t t y >+<= (3.6)(7)白噪声信号的实现白噪声是指功率谱密度在整个频域内均匀分布的噪声。
白噪声的实现可借于MATLAB 中的randn 函数,产生一个均值为0,标准差为1的随机数列或矩阵该函数可得到一个均值为0,标准差为a 的fs 维的随机矩阵。
)5.0,***2(*t f pi sawtooth A y = (3.7)3.3仿真结果数字信号发生器的仿真结果如下: (1)正弦波的仿真结果图3.3 数字信号发生器的正弦波波形(2)方波信号的仿真结果图3.4 方波信号的波形(3)三角波信号仿真结果图3.5 三角波信号的波形(4)阶跃信号仿真结果图3.6 阶跃信号的仿真结果(5)斜波信号图3.7 斜波信号的仿真结果(6)锯齿波信号的仿真结果图3.8 阶跃信号的仿真结果(7)白噪声仿真结果(1)按键A的仿真结果图3.10 按下A键,电子琴演奏时的效果(2)按键B的仿真结果图3.11 按下B键,电子琴演奏时的效果(3)按键C的仿真结果图3.12 按下C键,电子琴演奏时的效果总结本次的课程设计的任务是基于MATLAB设计一个数字电子琴,首先设计一个数字信号发生器。