使用GUI实现均匀线列阵ULA指向性函数的绘制

使用GUI实现均匀线列阵ULA指向性函数的绘制

选修了学校的matlab课程,第一次接触到了GUI觉得很是帅气,简单易学且功能强大,遂把第一次编程经历记录在此,由于是新手向所以会详细的记录我的编程过程,希望能帮助到不知道从何做起的朋友。

进入GUI设计界面

打开matlab之后可以直接在命令行中输入’guide‘回车来进入到界面设计,如图。
之后在这里直接选择’空白GUI‘点击确定就可以开始设计窗口了。
在这里插入图片描述

窗口搭建

进入GUI设计界面之后,左侧的工具都可以直接拖拽到右侧的操作空间,想要什么形式的表格都可以自己搭建十分方便:在这里插入图片描述
这里是我自己搭建的表格形式,因为是想要构建一个计算线性等间隔线列阵指向性的表格,因此需要阵元个数、阵元间距和波长三个参数(注:想要改变文本。可以双击,也可以右键选择属性检测器,按钮和单选按钮、按钮组的名称同理),可以使用上方工具栏的“串”来对齐文本或按钮(按住shift+鼠标左键点击可以同时选中多个目标)。

回调函数编程

说简单一点,现在你光有了窗口,但是又如何将表格中各个数据联系起来呢,点一下按钮你的图像会出现相应的变化,这时候就需要编程回调函数了,通过指针将数据传递到代码中,然后进行编译。
以我这里的表格为例,我直接右键’生成图像‘按钮→查看回调→Callback,就可以进入编程界面:

##function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global flag;
N=str2double(get(handles.edit1,'String'));
lambda=str2double(get(handles.edit2,'String'));
d=str2double(get(handles.edit3,'String'));
phi=0:0.1:180;
if flag==1
Bphi=abs(sin((N*pi*d/lambda).*cos(phi))./sin((N*d/lambda).*cos(phi)));
plot(handles.axes1,phi,Bphi);
title(handles.axes1,'直角坐标系');
polar(handles.axes2,phi,Bphi);
title(handles.axes2,'极坐标系')
else
    Bphi=20*log(abs(sin((N*pi*d/lambda).*cos(phi))./sin((N*d/lambda).*cos(phi)))/max(...
    abs(sin((N*pi*d/lambda).*cos(phi))./sin((N*d/lambda).*cos(phi)))));
    plot(handles.axes1,phi,Bphi);
    ylim(handles.axes1,[-400 0]);
    title(handles.axes1,'直角坐标系');
    polar(handles.axes2,phi,Bphi);
    title(handles.axes2,'极坐标系');
end


看第一行’function pushbutton1_Callback‘简单的解释就是你push了button1以后会执行以下的代码,因此你直接将自己在按下’按钮1‘(右键→属性可以查看每个原件的’tag‘从而知道这个原件是’button‘几。)后需要执行的东西写好就行了。

使用’handles.tag‘将你需要的数据导出,方便编程处理。
global定义的全局变量是在后面的按钮组处需要用到的。
线性等间距阵列的指向性方程如下:
在这里插入图片描述
因为要在两个坐标系下表示(对数和线性)因此用到了if…else

pushbutton处的回调编好了之后,就要考虑按钮组的程序了,很容易理解,因为你选择了不同的按钮(线性或是对数)对应需要执行的代码肯定是不一样的,这里直接在按钮组处右键点击→查看回调→Selectionchangedfuc就可以对按钮组的代码进行编译:

function uibuttongroup2_SelectionChangedFcn(hObject, eventdata, handles)
% hObject    handle to the selected object in uibuttongroup2 
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global flag;
str=get(hObject,'tag');
switch str
    case 'radiobutton3'
    flag=1;
    case 'radiobutton4'
    flag=2;
    end

可以看到,我就是在这里设置了全局变量flag,当str是radiobutton3(我上面一个单选按钮的tag)时,给flag赋值1,当str是radiobutton4(我上面一个单选按钮的tag)时,给flag赋值2,与上面的pushbutton的代码结合起来就知道按钮组的选择功能是怎么实现的了。

关闭窗口的按钮可以如下代码实现:

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
close(gcf);

结果

在这里插入图片描述
在这里插入图片描述
大功告成!!!!撒花!!!

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这套国际知名教材中译本系列所选书目的范围,限于信息技术和电气工程学科所属各专业的技术基础课和主要专业课,教材原版本除了选自《国际知名大学原版教材—信息技术学科与电气工程学科系列》外,还将精选其他具有较大影响的国外知名的相关领域教材或教学参考书,教材内容适用于作为我国普通高等院校相应课程的教材或主要教学参考书。 阵列信号处理是近30年以来迅速发展的一个领域,在雷达、声纳、通信、电子对抗、地震信号处理、语音信号处理、射电天文等领域得到广泛应用,并逐渐成为众多应用领域中的核心技术和主要发展方向??如雷达中的相控阵技术、通信中的智能天线阵列技术、电子对抗中的超分辨率测向技术以及语音信号处理中的麦克风阵列技术等。 本书内容非常丰富,既包含了经典的阵列设计和空时随机过程分析的理论。也包含了近十年来在自适应阵列处理领域内自适应波束形成、波达方向估计(DOA)和空间谱估计方面的各种新的理论、算法和技术。作者结合多年的教学和撰写教材的经验,在内容选材上做到结构完整,脉络清晰。作者在每一章后面都为读者精心提供了很多习题。这些习题一方面可以帮助读者加强对基本概念的理解,另一方面也可以帮助读者开拓视野,了解相关问题的进一步研究方向。 中译本由清华大学资深研究人员及教师担任翻译工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值