基于MATLAB的函数信号发生器
基于MATLAB的函数信号发生器
目的
函数信号发生器是基于软硬件实现的一种波形发生仪器。在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和,而这些简单信号可由函数信号发生器模拟产生,因此它在工程分析和实验教学有着广泛的应用。MATLAB是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令,在信号处理方面方便实用。本文介绍了使MATLAB建立一个简单函数信号发生器的基本流程,并详细叙述了简单波形(正弦波、方波、三角波、锯齿波、白噪声、脉冲)信号的具体实现方法。通过此次的设计对MATLAB有个更深刻的了解,熟练的使用MATLAB的GUI设计简单的界面程序。
算法原来和实现过程
该虚拟信号发生器的设计由GUI界面及其对应的程序组成。设计函数发生器有正弦信号、方波信号、三角波、锯齿波、白噪声、脉冲信号。其中,前五种波形都可以利用MATLAB提供的函数实现,并根据输入的幅值、相位、频率等信息进行调整。根据脉冲信号在某一时刻出现的一冲激特点,可由编写程序来实现。界面主要由MATLAB创建,之后编写界面所用的函数,从而实现函数信号发生器。
(1)正弦信号的实现
正弦波信号的数学表达式如(1)。
其中:
为幅值;ω为频率;
为相位。
在MATLAB中,幅值、频率、相位、在用户界面输入。y的表达式都得到以后,用plot二维作图函数获得波形显示。
(2)方波信号的实现
与正弦波一样,从用户界面获得幅值、频率、相位、采样频率等信息,用square函数获得对应y坐标值,用plot绘图,格式如(2)。
其中duty为占空比。
(3)三角波和锯齿波的实现
这两种波形的表达式皆要借助于sawtooth命令。Swathooth(t)用来产生周期为2π,幅值为从-1到+1的锯齿波。当width=1时,产生标准的锯齿波。其表达式如(3)。
其中A为幅值,ω为频率,φ为相位。
Sawtooth(t,width)用于产生三角波,其中width是取值介于0和1之间的一个参数,它决定了在一个周期中峰值的发生点。本设计中取width=0.5,可以获得标准形状的三角波。其表达式如(4)。
其中A为幅值,ω为频率,φ为相位。
(4)白噪声的实现
白噪声,是一种功率频谱密为常数的随机信号或随机过程。换句话说,此信号在各个频段上的功率是一样的,由于白光是由各种频率(颜色)的单色光混合而成,因而此信号的这种具有平坦功率谱的性质被称作是“白色的”,此信号也因此被称作白噪声。相对的,其他不具有这一性质的噪声信号被称为有色噪声。白噪声在数学处理上比较方便,因此它是系统分析的有力工具。一般,只要一个噪声过程所具有的频谱宽度远远大于它所作用系统的带宽,并且在该带宽中其频谱密度基本上可以作为常数来考虑,就可以把它作为白噪声来处理。在MATLAB中白噪声的实现借助于randn函数,它的功能是产生一个均值为零方差为1的随机高斯分布序列,其表达式如(5)。
(5)脉冲信号的实现
脉冲信号是指瞬间突然变化,作用时间极短的电压或电流。可以是周期性重复的,也可以是非周期性的或单次的。脉冲信号表现在平面坐标上就是一条有无数断点的曲线,也就是说在周期性的一些地方点的极限不存在。在MATLAB中脉冲信号可以由表达式(6)
其中A为幅值,在t=n的时候出现脉冲。
步骤
3.1搭建函数信号发生器GUI
图1函数信号发生器界面
3.2源码
- 正弦按钮的回调函数(CallBack)
function pushbuttonZHENGXIAN_Callback(hObject, eventdata, handles)
global p1;%定义全局变量
global p2;
global p3;
global p4;
global p5;
global p6;
p6=0;
p5=0; %按钮正弦波按下
p2=0;
p3=0;
p4=0;
p1=get(handles.pushbuttonZHENGXIAN,'value');%获取正弦按钮的当前值并赋给p1
j=get(handles.sliderfuzhi,'value');%获取幅值滚动条的值,且赋给j
k=get(handles.sliderpinlv,'value');%获取频率滚动条的值,且赋给k
l=get(handles.sliderxiangwei,'value');%获取相位滚动条的值,且赋给l
set(handles.editfuzhi,'string',num2str(j));%修改editfuzhi 的值为滚动条当前的值
set(handles.editpinlv,'string',num2str(k));%修改editpinlv 的值为滚动条当前的值
set(handles.editxiangwei,'string',num2str(l));%修改editxiangwei 的值为滚动条当前的值
A=str2num(get(handles.editfuzhi,'string'));%获取幅值选择框的值,并且赋给A
f=str2num(get(handles.editpinlv,'string'));%获取频率选择框的值,并且赋给f
P=str2num(get(handles.editxiangwei,'string'));%获取相位选择框的值,并且赋给P
t=0:0.001:8*pi;
y=A*sin(2*pi*f*t+P*2*pi); %正弦波表达式
plot(t,y,'r');
set(gca,'color',[0,1,0.5]); %设定显示的背景颜色,
axis([0,8*pi,-1.2,1.2]); %曲线的颜色同时给出坐标并显示网格
grid on;
方波、锯齿波、三角波、白噪声、脉冲信号与其类似在此省略其回调函数的代码。
- 关闭按钮的调用(CallBack)
p6=0;
p5=0;
p1=0;
p2=0;
p3=0;
p4=0;
set(handles.sliderfuzhi,'value',0);
set(handles.sliderpinlv,'value',0);
set(handles.sliderxiangwei,'value',0);
set(handles.editfuzhi,'string',num2str(0));
set(handles.editpinlv,'string',num2str(0));
set(handles.editxiangwei,'string',num2str(0));
plot(t,y);
set(gca,'color',[0,0,0]);
axis([0,8*pi,-1.2,1.2]);
- 滚动条的回调函数(CallBack)
global p1;
global p2;
global p3;
global p4;
global p5;
global p6;
j=get(handles.sliderfuzhi,'value');%获取幅值滚动条的值,并且赋给j
k=get(handles.sliderpinlv,'value');%获取频率滚动条的值,并且赋给k
l=get(handles.sliderxiangwei,'value');%获取相位滚动条的值,并且赋给l
set(handles.editfuzhi,'string',num2str(j));%修改editfuzhi 的值为滚动条当前的值
set(handles.editpinlv,'string',num2str(k));
set(handles.editxiangwei,'string',num2str(l));
A=str2num(get(handles.editfuzhi,'string'));%获取幅值选择框的值,并且赋给A
f=str2num(get(handles.editpinlv,'string'));
P=str2num(get(handles.editxiangwei,'string'));
while 1 %一直判断,遇到有按键就执行,然后退出。
if p1==1 %如果选择了正弦波
t=0:0.001:8*pi;
y=A*sin(2*pi*f*t+P*2*pi);
plot(t,y,'r');
set(gca,'color',[0,1,0.5]);
grid on;
axis([0,8*pi,-1.2,1.2]);
end
if p2==1 %如果选择了方波
t=0:0.001:6; y=A*square(2*pi*f*t+4*P/f,50);
plot(t,y,'r');
set(gca,'color',[0,1,0.5]);
grid on;
axis([0,6,-1.2,1.2]);
end
if p3==1 %如果选择了锯齿波
t=0:0.001:20; y=A*sawtooth(pi*f*t+4*P/f,1);
%plot(t,y);
plot(t,y,'r');
set(gca,'color',[0,1,0.5]);
grid on;
axis([0,20,-1.2,1.2]);
end
if p4==1 %如果选择了三角波
t=0:0.001:20; y=A*sawtooth(pi*f*t+4*P/f,0.5);
plot(t,y,'r');
set(gca,'color',[0,1,0.5]);
grid on;
axis([0,20,-1.2,1.2]);
end
if p5==1 %如果选择白噪声
t=0.005:0.01:20;y=A*(rand(1,length(t))-0.5);
plot(t,y,'r');
set(gca,'color',[0,1,0.5]);
grid on;
axis([0,20,-1.2,1.2]);
end
if p6==1 %如果选择脉冲信号
t=0.02:0.01:50;
n=12;
y=A*(t==n);
plot(t,y,'r');
set(gca,'color',[0,1,0.5]);
grid on;
end
break;
end
运行图
1.正弦波的显示如图2所示.
图2正弦波
2.方波的显示如图3所示。
图3方波
3.锯齿波的显示如图4所示。
图4锯齿波
4.三角波的显示如图5所示。
图5三角波
5.白噪声的波形显示如图6所示。
图6白噪声
6.脉冲信号的显示如图7所示。
图7脉冲信号
7.关闭函数发生器显示如图8所示。
图8关闭函数发生器
基于MATLAB的函数信号发生器相关推荐
- matlab一般函数的绘制方法,基于MATLAB的函数图像绘制方法
C DOI:10.16707~.cnki.fjpc.2017.01.084 E 晒 亍嚣 基于 MATLAB的函数图像绘制方法 张笑笑 一,童 键 z (1湖南省长沙市第一中学 湖南 长沙 410() ...
- 基于STM32的函数信号发生器设计(下:软件设计)
转载请注明出处:http://blog.csdn.net/sctu_vroy/article/details/46279817 下篇将介绍整个STM32函数信号发生器系统软件设计部分,将着重介绍设计逻 ...
- 基于STM32的函数信号发生器设计(上:硬件设计)
转载请注明出处:http://blog.csdn.net/sctu_vroy/article/details/45888277 大三初学STM32时做的点东西,现在拿出来和大家分享一下~ 这是一款基于 ...
- 【Machine Learning 六】梯度下降法(基于Matlab 求函数最小值)
算法原理 梯度下降法是一个最优化算法,可以用来求一个函数的最小值,最大值等,也常用于人工神经网络中更新各个感知器之间的权值,求出cost function的最小值等,应用广泛. 其原理简单,就求函数 ...
- 25、基于51单片机函数信号发生器四种波形和频率显示系统设计
摘 要 本文所设计的系统是利用51单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,即采用STC89C51 单片机作为控制核心,而在外围采用数字/模拟转换电路(DAC0832).运放电 ...
- 基于 MATLAB 的数字信号发生器
摘 要:数字信号发生器是基于软硬件实现的一种波形发生仪器.在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和,而这些简单信号皆可由数字信号发生器模拟产生,因此它在工程分析和实验教学有着 ...
- matlab newff函数弃用了,matlab的newff函数
<现代电子技术> 2009 年第 18 期总第 305 期 计算机应用技术 基于 Matlab 实现函数逼近曾德惠 ( 湖北民族学院 理学院 湖北 恩施 445000) 摘 : 为满足工程 ...
- 基于 MATLAB 的信号发生器设计
基于 MATLAB 的信号发生器设计 虚拟仪器能充分利用现有计算机资源,通过配以独特设计的软硬件,实现普通仪器的全部功能以及一些在普通仪器上无法实现的功能的软件或程序.本设计的主要内容就是基于 MAT ...
- 基于MATLAB 的信号发生器设计
基于MATLAB 的信号发生器设计 一.前言 目前, MATLAB 已经广泛地应用于工程设计的各个领域,如电子.通信等领域,它已成为国际上最流行的计算机仿真软件设计工具. MATLAB 不再仅仅是一个 ...
- matlab rbf函数_基于径向基函数(RBF)的无网格伪谱法与程序实现(2)——微分矩阵...
参考资料 Gregory E. Fasshauer. Meshfree Approximation Methods with MATLAB. P.387 P401 数值实现 Matlab 2019a ...
最新文章
- python3中unicode怎么写_详解python3中ascii与Unicode使用
- ReentrantLock 实现原理
- tensorflow+numpy 深度学习相关函数(持续更新)
- php实现小说字典功能_四十章 PHP实现获取并生成数据库字典的方法
- 大佬终于把鸿蒙OS讲明白了,收藏了!
- python多线程操作字典_在Python中使用带有线程的全局字典
- 基于java的土地档案管理系统设计(含源文件)
- python axes_python matplotlib中axes与axis的区别?
- (c语言)输入两个整数a和n,计算下面表达式的值。Sn=a+aa+aaa+aaaa+.....+aa..aa(n个a)
- 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页...
- GPU图形绘制管线简介
- 传智播客黑马 Python学习笔记之python初识
- FusionChartsFree设置指南
- [转帖]生成QQ/MSN/旺旺/SKYPE等在线状态图标(官方提供)
- 手工扒网页模板简单流程
- 台计算机的本地打印机 并且,您在计算机上安装一台本地打印机。您共享这台打印机。您需要确保只有名为Grou..._考试资料网...
- django 名词解释
- 博客优化--ping让博客文章发表就有可能被收录
- 函数式编程-Lodash库学习
- 论文阅读——Towards Adversarially Robust Object Detection
热门文章
- zmq Pub-Sub 模式
- 电子邮箱地址格式怎么写?企业电子邮箱格式教程
- c++小游戏:笨鸟先飞(Flappy bird hhh)
- BFS - Marching Legion - ab Knight
- 算法:什么是棒球游戏问题?
- 情境认知测量方法的研究
- 中国20强游戏公司2022上半年年报分析:复合因素下业绩增长承压,海外新兴市场蕴含增长新趋势
- 诗歌集《触摸世界》30首摘录,对未来我是认真的
- Microbiome | 黄海所陈松林院士/华科宁康等-肠道菌群在龙利鱼(半滑舌鳎)抗弧菌病性状形成中的机制...
- 基于Nonebot2搭建QQ机器人(二)编写一个自动回复插件