【数字信号处理】基于Matlab Designer制作的信号生成、叠加与检测器

2023-05-16

下载链接(CSDN)
下载链接(百度网盘)

软件的界面如下:
在这里插入图片描述
主要分为了三个控制区模块,即信号生成预览区,信号观测区以及信号分析区。在信号生成区可以通过键盘输入或是滑块调节的方式改变输入信号的频率、赋值以及初相,信号生成区的预览窗口可以实时的动态调整当前信号的波形展示。此外目前设计了白噪声、正弦波、方波以及正弦波四种类型的信号输入。
完成输入参数的调节后,点击“ADD”按钮,就可以将当前的信号送入信号观测区,当ADD进入了多个信号通道后,就可以观测到多信号叠加后的输出波形。点击“Run”可以动态观测叠加波形的运动。点击“Play”可以播放当前叠加波的声音,持续一秒钟时间。点击“Clear”,就可以清空当前信号观测区的信号输入。
最后,在信号分析区,设计了针对叠加信号的频域图以及其他参数的分析功能,具体如界面所示。
如无法下载,源码如下

classdef Digital_signal_generation_and_analyzer_exported < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure                matlab.ui.Figure
        SignalAnalysis          matlab.ui.container.Panel
        STD_error               matlab.ui.control.NumericEditField
        Label_9                 matlab.ui.control.Label
        DigitalSignalGenerationandAnalyzerLabel  matlab.ui.control.Label
        PoweredbyVulcan_QLabel  matlab.ui.control.Label
        Analysis                matlab.ui.control.Button
        Mean                    matlab.ui.control.NumericEditField
        Label_8                 matlab.ui.control.Label
        RMS                     matlab.ui.control.NumericEditField
        Label_7                 matlab.ui.control.Label
        Peak_Grain              matlab.ui.control.NumericEditField
        Label_6                 matlab.ui.control.Label
        Grain                   matlab.ui.control.NumericEditField
        Label_5                 matlab.ui.control.Label
        Peak                    matlab.ui.control.NumericEditField
        Label_3                 matlab.ui.control.Label
        UIAxes                  matlab.ui.control.UIAxes
        SignalObservation       matlab.ui.container.Panel
        ClearObservation        matlab.ui.control.Button
        PlayObservation         matlab.ui.control.Button
        StopObservation         matlab.ui.control.Button
        RunObservation          matlab.ui.control.Button
        SignalObservation_axis  matlab.ui.control.UIAxes
        SignalGenerated         matlab.ui.container.Panel
        TextPhase               matlab.ui.control.TextArea
        radLabel                matlab.ui.control.Label
        PhaseSlider             matlab.ui.control.Slider
        AddSignal               matlab.ui.control.Button
        TextAmplitude           matlab.ui.control.TextArea
        Label_2                 matlab.ui.control.Label
        TextFrequency           matlab.ui.control.TextArea
        Label                   matlab.ui.control.Label
        AmplitudeSlider         matlab.ui.control.Slider
        FrequencySlider         matlab.ui.control.Slider
        SignalTypes             matlab.ui.container.ButtonGroup
        SquareWave              matlab.ui.control.RadioButton
        TriangularWave          matlab.ui.control.RadioButton
        SineWave                matlab.ui.control.RadioButton
        WhiteNoise              matlab.ui.control.RadioButton
        SignalPreview_axis      matlab.ui.control.UIAxes
    end


    properties (Access = private)
        FrequencyGenerate  % 信号生成窗口的信号频率(600为初始值)
        AmplitudeGenerate  % 信号生成窗口的信号幅值(0.5为初始值)
        PhaseGenerate % 信号生成窗口的信号相位
        Timer_Generate % 信号生成窗口的定时器,用于预览输入信号
        Phase_generate  % 信号生成窗口绘制函数运行相位
        Phase_generate_step  % 一次计时中断预览窗口的变化步长
        Fs  %采样频率
        N_observation %生成区采样长度
        N_Generate  %观测区采样长度
        Timer_View % 信号观测窗口的定时器,用于大屏输出观测信号
        InformationStorage = []; %频率,赋值,相位,类型
        InformationPlot = []; % Description
        Phase_observation = 0;
        Phase_observation_step = 0.1 * pi;
        observation_flag = 0; %默认关闭observation
        generate_flag = 1; %默认打开generate
    end

    methods (Access = private)

        function value = cell2double(~,value)
            value = cell2mat(value);
            value = str2double(value);
        end

        function  TimerInit_G(app)
            app.Timer_Generate = timer;
            app.Timer_Generate.StartDelay = 0;
            app.Timer_Generate.Period = 0.05 ; %定时器定时中断周期
            app.Timer_Generate.ExecutionMode = 'fixedDelay';
            app.Timer_Generate.TimerFcn = @(~,~)TimerGenerate_handler(app);
            start(app.Timer_Generate);
        end
        function TimerInit_O(app)
            app.Timer_View = timer;
            app.Timer_View.StartDelay = 0;
            app.Timer_View.Period = 0.1 ; %定时器定时中断周期
            app.Timer_View.ExecutionMode = 'fixedDelay';
            app.Timer_View.TimerFcn = @(~,~)TimerObservation_handler(app);
            %start(app.TimerInit_O);
        end
        function TimerObservation_handler(app)
            app.Phase_observation = app.Phase_observation + app.Phase_observation_step;
            if app.Phase_observation >= 2*pi
                app.Phase_observation = 0;
            end
            WaveMake(app);
            ObservationPlot(app);
        end
        function TimerGenerate_handler(app)
            app.Phase_generate = app.Phase_generate + app.Phase_generate_step;
            if app.Phase_generate >= 2*pi
                app.Phase_generate = 0;
            end
            SignalGenerated_draw(app);
        end
        function SignalGenerated_draw(app)
            dt = 1.0/app.Fs;
            time = 0:dt:app.N_Generate * dt;
            if app.SignalTypes.SelectedObject.Text == "SineWave"
                wave = app.AmplitudeGenerate * sin(time .* 2*pi*app.FrequencyGenerate + app.PhaseGenerate + app.Phase_generate);
                plot(app.SignalPreview_axis,time,wave,'LineWidth', 1.5);
            elseif app.SignalTypes.SelectedObject.Text == "SquareWave"
                wave = app.AmplitudeGenerate * square(time .* 2*pi*app.FrequencyGenerate + app.PhaseGenerate + app.Phase_generate);
                plot(app.SignalPreview_axis,time,wave,'LineWidth', 1.5);
            elseif app.SignalTypes.SelectedObject.Text == "TriangularWave"
                wave = app.AmplitudeGenerate * sawtooth(time .* 2*pi*app.FrequencyGenerate + app.PhaseGenerate + app.Phase_generate,0.5);
                plot(app.SignalPreview_axis,time,wave,'LineWidth', 1.5);
            elseif app.SignalTypes.SelectedObject.Text == "WhiteNoise"
                wave = 0.2 *app.AmplitudeGenerate * randn(1,app.N_Generate+1);
                plot(app.SignalPreview_axis,time,wave,'LineWidth', 1.5);
            end
            clear("wave");
            clear("time");

        end

        function Startup_init(app)
            app.FrequencyGenerate = 600; % 信号生成窗口的信号频率(600为初始值)
            app.AmplitudeGenerate = 0.5; % 信号生成窗口的信号幅值(0.5为初始值)
            app.PhaseGenerate = 0; % 信号观测窗口的信号相位
            app.Phase_generate = 0; % 信号生成窗口绘制函数运行相位
            app.Phase_generate_step = 0.1*pi; % 一次计时中断预览窗口的变化步长
            app.Fs = 44100; %采样频率
            app.N_observation = 441*5; %采样长度
            app.N_Generate = 441;
        end
        
        
        function  LockInput(app,odder)
            if odder == 1 % 允许写操作
                app.TextAmplitude.Editable = 'on';
                app.AmplitudeSlider.Enable = 'on';
                app.TextFrequency.Editable = 'on';
                app.FrequencySlider.Enable = 'on';
                app.TextPhase.Editable = 'on';
                app.PhaseSlider.Enable = 'on';
                app.AddSignal.Enable = 'on';
            elseif odder == 0
                app.TextAmplitude.Editable = 'off';
                app.AmplitudeSlider.Enable = 'off';
                app.TextFrequency.Editable = 'off';
                app.FrequencySlider.Enable = 'off';
                app.TextPhase.Editable = 'off';
                app.PhaseSlider.Enable = 'off';
                app.AddSignal.Enable = 'off';
            end
        end
        
        function WaveMake(app)
            dt = 1.0/app.Fs;
            time = 0:dt:app.N_observation * dt;
            Numbers = size(app.InformationStorage,1);
            app.InformationPlot = zeros([Numbers+1,app.N_observation + 1]);
            for i = 1:Numbers
                if app.InformationStorage(i,4) == 1
                    app.InformationPlot(i,:) = app.InformationStorage(i,2) * ...
                        sin(time(:)* 2*pi*app.InformationStorage(i,1) + app.InformationStorage(i,3) + app.Phase_observation);
                elseif app.InformationStorage(i,4) == 2
                    app.InformationPlot(i,:) = app.InformationStorage(i,2) * ...
                        square(time(:)* 2*pi*app.InformationStorage(i,1) + app.InformationStorage(i,3) + app.Phase_observation);
                elseif app.InformationStorage(i,4) == 3
                    app.InformationPlot(i,:) = app.InformationStorage(i,2) * ...
                        sawtooth(time(:)* 2*pi*app.InformationStorage(i,1) + app.InformationStorage(i,3) + app.Phase_observation,0.5);
                elseif app.InformationStorage(i,4) == 4
                    a = randn(1,app.N_observation+1);
                    app.InformationPlot(i,:) = 0.2 *app.InformationStorage(i,2) * a(:);
                end
            end
            for i = 1:app.N_observation + 1
                for j = 1:Numbers
                    app.InformationPlot(Numbers+1,i)=app.InformationPlot(Numbers+1,i)+app.InformationPlot(j,i);
                end
            end
            clear("time");
        end
        
        function ObservationPlot(app)
            dt = 1.0/app.Fs;
            time = 0:dt:app.N_observation * dt;
            cla(app.SignalObservation_axis);
            for i=1:size(app.InformationPlot,1)-1
                plot(app.SignalObservation_axis,time,app.InformationPlot(i,:),'LineWidth',1.5,'LineStyle','--');
                hold(app.SignalObservation_axis,"on");
            end
            a = size(app.InformationPlot,1);
            plot(app.SignalObservation_axis,time(:),app.InformationPlot(a,:),'LineWidth',2);
        end
        
        function stopView (app)
            if app.observation_flag == 1
                stop(app.Timer_View);
                app.observation_flag = 0 ;
            end
        end
        function stopGeneration (app)
            if app.generate_flag == 1
                stop(app.Timer_Generate);
                app.generate_flag = 0 ;
            end
        end
        function startGeneration (app)
            if app.generate_flag == 0
                start(app.Timer_Generate);
                app.generate_flag = 1 ;
            end
        end
        function startView (app)
            if app.observation_flag == 0
                start(app.Timer_View);
                app.observation_flag = 1 ;
            end
        end
    end


    % Callbacks that handle component events
    methods (Access = private)

        % Code that executes after component creation
        function startupFcn(app)
            clc;close;
            Startup_init(app);
            %TimerInit_O(app);
            TimerInit_G(app);

        end

        % Value changed function: TextFrequency
        function TextFrequencyValueChanged(app, event)
            value = app.TextFrequency.Value; % 文本的读取值为cell
            value = cell2double(app,value);
            app.FrequencySlider.Value = value;
            app.FrequencyGenerate = value;
        end

        % Value changed function: FrequencySlider
        function FrequencySliderValueChanged(app, event)
            value = app.FrequencySlider.Value; %滑块的返回值为double
            %value = cell2double(app,value);
            app.FrequencyGenerate = value;
            value = num2str(value);
            app.TextFrequency.Value = value;
        end

        % Value changing function: FrequencySlider
        function FrequencySliderValueChanging(app, event)
            changingValue = event.Value;
            app.FrequencyGenerate = changingValue;
            changingValue = num2str(changingValue);
            app.TextFrequency.Value = changingValue;
        end

        % Value changed function: AmplitudeSlider
        function AmplitudeSliderValueChanged(app, event)
            value = app.AmplitudeSlider.Value;
            app.AmplitudeGenerate = value;
            value = num2str(value);
            app.TextAmplitude.Value = value;

        end

        % Value changing function: AmplitudeSlider
        function AmplitudeSliderValueChanging(app, event)
            changingValue = event.Value;
            app.AmplitudeGenerate = changingValue;
            changingValue = num2str(changingValue);
            app.TextAmplitude.Value = changingValue;
        end

        % Value changed function: TextAmplitude
        function TextAmplitudeValueChanged(app, event)
            value = app.TextAmplitude.Value;
            value = cell2double(app,value);
            app.AmplitudeGenerate = value;
            app.AmplitudeSlider.Value = value;
        end

        % Value changed function: PhaseSlider
        function PhaseSliderValueChanged(app, event)
            value = app.PhaseSlider.Value;
            app.PhaseGenerate = value*pi;
            value = num2str(value);
            app.TextPhase.Value = value;
        end

        % Value changing function: PhaseSlider
        function PhaseSliderValueChanging(app, event)
            changingValue = event.Value;
            app.PhaseGenerate = changingValue * pi;
            changingValue = num2str(changingValue);
            app.TextPhase.Value = changingValue;
        end

        % Value changed function: TextPhase
        function TextPhaseValueChanged(app, event)
            value = app.TextPhase.Value;
            value = cell2double(app,value);
            app.PhaseGenerate = value * pi;
            app.PhaseSlider.Value = value;
        end

        % Button pushed function: AddSignal
        function AddSignalButtonPushed(app, event)
            stopView(app);
            if app.SignalTypes.SelectedObject.Text == "SineWave"
                Type = 1;
            elseif app.SignalTypes.SelectedObject.Text == "SquareWave"
                Type = 2;
            elseif app.SignalTypes.SelectedObject.Text == "TriangularWave"
                Type = 3;
            elseif app.SignalTypes.SelectedObject.Text == "WhiteNoise"
                Type = 4;
            end
            app.InformationStorage = [app.InformationStorage;app.FrequencyGenerate,...
                app.AmplitudeGenerate,app.PhaseGenerate,Type];
            %stopView(app);
            WaveMake(app);
            ObservationPlot(app);
        end

        % Button pushed function: RunObservation
        function RunObservationButtonPushed(app, event)
            LockInput(app,0);
            stopGeneration(app);
            TimerInit_O(app);
            startView(app);
            
            
        end

        % Button pushed function: StopObservation
        function StopObservationButtonPushed(app, event)
            stopView(app);
            startGeneration(app);
            LockInput(app,1);
            app.Phase_observation = 0;
        end

        % Button pushed function: ClearObservation
        function ClearObservationButtonPushed(app, event)
            app.InformationStorage = [0,0,0,1];
            WaveMake(app);
            ObservationPlot(app);
        end

        % Button pushed function: PlayObservation
        function PlayObservationButtonPushed(app, event)
            %stopView(app);
            % 懒得重改了,直接堆叠
            dt = 1.0/app.Fs;
            time = 0:dt:44100 * dt;
            Numbers = size(app.InformationStorage,1);
            MyInformationPlot = zeros([Numbers+1,44100 + 1]);
            for i = 1:Numbers
                if app.InformationStorage(i,4) == 1
                    MyInformationPlot(i,:) = app.InformationStorage(i,2) * ...
                        sin(time(:)* 2*pi*app.InformationStorage(i,1) + app.InformationStorage(i,3) + app.Phase_observation);
                elseif app.InformationStorage(i,4) == 2
                    MyInformationPlot(i,:) = app.InformationStorage(i,2) * ...
                        square(time(:)* 2*pi*app.InformationStorage(i,1) + app.InformationStorage(i,3) + app.Phase_observation);
                elseif app.InformationStorage(i,4) == 3
                    MyInformationPlot(i,:) = app.InformationStorage(i,2) * ...
                        sawtooth(time(:)* 2*pi*app.InformationStorage(i,1) + app.InformationStorage(i,3) + app.Phase_observation,0.5);
                elseif app.InformationStorage(i,4) == 4
                    a = randn(1,44100+1);
                    MyInformationPlot(i,:) = 0.2 *app.InformationStorage(i,2) * a(:);
                end
            end
            for i = 1:44100 + 1
                for j = 1:Numbers
                    MyInformationPlot(Numbers+1,i)=MyInformationPlot(Numbers+1,i)+MyInformationPlot(j,i);
                end
            end
            sound(MyInformationPlot(size(MyInformationPlot,1),:),app.Fs);
            %startView(app);

        end

        % Button pushed function: Analysis
        function AnalysisButtonPushed(app, event)
            dt = 1.0/app.Fs;
            Limit_X = size(app.InformationPlot,1);
            Limit_Y = size(app.InformationPlot,2);
            app.Peak.Value = max(app.InformationPlot(Limit_X,:));
            app.Grain.Value = min(app.InformationPlot(Limit_X,:));
            app.Peak_Grain.Value = app.Peak.Value - app.Grain.Value;
            for i = 1:Limit_Y
                if app.InformationPlot(Limit_X,i) == app.Peak.Value
                    serial_peak = i;
                    break;
                end
            end
            for i = 1:Limit_Y
                if app.InformationPlot(Limit_X,i) == app.Grain.Value
                    serial_grain = i;
                    break;
                end
            end
            app.Mean.Value = mean(app.InformationPlot(Limit_X,:));
            app.STD_error.Value = std(app.InformationPlot(Limit_X,:));
            app.RMS.Value = sqrt( mean(app.InformationPlot(Limit_X,:) .^2 )   );
            M = 4096;
            P = fft(app.InformationPlot(Limit_X,:),M);
            Py = 2 * sqrt(P.*conj(P))/M;
            f = linspace(0,app.Fs/2,M/2);
            plot(app.UIAxes,f,Py(1:M/2));
        end
    end

    % Component initialization
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure and hide until all components are created
            app.UIFigure = uifigure('Visible', 'off');
            app.UIFigure.Position = [100 100 955 677];
            app.UIFigure.Name = 'MATLAB App';

            % Create SignalGenerated
            app.SignalGenerated = uipanel(app.UIFigure);
            app.SignalGenerated.ForegroundColor = [0.2784 0.5804 0.7686];
            app.SignalGenerated.TitlePosition = 'centertop';
            app.SignalGenerated.Title = '信号生成';
            app.SignalGenerated.FontWeight = 'bold';
            app.SignalGenerated.Position = [2 1 276 677];

            % Create SignalPreview_axis
            app.SignalPreview_axis = uiaxes(app.SignalGenerated);
            title(app.SignalPreview_axis, '信号预览')
            app.SignalPreview_axis.XLim = [0 0.01];
            app.SignalPreview_axis.YLim = [-2.1 2.1];
            app.SignalPreview_axis.GridLineStyle = ':';
            app.SignalPreview_axis.XTick = [0 0.005 0.01];
            app.SignalPreview_axis.XGrid = 'on';
            app.SignalPreview_axis.YGrid = 'on';
            app.SignalPreview_axis.Box = 'on';
            app.SignalPreview_axis.Position = [1 399 273 250];

            % Create SignalTypes
            app.SignalTypes = uibuttongroup(app.SignalGenerated);
            app.SignalTypes.TitlePosition = 'centertop';
            app.SignalTypes.Title = '信号类型';
            app.SignalTypes.Position = [-2 325 277 75];

            % Create WhiteNoise
            app.WhiteNoise = uiradiobutton(app.SignalTypes);
            app.WhiteNoise.Text = 'WhiteNoise';
            app.WhiteNoise.FontName = '3ds Light';
            app.WhiteNoise.Position = [11 27 84 22];

            % Create SineWave
            app.SineWave = uiradiobutton(app.SignalTypes);
            app.SineWave.Text = 'SineWave';
            app.SineWave.Position = [11 5 76 22];
            app.SineWave.Value = true;

            % Create TriangularWave
            app.TriangularWave = uiradiobutton(app.SignalTypes);
            app.TriangularWave.Text = 'TriangularWave';
            app.TriangularWave.Position = [149 26 106 22];

            % Create SquareWave
            app.SquareWave = uiradiobutton(app.SignalTypes);
            app.SquareWave.Text = 'SquareWave';
            app.SquareWave.Position = [149 5 91 22];

            % Create FrequencySlider
            app.FrequencySlider = uislider(app.SignalGenerated);
            app.FrequencySlider.Limits = [10 3000];
            app.FrequencySlider.ValueChangedFcn = createCallbackFcn(app, @FrequencySliderValueChanged, true);
            app.FrequencySlider.ValueChangingFcn = createCallbackFcn(app, @FrequencySliderValueChanging, true);
            app.FrequencySlider.Position = [14 271 249 3];
            app.FrequencySlider.Value = 600;

            % Create AmplitudeSlider
            app.AmplitudeSlider = uislider(app.SignalGenerated);
            app.AmplitudeSlider.Limits = [0 2];
            app.AmplitudeSlider.ValueChangedFcn = createCallbackFcn(app, @AmplitudeSliderValueChanged, true);
            app.AmplitudeSlider.ValueChangingFcn = createCallbackFcn(app, @AmplitudeSliderValueChanging, true);
            app.AmplitudeSlider.Position = [12 172 252 3];
            app.AmplitudeSlider.Value = 0.5;

            % Create Label
            app.Label = uilabel(app.SignalGenerated);
            app.Label.HorizontalAlignment = 'right';
            app.Label.Position = [41 294 29 22];
            app.Label.Text = '频率';

            % Create TextFrequency
            app.TextFrequency = uitextarea(app.SignalGenerated);
            app.TextFrequency.ValueChangedFcn = createCallbackFcn(app, @TextFrequencyValueChanged, true);
            app.TextFrequency.HorizontalAlignment = 'right';
            app.TextFrequency.WordWrap = 'off';
            app.TextFrequency.Position = [85 293 150 24];
            app.TextFrequency.Value = {'600'};

            % Create Label_2
            app.Label_2 = uilabel(app.SignalGenerated);
            app.Label_2.HorizontalAlignment = 'right';
            app.Label_2.Position = [41 200 29 22];
            app.Label_2.Text = '幅值';

            % Create TextAmplitude
            app.TextAmplitude = uitextarea(app.SignalGenerated);
            app.TextAmplitude.ValueChangedFcn = createCallbackFcn(app, @TextAmplitudeValueChanged, true);
            app.TextAmplitude.HorizontalAlignment = 'right';
            app.TextAmplitude.Position = [85 199 150 24];
            app.TextAmplitude.Value = {'0.5'};

            % Create AddSignal
            app.AddSignal = uibutton(app.SignalGenerated, 'push');
            app.AddSignal.ButtonPushedFcn = createCallbackFcn(app, @AddSignalButtonPushed, true);
            app.AddSignal.Position = [84 13 114 22];
            app.AddSignal.Text = {'Add'; ''};

            % Create PhaseSlider
            app.PhaseSlider = uislider(app.SignalGenerated);
            app.PhaseSlider.Limits = [0 2];
            app.PhaseSlider.ValueChangedFcn = createCallbackFcn(app, @PhaseSliderValueChanged, true);
            app.PhaseSlider.ValueChangingFcn = createCallbackFcn(app, @PhaseSliderValueChanging, true);
            app.PhaseSlider.Position = [11 76 252 3];

            % Create radLabel
            app.radLabel = uilabel(app.SignalGenerated);
            app.radLabel.HorizontalAlignment = 'right';
            app.radLabel.Position = [3 104 66 22];
            app.radLabel.Text = '相位(π rad)';

            % Create TextPhase
            app.TextPhase = uitextarea(app.SignalGenerated);
            app.TextPhase.ValueChangedFcn = createCallbackFcn(app, @TextPhaseValueChanged, true);
            app.TextPhase.HorizontalAlignment = 'right';
            app.TextPhase.Position = [84 103 150 24];
            app.TextPhase.Value = {'0'};

            % Create SignalObservation
            app.SignalObservation = uipanel(app.UIFigure);
            app.SignalObservation.ForegroundColor = [0.2784 0.5804 0.7686];
            app.SignalObservation.TitlePosition = 'centertop';
            app.SignalObservation.Title = '信号观测';
            app.SignalObservation.FontWeight = 'bold';
            app.SignalObservation.Position = [277 222 679 456];

            % Create SignalObservation_axis
            app.SignalObservation_axis = uiaxes(app.SignalObservation);
            app.SignalObservation_axis.XLim = [0 0.02];
            app.SignalObservation_axis.YLim = [-3.5 3.5];
            app.SignalObservation_axis.GridLineStyle = ':';
            app.SignalObservation_axis.XGrid = 'on';
            app.SignalObservation_axis.YGrid = 'on';
            app.SignalObservation_axis.Position = [1 50 677 385];

            % Create RunObservation
            app.RunObservation = uibutton(app.SignalObservation, 'push');
            app.RunObservation.ButtonPushedFcn = createCallbackFcn(app, @RunObservationButtonPushed, true);
            app.RunObservation.Position = [34 14 100 22];
            app.RunObservation.Text = 'Run';

            % Create StopObservation
            app.StopObservation = uibutton(app.SignalObservation, 'push');
            app.StopObservation.ButtonPushedFcn = createCallbackFcn(app, @StopObservationButtonPushed, true);
            app.StopObservation.Position = [205 14 100 22];
            app.StopObservation.Text = 'Stop';

            % Create PlayObservation
            app.PlayObservation = uibutton(app.SignalObservation, 'push');
            app.PlayObservation.ButtonPushedFcn = createCallbackFcn(app, @PlayObservationButtonPushed, true);
            app.PlayObservation.Position = [545 14 100 22];
            app.PlayObservation.Text = 'Play';

            % Create ClearObservation
            app.ClearObservation = uibutton(app.SignalObservation, 'push');
            app.ClearObservation.ButtonPushedFcn = createCallbackFcn(app, @ClearObservationButtonPushed, true);
            app.ClearObservation.Position = [375 14 100 22];
            app.ClearObservation.Text = 'Clear';

            % Create SignalAnalysis
            app.SignalAnalysis = uipanel(app.UIFigure);
            app.SignalAnalysis.ForegroundColor = [0.2784 0.5804 0.7686];
            app.SignalAnalysis.TitlePosition = 'centertop';
            app.SignalAnalysis.Title = '信号分析';
            app.SignalAnalysis.FontWeight = 'bold';
            app.SignalAnalysis.Position = [277 1 679 222];

            % Create UIAxes
            app.UIAxes = uiaxes(app.SignalAnalysis);
            app.UIAxes.XGrid = 'on';
            app.UIAxes.YGrid = 'on';
            app.UIAxes.Position = [2 2 358 199];

            % Create Label_3
            app.Label_3 = uilabel(app.SignalAnalysis);
            app.Label_3.HorizontalAlignment = 'right';
            app.Label_3.Position = [362 162 29 22];
            app.Label_3.Text = '波峰';

            % Create Peak
            app.Peak = uieditfield(app.SignalAnalysis, 'numeric');
            app.Peak.Editable = 'off';
            app.Peak.Position = [406 162 100 22];

            % Create Label_5
            app.Label_5 = uilabel(app.SignalAnalysis);
            app.Label_5.HorizontalAlignment = 'right';
            app.Label_5.Position = [523 162 29 22];
            app.Label_5.Text = '波谷';

            % Create Grain
            app.Grain = uieditfield(app.SignalAnalysis, 'numeric');
            app.Grain.Editable = 'off';
            app.Grain.Position = [567 162 100 22];

            % Create Label_6
            app.Label_6 = uilabel(app.SignalAnalysis);
            app.Label_6.HorizontalAlignment = 'right';
            app.Label_6.Position = [511 113 41 22];
            app.Label_6.Text = '双峰值';

            % Create Peak_Grain
            app.Peak_Grain = uieditfield(app.SignalAnalysis, 'numeric');
            app.Peak_Grain.Editable = 'off';
            app.Peak_Grain.Position = [567 113 100 22];

            % Create Label_7
            app.Label_7 = uilabel(app.SignalAnalysis);
            app.Label_7.HorizontalAlignment = 'right';
            app.Label_7.Position = [360 113 32 22];
            app.Label_7.Text = 'RMS';

            % Create RMS
            app.RMS = uieditfield(app.SignalAnalysis, 'numeric');
            app.RMS.Editable = 'off';
            app.RMS.Position = [407 113 100 22];

            % Create Label_8
            app.Label_8 = uilabel(app.SignalAnalysis);
            app.Label_8.HorizontalAlignment = 'right';
            app.Label_8.Position = [523 66 29 22];
            app.Label_8.Text = '均值';

            % Create Mean
            app.Mean = uieditfield(app.SignalAnalysis, 'numeric');
            app.Mean.Editable = 'off';
            app.Mean.Position = [567 66 100 22];

            % Create Analysis
            app.Analysis = uibutton(app.SignalAnalysis, 'push');
            app.Analysis.ButtonPushedFcn = createCallbackFcn(app, @AnalysisButtonPushed, true);
            app.Analysis.Position = [564 29 104 24];
            app.Analysis.Text = '分析';

            % Create PoweredbyVulcan_QLabel
            app.PoweredbyVulcan_QLabel = uilabel(app.SignalAnalysis);
            app.PoweredbyVulcan_QLabel.FontSize = 10;
            app.PoweredbyVulcan_QLabel.FontColor = [0.651 0.651 0.651];
            app.PoweredbyVulcan_QLabel.Position = [558 2 118 22];
            app.PoweredbyVulcan_QLabel.Text = 'Powered by Vulcan_Q😋';

            % Create DigitalSignalGenerationandAnalyzerLabel
            app.DigitalSignalGenerationandAnalyzerLabel = uilabel(app.SignalAnalysis);
            app.DigitalSignalGenerationandAnalyzerLabel.HorizontalAlignment = 'right';
            app.DigitalSignalGenerationandAnalyzerLabel.FontSize = 10;
            app.DigitalSignalGenerationandAnalyzerLabel.FontColor = [0.651 0.651 0.651];
            app.DigitalSignalGenerationandAnalyzerLabel.Position = [344 2 203 22];
            app.DigitalSignalGenerationandAnalyzerLabel.Text = 'Digital Signal Generation and Analyzer   ';

            % Create Label_9
            app.Label_9 = uilabel(app.SignalAnalysis);
            app.Label_9.HorizontalAlignment = 'right';
            app.Label_9.Position = [352 66 41 22];
            app.Label_9.Text = '标准差';

            % Create STD_error
            app.STD_error = uieditfield(app.SignalAnalysis, 'numeric');
            app.STD_error.Editable = 'off';
            app.STD_error.Position = [408 66 100 22];

            % Show the figure after all components are created
            app.UIFigure.Visible = 'on';
        end
    end

    % App creation and deletion
    methods (Access = public)

        % Construct app
        function app = Digital_signal_generation_and_analyzer_exported

            % Create UIFigure and components
            createComponents(app)

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

            % Execute the startup function
            runStartupFcn(app, @startupFcn)

            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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数字信号处理】基于Matlab Designer制作的信号生成、叠加与检测器 的相关文章

  • php curl 分离header和body信息

    php curl 分离header和body信息 php中可以通过curl来模拟http请求 xff0c 同时可以获取http response header和body xff0c 当然也设置参数可以只获取其中的某一个 当设置同时获取res
  • 文件缓冲区

    系统自动在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区从内存向磁盘输出数据 xff0c 必须先送到内存中的缓冲区 xff0c 装满缓冲区后才一起送到磁盘 如果从磁盘向计算机读入数据 xff0c 则一次从磁盘文件将一批数据输入到内存缓
  • 【UE4学习】5.相机和蓝图进阶

    文章目录 相机基础Project Setting控制输入按键事件控制相机设置追踪目标CameraManager实现相机切换API接口与多态蓝图之间的通信方式GameMode 43 Manager显示当前相机信息事件调度器Sequencer入
  • 动态绑定实现的原理

    当用virtual关键字来声明一个成员函数 xff0c 编译器机会根据动态绑定机制在幕后完成一些工作 当编译器发现类中有虚函数的时候 xff0c 编译器会创建一张虚函数表 xff0c 把虚函数的函数入口地址放到虚函数表中 xff0c 并且在
  • 模板函数实现数组排序

    template lt class T gt void sortfun T arr int len int i j T tmp for i 61 0 i lt len 1 i 43 43 for j 61 i j lt len 1 j 43
  • 静态转换和动态转换

    1 静态转换 静态转换用于 xff0c 普通数据类型间的转换 xff0c 具有继承关系的父子类指针或引用的转换 class Dad class Son public Dad class MyClass 基础类型转换 void test1 i
  • 文件的原子操作

    文件的原子操作是指一个操作一旦启动 xff0c 则无法能被破坏它的其它操作打断 1 写文件原子操作 无论是两个打开 xff0c 还是dup xff0c 同时操作一个文件都可能引起混乱 xff0c 解决这个问题的方法是 xff0c 可以通过O
  • 目录操作

    创建目录 xff1a int mkdir const char pathname mode t mode xff1b pathname xff0c 路径 xff1b mode xff0c 目录访问权限 xff1b 返回值 xff1a 成功
  • 【UE4学习】6.粒子系统

    文章目录 粒子系统常用参数Simple Sprite Burst EmitterEmitter SettingsEmitter SpawnEmitter UpdateParticle SpawnParticle UpdateAdd Even
  • java中Array/List/Map/Object与Json互相转换详解

    JSON JavaScript Object Notation xff1a 是一种轻量级的数据交换格式 一 JSON建构有两种结构 xff1a 对象和数组 1 对象 xff1a 对象在js中表示为 扩起来的内容 xff0c 数据结构为 ke
  • ZipInputStream解压远程文件报错,java.lang.IllegalArgumentException: MALFORMED[1]

    我遇到的问题是报的这个错java lang IllegalArgumentException MALFORMED 1 at java util zip ZipCoder toString ZipCoder java 65 不是 java l
  • OAuth2.0接百度平台进行授权

    百度开发文档 xff1a https openauth baidu com doc regdevelopers html 1 注册开发者账号并创建一个应用 2 创建应用后 xff0c 获取API Key和Secret Key 3 创建一个S
  • Spring 中最常用的 11 个扩展点

    1 自定义拦截器 spring mvc拦截器根spring拦截器相比 xff0c 它里面能够获取HttpServletRequest和HttpServletResponse等web对象实例 spring mvc拦截器的顶层接口是 xff1a
  • 经典排序算法

    https juejin cn post 7198840786766102589
  • SpringBoot项目启动加载时排除某一个类

    在Application启动类上 xff0c 用这个注解就可以指定某个类不加载进容器 64 ComponentScan
  • 手写一个生产者/消费者模式(三种方式实现)

    这种设计模式需要满足以下三点要求 xff1a xff08 1 xff09 生产者生产数据到缓冲区中 xff0c 消费者从缓冲区中取数据 xff08 2 xff09 如果缓冲区已经满了 xff0c 则生产者线程阻塞 xff1b xff08 3
  • Android中Okhttp,Volley,Retrofit网络框架优缺点及对比

    Okhttp xff1a Square 公司开源的 OkHttp 是一个专注于连接效率的 HTTP 客户端 OkHttp 提供了对 HTTP 2 和 SPDY 的支持 xff0c 并提供了连接池 xff0c GZIP 压缩和 HTTP 响应
  • Google身份验证服务端实现

    import org apache commons codec binary Base32 import org apache commons codec binary Base64 import javax crypto Mac impo
  • 下载jdk8登录账号

    目前在官网下载低于jdk1 8的java jdk的时候需要登陆 xff0c 这边分享一个账号 xff0c 方便下载 2696671285 64 qq com 密码 xff1a Oracle123
  • idea中maven项目 jar包下载不完整解决办法

    有时从git上clone项目 xff0c maven工程 xff0c 有时候pom xml在project标签处报错 xff1a Failed to read artifact descriptor for xxx jar 这种有时候时ja

随机推荐