Matlab基本的数字基带信号APP界面(GUI入门)

基本的数字基带信号

参考:通信原理

单极性不归零波形

在这里插入图片描述

                gt1=ones(1,N_sample);
                gt2=zeros(1,N_sample);
                se1=[];
                for i=1:N     %码元数
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end

结果:
在这里插入图片描述

双极性不归零波形

在这里插入图片描述

                gt1=ones(1,N_sample);
                gt2=zeros(1,N_sample)-1;
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end

结果:
在这里插入图片描述

单极性归零波形

在这里插入图片描述

                gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
                gt2=zeros(1,N_sample);
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end

结果:
在这里插入图片描述

双极性归零波形

在这里插入图片描述

                gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
                gt2=[zeros(1,N_sample/2)-1,zeros(1,N_sample/2)];
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end

在这里插入图片描述

差分波形

在这里插入图片描述
可消除设备初始状态影响。
解决载波相位模糊(相位调制)。

传号差分:输入为1时,编码波形相对于前一代码电平产生跳变;输入为0时,波形不产生跳变。
空号差分:输入为0时,编码波形相对于前一代码电平产生跳变;输入为1时,波形不产生跳变。

                se1=[];
                gt1=-ones(1,N_sample);
                for i=1:N
                    if signal(i)==1
                        gt1=-gt1;
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt1];
                    end
                end

在这里插入图片描述

                se1=[];
                gt1=-ones(1,N_sample);
                for i=1:N
                    if signal(i)==0
                        gt1=-gt1;
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt1];
                    end
                end

在这里插入图片描述

多进制波形

在这里插入图片描述

                n=2;%进制
                aa=reshape(signal,[n,length(signal)/n]);
                aa=num2str(aa');
                sig=[];
                se1=[];
                gt1=ones(1,N_sample);
                for i=1:length(signal)/n
                    a=strrep(aa(i,:),' ','');%替代空格
                    a=bin2dec(a);%二进制-》十进制
                    sig=[sig,a];
                    se1=[se1,gt1*a-1.5];
                end
                N=length(signal)/n;
                t=0:dt:(N*N_sample-1)*dt;%序列传输时间
                set(app.TextArea_sig,'Value',num2str(uint8(sig)));

结果:
在这里插入图片描述

界面

输入的信号为ASCII码,转为对应的二进制数字,得到信号,然后显示在信号那个文本框里。
选择基带波形,当信号为偶数个时有多进制(4进制)的选项,为奇数个时没有。
点击开始后,会根据信号输出对应的基带波形。
在这里插入图片描述
在这里插入图片描述

总代码

classdef app_digitBaseSig < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure             matlab.ui.Figure
        ASCIIEditFieldLabel  matlab.ui.control.Label
        ASCIIEditField       matlab.ui.control.EditField
        UIAxes_sig           matlab.ui.control.UIAxes
        UIAxes_res           matlab.ui.control.UIAxes
        Label                matlab.ui.control.Label
        DropDown             matlab.ui.control.DropDown
        Button_start         matlab.ui.control.Button
        Label_2              matlab.ui.control.Label
        TextArea_sig         matlab.ui.control.TextArea
    end

    methods (Access = private)

        % Value changed function: ASCIIEditField
        function ASCIIEditFieldValueChanged(app, event)
            value = app.ASCIIEditField.Value;
            
            global signal;
            n=length(value);%输入字符个数
            signal1=dec2bin(value);
            signal=[];
            for i=1:n
                for j=1:size(signal1,2)
                    signal=[signal,str2num(signal1(i,j))];
                end
            end
            set(app.TextArea_sig,'Value',num2str(uint8(signal)));%显示码元
            plot(app.UIAxes_sig,1:length(signal),signal,'b.');
            ylim(app.UIAxes_sig,[-0.5,1.5]);
            if mod(length(signal),2)~=0
               set(app.DropDown,'Items',{'单极性(不归0)';'双极性(不归0)';'单极性归0';'双极性归0';'差分波形(传号)';'差分波形(空号)'});
            else
                set(app.DropDown,'Items',{'单极性(不归0)';'双极性(不归0)';'单极性归0';'双极性归0';'差分波形(传号)';'差分波形(空号)';'多进制波形(4进制)'})
            end
        end

        % Button pushed function: Button_start
        function Button_startPushed(app, event)
            %%生成单个码元
            global signal;
            Ts=1;%码元周期
            N_sample=128;%单个码元抽样点数
            dt=Ts/N_sample;%抽样时间间隔
            N=length(signal);%码元数
            t=0:dt:(N*N_sample-1)*dt;%序列传输时间
            
            method=get(app.DropDown,'Value');
            if method=='1'%单极性不归0
                gt1=ones(1,N_sample);
                gt2=zeros(1,N_sample);
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end
            elseif method=='2'%双极性不归0
                gt1=ones(1,N_sample);
                gt2=zeros(1,N_sample)-1;
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end
            elseif method=='3'%单极性归0
                gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
                gt2=zeros(1,N_sample);
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end
            elseif method=='4'%双极性归0
                gt1=[ones(1,N_sample/2),zeros(1,N_sample/2)];
                gt2=[zeros(1,N_sample/2)-1,zeros(1,N_sample/2)];
                se1=[];
                for i=1:N
                    if signal(i)==1
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt2];
                    end
                end
            elseif method=='5'%传号差分
                se1=[];
                gt1=-ones(1,N_sample);
                for i=1:N
                    if signal(i)==1
                        gt1=-gt1;
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt1];
                    end
                end
            elseif method=='6'%空号差分
                se1=[];
                gt1=-ones(1,N_sample);
                for i=1:N
                    if signal(i)==0
                        gt1=-gt1;
                        se1=[se1 gt1];
                    else
                        se1=[se1,gt1];
                    end
                end
            else  %4进制
                n=2;%进制
                aa=reshape(signal,[n,length(signal)/n]);
                aa=num2str(aa');
                sig=[];
                se1=[];
                gt1=ones(1,N_sample);
                for i=1:length(signal)/n
                    a=strrep(aa(i,:),' ','');%替代空格
                    a=bin2dec(a);%二进制-》十进制
                    sig=[sig,a];
                    se1=[se1,gt1*a-1.5];
                end
                N=length(signal)/n;
                t=0:dt:(N*N_sample-1)*dt;%序列传输时间
                set(app.TextArea_sig,'Value',num2str(uint8(sig)));
            end
            plot(app.UIAxes_res,t,se1);
        end
    end

    % App initialization and construction
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure
            app.UIFigure = uifigure;
            app.UIFigure.Position = [100 100 640 480];
            app.UIFigure.Name = 'UI Figure';

            % Create ASCIIEditFieldLabel
            app.ASCIIEditFieldLabel = uilabel(app.UIFigure);
            app.ASCIIEditFieldLabel.HorizontalAlignment = 'right';
            app.ASCIIEditFieldLabel.FontSize = 8;
            app.ASCIIEditFieldLabel.Position = [15 439 98 22];
            app.ASCIIEditFieldLabel.Text = '输入信号(ASCII码)';

            % Create ASCIIEditField
            app.ASCIIEditField = uieditfield(app.UIFigure, 'text');
            app.ASCIIEditField.ValueChangedFcn = createCallbackFcn(app, @ASCIIEditFieldValueChanged, true);
            app.ASCIIEditField.FontSize = 8;
            app.ASCIIEditField.Position = [128 439 100 22];

            % Create UIAxes_sig
            app.UIAxes_sig = uiaxes(app.UIFigure);
            title(app.UIAxes_sig, '信号序列')
            xlabel(app.UIAxes_sig, 't')
            ylabel(app.UIAxes_sig, 'Y')
            app.UIAxes_sig.PlotBoxAspectRatio = [1 0.221448467966574 0.221448467966574];
            app.UIAxes_sig.TitleFontWeight = 'bold';
            app.UIAxes_sig.Position = [1 199 625 186];

            % Create UIAxes_res
            app.UIAxes_res = uiaxes(app.UIFigure);
            title(app.UIAxes_res, '基带信号')
            xlabel(app.UIAxes_res, 't')
            ylabel(app.UIAxes_res, 'Y')
            app.UIAxes_res.PlotBoxAspectRatio = [1 0.221448467966574 0.221448467966574];
            app.UIAxes_res.TitleFontWeight = 'bold';
            app.UIAxes_res.Position = [1 1 625 185];

            % Create Label
            app.Label = uilabel(app.UIFigure);
            app.Label.HorizontalAlignment = 'right';
            app.Label.Position = [245 439 77 22];
            app.Label.Text = '数字基带信号';

            % Create DropDown
            app.DropDown = uidropdown(app.UIFigure);
            app.DropDown.Items = {'单极性(不归0)', '双极性(不归0)', '单极性归0', '双极性归0', '差分波形(传号)', '差分波形(空号)', '多进制波形(4进制)'};
            app.DropDown.ItemsData = {'1', '2', '3', '4', '5', '6', '7'};
            app.DropDown.Position = [337 439 100 22];
            app.DropDown.Value = '1';

            % Create Button_start
            app.Button_start = uibutton(app.UIFigure, 'push');
            app.Button_start.ButtonPushedFcn = createCallbackFcn(app, @Button_startPushed, true);
            app.Button_start.Position = [526 436 100 25];
            app.Button_start.Text = '开始';

            % Create Label_2
            app.Label_2 = uilabel(app.UIFigure);
            app.Label_2.HorizontalAlignment = 'right';
            app.Label_2.Position = [51 402 29 22];
            app.Label_2.Text = '信号';

            % Create TextArea_sig
            app.TextArea_sig = uitextarea(app.UIFigure);
            app.TextArea_sig.Editable = 'off';
            app.TextArea_sig.Position = [95 401 531 24];
        end
    end

    methods (Access = public)

        % Construct app
        function app = app_digitBaseSig

            % Create and configure components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end

初学者,请多多指教!如有错误,请指出。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值