MATLAB/GUI设计

MATLAB GUI

函数

下面是都会有的代码 最开头

function varargout = interference_1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
 'gui_Singleton', gui_Singleton, ...
 'gui_OpeningFcn', @interference_1_OpeningFcn, ...
 'gui_OutputFcn', @interference_1_OutputFcn, ...
 'gui_LayoutFcn', [] , ...
 'gui_Callback', []);
if nargin && ischar(varargin{1})
 gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
 gui_mainfcn(gui_State, varargin{:});
end

下面是interference1的代码

function interference_1_OpeningFcn(hObject, eventdata, handles, varargin)

guidata(hObject, handles);

function varargout = interference_1_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;

下面是两个汉字区的代码 可以编辑的

function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end

function edit2_Callback(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end

function edit2_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end

下面是按下按钮1的回调函数 也就是开始 会出现的图

function pushbutton1_Callback(hObject, eventdata, handles)

%仿真 V-BLAST 结构 ZF 检测算法性能,调制方式为 QPSK
Nt = 4; %发射天线数
Nr = 4; %接收天线数
N = 10; %每帧的长度
L = 10000; %仿真的总帧数
EbN0 = 0:2:20;
M = 4; %QPSK 调制
x = randi([0,1],N*L,Nt); %信源数据
s = pskmod(x,M,pi/4); %QPSK 调制
for index=1:length(EbN0)
 s1 = [];
 s2 = [];
 s3 = [];
 for index1 = 1:L
 h = randn(Nt,Nr)+j*randn(Nt,Nr); %Rayleigh 衰落信道
 h = h./sqrt(2); %信道系数归一化
 [q1,r1] = qr(h'); %信道 QR 分解
 r = r1(1:Nt,:)'; %矩阵 R
 q = q1(:,1:Nt)'; %矩阵 Q
 sigma1 = sqrt(1/(10.^(EbN0(index)/10))); %每根接收天线的高斯白噪声标准差
 n = sigma1*(randn(N,Nr)+j*randn(N,Nr)); %每根接收天线的高斯白噪声
 y = s((index1-1)*N+1:index1*N,:)*h*q'+n*q'; %信号通过信道
 y1 = y*inv(r); %无干扰消除时的 ZF 检测
 s1 = [s1;pskdemod(y1,M,pi/4)];
 %有干扰消除时的 ZF 检测
 y(:,Nt) = y(:,Nt)./(r(Nt,Nt)); %检测第 Nt 层
 y1(:,Nt) = pskdemod(y(:,Nt),M,pi/4); %解调第 Nt 层
 y(:,Nt) = pskmod(y1(:,Nt),M,pi/4); %对第 Nt 层解调结果重新进行调制
 y2 = y;
 y3 = y1;
 for jj=Nt-1:-1:1
 for kk=jj+1:Nt
 y(:,jj) = y(:,jj)-r(kk,jj).*y(:,kk); %非理想干扰消除
 y2(:,jj) = y2(:,jj)-r(kk,jj).*s((index1-1)*N+1:index1*N,kk); %理想干扰消除
 end
 y(:,jj) = y(:,jj)./r(jj,jj);
 y2(:,jj) = y2(:,jj)./r(jj,jj); %第 jj 层判决变量
 y1(:,jj) = pskdemod(y(:,jj),M,pi/4); %第 jj 层进行解调
 y3(:,jj) = pskdemod(y2(:,jj),M,pi/4);
 y(:,jj) = pskmod(y1(:,jj),M,pi/4); %第 jj 解调结果重新进行调制
 y2(:,jj) = pskmod(y3(:,jj),M,pi/4);
 end
 s2 = [s2;y1];
 s3 = [s3;y3];
 end 
 [temp,ber1(index)] = biterr(x,s1,log2(M)); %无干扰消除时的系统误码
 [temp,ber2(index)] = biterr(x,s2,log2(M)); %非理想干扰消除时的系统误码
 [temp,ber3(index)] = biterr(x,s3,log2(M)); %理想干扰消除时的系统误码 
 [temp,ber24(index)] = biterr(x(:,1),s2(:,1),log2(M)); %非理想干扰消除时第 4 层的系统误码
 [temp,ber23(index)] = biterr(x(:,2),s2(:,2),log2(M)); %非理想干扰消除时第 3 层的系统误码
 [temp,ber22(index)] = biterr(x(:,3),s2(:,3),log2(M)); %非理想干扰消除时第 2 层的系统误码
 [temp,ber21(index)] = biterr(x(:,4),s2(:,4),log2(M)); %非理想干扰消除时第 1 层的系统误码 
 [temp,ber34(index)] = biterr(x(:,1),s3(:,1),log2(M)); %理想干扰消除时第 4 层的系统误码
 [temp,ber33(index)] = biterr(x(:,2),s3(:,2),log2(M)); %理想干扰消除时第 3 层的系统误码
 [temp,ber32(index)] = biterr(x(:,3),s3(:,3),log2(M)); %理想干扰消除时第 2 层的系统误码
 [temp,ber31(index)] = biterr(x(:,4),s3(:,4),log2(M)); %理想干扰消除时第 1 层的系统误码 
end 
semilogy(EbN0,ber1,'-mo',EbN0,ber2,'-ro',EbN0,ber3,'-bo')
title('V-BLAST 结构 ZF 检测算法性能')
legend('无干扰消除','非理想干扰消除', '理想干扰消除')
xlabel('信噪比 Eb/N0')
ylabel('误比特率(BER)') 

下面是按钮2的回调函数 即按下

function pushbutton2_Calwlback(hObject, eventdata, handles)

close(interference_1); %想关闭的 matlab 界面名称
set(interference_2,'Visible','on'); %想打开的界面名称

就是打开了interference的2号

function varargout = interference_2(varargin)
% INTERFERENCE_2 MATLAB code for interference_2.fig
% INTERFERENCE_2, by itself, creates a new INTERFERENCE_2 or raises the existing
% singleton*.
%
% H = INTERFERENCE_2 returns the handle to a new INTERFERENCE_2 or the handle to
% the existing singleton*.
%
% INTERFERENCE_2('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in INTERFERENCE_2.M with the given input arguments.
%
% INTERFERENCE_2('Property','Value',...) creates a new INTERFERENCE_2 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before interference_2_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to interference_2_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help interference_2
% Last Modified by GUIDE v2.5 13-Jan-2022 12:46:09
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
 'gui_Singleton', gui_Singleton, ...
 'gui_OpeningFcn', @interference_2_OpeningFcn, ...
 'gui_OutputFcn', @interference_2_OutputFcn, ...
 'gui_LayoutFcn', [] , ...
 'gui_Callback', []);
if nargin && ischar(varargin{1})
 gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
 gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before interference_2 is made visible.
function interference_2_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to interference_2 (see VARARGIN)
% Choose default command line output for interference_2
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes interference_2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = interference_2_OutputFcn(hObject, eventdata, handles) 
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in popupmenu1

这是可以切换的

function popupmenu1_Callback(hObject, eventdata, handles)
%仿真 V-BLAST 结构 ZF 检测算法性能,调制方式为 QPSK
Nt = 4; %发射天线数
Nr = 4; %接收天线数
N = 10; %每帧的长度
L = 10000; %仿真的总帧数
EbN0 = 0:2:20;
M = 4; %QPSK 调制
x = randi([0,1],N*L,Nt); %信源数据
s = pskmod(x,M,pi/4); %QPSK 调制
for index=1:length(EbN0)
 s1 = [];
 s2 = [];
 s3 = [];
 for index1 = 1:L
 h = randn(Nt,Nr)+j*randn(Nt,Nr); %Rayleigh 衰落信道
 h = h./sqrt(2); %信道系数归一化
 [q1,r1] = qr(h'); %信道 QR 分解
 r = r1(1:Nt,:)'; %矩阵 R
 q = q1(:,1:Nt)'; %矩阵 Q 
 sigma1 = sqrt(1/(10.^(EbN0(index)/10))); %每根接收天线的高斯白噪声标准差
 n = sigma1*(randn(N,Nr)+j*randn(N,Nr)); %每根接收天线的高斯白噪声
 
基于 ZF 算法的可见光通信性能检测系统 V1.0 6
 y = s((index1-1)*N+1:index1*N,:)*h*q'+n*q'; %信号通过信道 
 y1 = y*inv(r); %无干扰消除时的 ZF 检测
 s1 = [s1;pskdemod(y1,M,pi/4)]; 
 %有干扰消除时的 ZF 检测
 y(:,Nt) = y(:,Nt)./(r(Nt,Nt)); %检测第 Nt 层
 y1(:,Nt) = pskdemod(y(:,Nt),M,pi/4); %解调第 Nt 层
 y(:,Nt) = pskmod(y1(:,Nt),M,pi/4); %对第 Nt 层解调结果重新进行调制
 y2 = y;
 y3 = y1;
 for jj=Nt-1:-1:1
 for kk=jj+1:Nt
 y(:,jj) = y(:,jj)-r(kk,jj).*y(:,kk); %非理想干扰消除
 y2(:,jj) = y2(:,jj)-r(kk,jj).*s((index1-1)*N+1:index1*N,kk); %理想干扰消除
 end
 y(:,jj) = y(:,jj)./r(jj,jj);
 y2(:,jj) = y2(:,jj)./r(jj,jj); %第 jj 层判决变量
 y1(:,jj) = pskdemod(y(:,jj),M,pi/4); %第 jj 层进行解调
 y3(:,jj) = pskdemod(y2(:,jj),M,pi/4);
 y(:,jj) = pskmod(y1(:,jj),M,pi/4); %第 jj 解调结果重新进行调制
 y2(:,jj) = pskmod(y3(:,jj),M,pi/4);
 end
 s2 = [s2;y1];
 s3 = [s3;y3];
 end 
 [temp,ber1(index)] = biterr(x,s1,log2(M)); %无干扰消除时的系统误码
 [temp,ber2(index)] = biterr(x,s2,log2(M)); %非理想干扰消除时的系统误码
 [temp,ber3(index)] = biterr(x,s3,log2(M)); %理想干扰消除时的系统误码 
 [temp,ber24(index)] = biterr(x(:,1),s2(:,1),log2(M)); %非理想干扰消除时第 4 层的系统误码
 [temp,ber23(index)] = biterr(x(:,2),s2(:,2),log2(M)); %非理想干扰消除时第 3 层的系统误码
 [temp,ber22(index)] = biterr(x(:,3),s2(:,3),log2(M)); %非理想干扰消除时第 2 层的系统误码
 [temp,ber21(index)] = biterr(x(:,4),s2(:,4),log2(M)); %非理想干扰消除时第 1 层的系统误码 
 [temp,ber34(index)] = biterr(x(:,1),s3(:,1),log2(M)); %理想干扰消除时第 4 层的系统误码
 [temp,ber33(index)] = biterr(x(:,2),s3(:,2),log2(M)); %理想干扰消除时第 3 层的系统误码
 [temp,ber32(index)] = biterr(x(:,3),s3(:,3),log2(M)); %理想干扰消除时第 2 层的系统误码
 [temp,ber31(index)] = biterr(x(:,4),s3(:,4),log2(M)); %理想干扰消除时第 1 层的系统误码 
end 
%semilogy(EbN0,ber1,'-ko',EbN0,ber2,'-ro',EbN0,ber3,'-go')
%title('V-BLAST structure ZF detection algorithm performance')
%legend('No interference cancellation','Non-ideal interference cancellation', 'Ideal interference cancellation')
%xlabel('Eb/N0')
%ylabel('(BER)')
%legend('无干扰消除','非理想干扰消除', '理想干扰消除')
%xlabel('信噪比 Eb/N0')
%ylabel('误比特率(BER)')
global var3;
var3=get(handles.popupmenu1, 'value')
switch var3
 case 1
 axes(handles.axes1);
semilogy(EbN0,ber34,'-mo',EbN0,ber33,'-ro',EbN0,ber32,'-bo',EbN0,ber31,'-ko')
title('理想干扰消除 ZF 算法')
legend('Level 1','Level 2', 'Level 3', 'Level 4')
xlabel('信噪比 Eb/N0')
ylabel('误比特率(BER)') 
%legend('第 1 层','第 2 层', '第 3 层', '第 4 层')
%xlabel('信噪比 Eb/N0')

%ylabel('误比特率(BER)') 
 case 2
 axes(handles.axes1);
semilogy(EbN0,ber24,'-mo',EbN0,ber23,'-ro',EbN0,ber22,'-bo',EbN0,ber21,'-ko')
title('非理想干扰消除 ZF 算法')
legend('Level 1','Level 2', 'Level 3', 'Level 4')
xlabel('信噪比 Eb/N0')
ylabel('误比特率(BER)') 
%legend('第 1 层','第 2 层', '第 3 层', '第 4 层')
%xlabel('信噪比 Eb/N0')
%ylabel('误比特率(BER)') 
end

其中最重要的是

global var3;
var3=get(handles.popupmenu1, 'value')
switch var3
 
 case 1
 axes(handles.axes1);
semilogy(EbN0,ber34,'-mo',EbN0,ber33,'-ro',EbN0,ber32,'-bo',EbN0,ber31,'-ko')
title('理想干扰消除 ZF 算法')
legend('Level 1','Level 2', 'Level 3', 'Level 4')
xlabel('信噪比 Eb/N0')
ylabel('误比特率(BER)') 

 case 2
 axes(handles.axes1);
semilogy(EbN0,ber24,'-mo',EbN0,ber23,'-ro',EbN0,ber22,'-bo',EbN0,ber21,'-ko')
title('非理想干扰消除 ZF 算法')
legend('Level 1','Level 2', 'Level 3', 'Level 4')
xlabel('信噪比 Eb/N0')
ylabel('误比特率(BER)') 
end

最后请别忘了 这个选择的pop还需要createfunction

function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatsumotoChrikk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值