matlab数字信号发生器与电子琴设计.docx

上传人:b****8 文档编号:10854169 上传时间:2023-02-23 格式:DOCX 页数:15 大小:481.40KB
下载 相关 举报
matlab数字信号发生器与电子琴设计.docx_第1页
第1页 / 共15页
matlab数字信号发生器与电子琴设计.docx_第2页
第2页 / 共15页
matlab数字信号发生器与电子琴设计.docx_第3页
第3页 / 共15页
matlab数字信号发生器与电子琴设计.docx_第4页
第4页 / 共15页
matlab数字信号发生器与电子琴设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

matlab数字信号发生器与电子琴设计.docx

《matlab数字信号发生器与电子琴设计.docx》由会员分享,可在线阅读,更多相关《matlab数字信号发生器与电子琴设计.docx(15页珍藏版)》请在冰豆网上搜索。

matlab数字信号发生器与电子琴设计.docx

matlab数字信号发生器与电子琴设计

数字信号发生器和数字电子琴

摘要Matlab是一个具有数值分析、、科学数据可视化和非动态系统的和仿真等功能的工程有效软件。

其易于利用的视窗环境,在专门大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式。

本文介绍了一种利用GUI工具箱,用Matlab实现虚拟数字信号发生器的设计。

关键词Matlab;信号发生器;数字电子琴

1概述

MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件。

能够进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,要紧应用于工程计算、操纵设计、信号处置与通信、图像处置、信号检测、金融建模设计与分析等领域。

图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采纳图形方式显示的运算机操作用户界面。

与初期运算机利用的命令行界面相较,图形界面关于用户来讲在视觉上更易于同意。

Matlab自带了壮大的GUl工具[1]。

在本文中,将利用Matlab的GUI工具,设计出数字信号发生器和数字电子琴。

信号发生器又称信号源或振荡器,是一种能提供各类频率、波形和输出电平电信号,经常使用作测试的信号源或鼓励源的设备,在生产实践和科技领域中有着普遍的应用。

按信号波形可分为正弦信号、函数(波形)信号、和随机信号发生器等四大类[2]。

各类波形曲线均能够用三角函数方程式来表示。

能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。

本文设计了一种能够产生正弦波、余弦波、方波、三角波、锯齿波、白噪声的虚拟数字信号发生器。

2技术线路

虚拟数字信号发生器设计的流程图如图:

图数字信号发生器流程图

在此基础上,将产生的数字信号写入声卡,即可播放出相应音阶的声音,实现电子琴的功能。

3实现方式

数字信号发生器

搭建GUI界面

图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采纳图形方式显示的运算机操作用户界面。

与初期运算机利用的命令行界面相较,图形界面关于用户来讲在视觉上更易于同意。

Matlab凭借其壮大的计算能力,系统集成能力和图形处置能力,其图形用户接口(GUI)也日趋成熟。

MatlabGUI的控件丰硕,挪用方便,可视化成效美观。

GUI能够使得参数的输入和结果的输出可视化更高,操作加倍方便。

本次设计利用GUI搭建的界面如下图。

图数字信号发生器界面

编写M文件

搭建好界面后保留,系统将自动生成M文件与Fig文件,而且M文件内部已经依照GUI界面中组件的类别,自动生成了相应的模块挪用函数。

依照需要,咱们对生成的各个函数进行补充,完成函数功能的实现及各个函数的挪用关系。

本次实验要紧对控件的回调函数(callback)下写入相应的程序。

下面这段程序(部份程序)实现了函数依照用户的输入生成不同的正弦波、余弦波、三角波、方波等,最终将波形显示在座标轴1上。

其中,sliderA,editA输入幅值,当用户在输入一个新的幅值时,A为对应幅值变量,发生相应改变,并判定选择的是何种波型,然后对相应的波型的幅值进行修改,最终通过画图函数的挪用将新波形显示在图上。

同理,当咱们慢慢改变频率和相位时,波形也会对应发生转变,在此再也不赘述。

幅值转动条的回调函数如下:

functionsliderA_Callback(hObject,eventdata,handles)

a=get(hObject,'value');

set,'string',a);

幅值可变文本的回调函数如下:

functioneditA_Callback(hObject,eventdata,handles)

val=get(hObject,'string');

a=str2num(val);

if~isempty(a)&&(val>=0&val<=20)

set,'value',a)

end

下拉菜单回调函数如下:

functionpopupmenu1_Callback(hObject,eventdata,handles)

A=str2num(get,'string'));

f=str2num(get,'string'));

d=str2num(get,'string'));

fs=5000;

T=;

dt=fs;

N=T/dt;

t=linspace(0,T,N);

s=get(hObject,'value');

switchs

case1

y=A*sin(2*pi*f*t+d);

axes;

plot(t,y);

case2

y=A*cos(2*pi*f*t+d);

axes;

plot(t,y);

case3

y=A*square(2*pi*f*t+d)

axes;

plot(t,y);

case4

y=A*sawtooth(2*pi*f*t+d,;

axes;

plot(t,y);

case5

y=A*sawtooth(2*pi*f*t+d,1);

axes;

plot(t,y);

case6

y=sqrt

(1)*randn(1,N)

axes;

plot(t,y);

end

设计结果

通过数字信号发生器,产生需要的信号,如以下图所示:

图正弦波1

图正弦波2

图余弦波

图方波

图三角波

图锯齿波

图白噪声

数字电子琴

搭建GUI界面

电子琴GUI界面搭建如下图:

图数字电子琴

编写M文件

波形选择回调函数:

a=get(hObject,'value');

音量大小通过波形的幅值反映,按键对应的波形的回调函数(以按键1为例)如下,其中edit2,slider2为音量操纵:

functionpushbutton1_Callback(hObject,eventdata,handles)

globala;

axes;

a=get(handles.popupmenu1,'value')

Fs=44100;

strA=get,'string');

A=str2double(strA);

str=get,'Value');

set,'string',str);

dt=Fs;

t=0:

dt:

;

ifa==1

y=A*sin(2*pi*131*t);

plot(t,y);

wavplay(y,Fs);

axis([0-100100]);

end

ifa==2

y=A*cos(2*pi*131*t);

plot(t,y);

wavplay(y,Fs);

axis([0-100100]);

end

ifa==3

y=A*square(2*pi*131*t);

plot(t,y);

wavplay(y,Fs);

axis([0-100100]);

end

ifa==4

y=A*sawtooth(2*pi*131*t,;

plot(t,y);

wavplay(y,Fs);

axis([0-100100]);

end

ifa==5%¾â³Ý²¨

y=A*sawtooth(2*pi*131*t,1);

plot(t,y);

wavplay(y,Fs);

axis([0-100100]);

end

设计结果

通过鼠标,别离点击按键1-7,产生的波形如下所示。

调剂音量,可改变信号幅值。

图电子琴1

图电子琴2

图电子琴3

图电子琴4

图电子琴5

图电子琴6

图电子琴7

4存在的问题

本次设计尽管大体实现了信号发生器和电子琴的要求,可是仍是存在一些不足。

比如信号发生器功能简陋,不能输入阶跃信号、脉冲信号等,不能完成有效值、平均值、幅值的转换显示等。

数字电子琴的音阶也只是最大体的7个音阶,且不能导入音频文件,利用电子琴播放等,这些都是以后的学习中能够改良的地址。

参考文献

[1].张志涌等.精通MATLAB[M].北京:

北京航空航天大学出版社,2003.

[2].车子萍.基于Matlab的虚拟信号发生器设计[J].电脑学习,.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1