MATLAB GUI设计(线性卷积和循环卷积的比较--笔记)
原创循环卷积代码,转载需注明出处
线性卷积与循环卷积的比较
实验目的和要求
掌握循环卷积和线性卷积的原理,与理论分析结果比较,加深理解循环卷积与线性卷积之间的关系。
实验内容和步骤
1) 已知两序列X(n) = ; h(n)=;
求两序列的线性卷积和它们的 N 点循环卷积;
2)设计一个GUI小软件,对N进行设定和调整,显示的序列(用stem 画出)时域信号图,线性卷积和N点循环卷积的时域结果图,要求N改变结果图也随之改变;
3)总结归纳循环卷积与线性卷积之间的关系。
实验要求
1) 提供MATLAB 程序;
2) 写出实验报告,对设计的思路和步骤结果进行分析和说明。
设计思路和步骤
设计思路:
① 确定GUI界面包含的控件 ,包含 显示h(n)、x(n)的坐标轴、显示x(n)与h(n)线性卷积结果的坐标轴、显示x(n)与h(n)循环卷积结果的坐标轴,以及一个滑杆(slider)用于调整循环卷积的点数N,作为辅助增加一个文本编辑框(edit)可以输入N值,作用与滑杆一样。
②从简单到复杂,控件功能符合预定要求后再把下一部分的控件添加到GUI界面上,逐步增加直至完成。
设计步骤:
①新建 空白GUI工程:
在MATLAB命令窗口输入 “guide” 命令选择新建 空白GUI工程:

选好存储位置及设置好名字,将会弹出GUI图形用户设计界面:
常用到的就是 控件栏里面的控件,可编辑文本框以及滑杆、坐标轴都可从这里拉到编辑面板,

选中控件后可以点击“属性检查器” 查看、编辑对象的各种属性值:

如图为一个可编辑文本框的各项属性,用到的属性是String 和Tag。
String即字符串的值就是初始状态呈现给用户看见的,如图设置将会显示“可编辑文本”;
Tag 即标签,每个控件都应当有一个独一无二的标签,后面我们对这个控件进行操作时就是通过它的标签来的,这里Tag值为edit2,那就用handles.edit2来操作这个文本框。完整语句用到set函数,set函数一般格式为set(句柄,’属性名称’,‘属性值’);如set(handles.edit1,'string',’Nvalue’);那Tag为edit1的可编辑文本框就会显示‘‘Nvalue’’;
(handles像C语言的结构体一般,装着所有控件的Tag,可以全局引用,但需注意在控件生成后该控件的Tag才会更新到handles里面,所以在写控件生成时候的CreateFcn时还不能引用诸如handles.edit1这样的参数;再而如果用户要添加一个handles.xxx,需要在handles.xxx=XXXXX后面加上guidata(hObject, handles); 来更新handles)。
②先生成一个滑杆和一个文本编辑框,实现他们的“N”值同步,即滑动滑杆文本编辑框中显示的string –N也相应的改变,编辑文本框中的 N,滑杆也相应的改变,

考虑到用户可能会在文本框输入浮点数,而循环卷积需要的是整数,所以当用户输入浮点数时,要通过取整(用到了int16),再把取整后的数显示在文本框、再同步到滑杆的value。文本框中的callback函数中的语句: set(handles.edit1,'string',num2str(int16(str2num(get(handles.edit1,'string')))));
实现的就是这一功能;其中get(handles.edit1,'string');作用是为了获取Tag为 edit1的文本框的“string”的值,str2num是将字符串转化为数字,num2str则反之,这样用是因为edit1显示的东西要是 string 字符串而滑杆的value 这个属性的值应当为 数字。操作控件的基本方法就是这样,其他控件类似,简写见③、④,详见工程代码。
③ 用坐标轴显示h(n)、x(n)、h(n) * x(n)。
坐标轴1显示x(n):
stem(handles.axes1,(0:length(handles.Xndata)-1),handles.Xndata);
坐标轴2显示h(n):
stem(handles.axes2,(0:length(handles.Hndata)-1),handles.Hndata);
坐标轴3显示x(n)与h(n)线性卷积:
stem(handles.axes3,(0:length(handles.xhconv)-1),handles.xhconv);
④坐标轴4显示x(n)与h(n)的N 点循环卷积:
貌似MATLAB 系统没有提供循环卷积的函数,所以根据
自己写了一个循环卷积函数:
function y = Circonv(A,B,L) % 矩阵 A B 的 L 点循环卷积
y=[];
if L>0 %限制L 为正整数,看起来没有影响
if length(A)<L %当矩阵A长度不足L时补零,否则会出错
A=[A, zeros(1,(L-length(A)))];
end
if length(B)<L %当矩阵B长度不足L时补零,否则会出错
B=[B,zeros(1,(L-length(B)))];
end
for n=0:L-1 %相当于公式里的 Rn(L)
sum=0;
for m=0:L-1 % ,
sum=sum+A(m+1)*B(mod((n-m),L)+1);
%sum作为 求和 容器
%按照公式应为sum=sum+A(m)*B(mod((n-·m),L));
%因为 MATLAB中的矩阵元素下标是从 1 开始的,所以调用元素时加上 1
end
y=[y,sum];
end
end
end
坐标轴4显示x(n)与h(n)的N 点循环卷积:
stem(handles.axes4,(0:length(handles.circon)-1),handles.circon);
设计结果分析与说明
设计结果符合 预期要求并添加了部分功能:
- 考虑到用户可能输入浮点数作为N点 循环卷积的 参数 N,所以添加 取整功能;
- 当循环卷积的 点数 大于25即显示x(n) 、h(n)线性卷积 的坐标轴的长度时,把两个坐标轴同时延长为相同长度,便于比较两种卷积的结果。
分析:
设A矩阵的程度为N,B的长度为M则当L N +M -1 时A与B的L点循环卷积才等于A与B的线性卷积。
2019-03-08
MATLAB GUI设计(线性卷积和循环卷积的比较--笔记)的更多相关文章
- Matlab GUI设计中的一些常用函数
Matlab GUI常用函数总结 % — 文件的打开.读取和关闭% — 文件的保存% — 创建一个进度条% — 在名为display的axes显示图像,然后关闭% — 把数字转化为时间格式% — ch ...
- MATLAB GUI 设计要点 转
https://www.cnblogs.com/wangh0802PositiveANDupward/p/4588512.html 从简单的例子说起吧. 创建Matlab GUI界面通常有两种方式: ...
- Matlab GUI设计(2)
11. (1)界面设计 (2)添加按钮的回调函数 function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle ...
- MATLAB GUI设计(1)
一.新建GUI 1.命令行窗口输入 guide会出来如下界面,可以新建空白GUI,也可以打开已有GUI 2.通过工具栏新建 二.数据传递例子 1.添加输入框按钮,设置尺寸大小,内容,格式,标签 2.复 ...
- MATLAB GUI设计(3)
一.gca.gcf.gco 1.三者的功能定义: gcf 返回当前Figure 对象的句柄值 gca 返回当前axes 对象的句柄值 gco 返回当前鼠标单击的句柄值,该对象可以是除root 对象外的 ...
- [学习一个] Matlab GUI 学习笔记 Ⅰ
Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...
- matlab gui界面设计记录
我们要进行的程序是彩色图像处理试验示例,用这个程序来练习我们的gui前台设计. 程序功能介绍:具有彩色图像处理及保存和音乐播放功能效果如下图 2 在MATLAB的命令窗口中输入guide命令,打开gu ...
- Matlab滤波器设计(转)
滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频率 ...
- [转载] 关于matlab GUI的一点心得
转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行 ...
随机推荐
- 洛谷P4482 [BJWC2018]Border 的四种求法 字符串,SAM,线段树合并,线段树,树链剖分,DSU on Tree
原文链接https://www.cnblogs.com/zhouzhendong/p/LuoguP4482.html 题意 给定一个字符串 S,有 q 次询问,每次给定两个数 L,R ,求 S[L.. ...
- LNMP一键安装包添加虚拟主机、删除虚拟主机及如何使用伪静态
本文主要介绍LNMP一键安装包添加虚拟主机.删除虚拟主机及如何使用伪静态. 一.添加虚拟主机通俗点就是在VPS/服务商上添加一个网站(域名). 需要执行如下命令:/root/vhost.sh 执行后会 ...
- Linux命令行参数前加--,-和不加杠
参数前“-”的表明后面的参数是字符形式. 参数前“--”的则表明后面的参数是单词形式. 参数前有横的是System V风格. 参数前没有横的是BSD风格.
- django——web框架简介
1.web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户 ...
- visual studio的包含目录配置问题
早上将一个项目从debug x64修改到release x64,然后包含目录都是直接从debug拷贝过来的,一模一样的路径,一直说无法include,并且路径中的文件都是存在的,配置页面的releas ...
- java列表数据基本操作
列表数据组基本的增删改查 package cn.edu.fhj.day002; import java.util.ArrayList; public class ArrList { // 定义一个主函 ...
- (90)Wangdao.com第二十三天_JavaScript CSS 操作
CSS 操作 通过 JavaScript 操作 CSS HTML 元素的 style 属性 <div style="background-color:red; border:1px s ...
- 不让浏览器缓存index.html
参考文档:https://www.2cto.com/ask/question/4598 location = /index.html { add_header Cache-Control " ...
- 几个bat文件(关于robot freamwork安装)
如果安装后 没有这几文件,或者在运行后 提示 文件缺少这个文件 , 就需要手动创建. 一般文件在 :C:\Python27\Scripts 这个目录下 1.pybot.bat文件: @echo o ...
- Python 学习笔记8 循环语句 while
While循环是哟中利用条件语句,不断的执行某一段代码块,达到批量操作输出等一系列的操作,直到条件不满足或者被强制退出为止. 其工作流程如下: (图片来源菜鸟教程:http://www.runoob. ...