app.set(name,value)

博客提供了一个链接https://www.cnblogs.com/ouzilin/p/7906089.html ,虽未明确内容,但标签显示与Node.js相关,可能包含Node.js的技术知识、应用案例等信息技术内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优化下面的代码,使显示的图框更美观,图框布局更美观,显示的结果显示完全详细,增加和删除信号有显示:classdef TDMApp222 < matlab.apps.AppBase % Properties corresponding to app components properties (Access = public) UIFigure matlab.ui.Figure SignalConfigPanel matlab.ui.container.Panel NumSignalsEditField matlab.ui.control.NumericEditField NumSignalsLabel matlab.ui.control.Label SignalTypeDropDown matlab.ui.control.DropDown SignalTypeLabel matlab.ui.control.Label FrequencyEditField matlab.ui.control.NumericEditField FrequencyLabel matlab.ui.control.Label AddSignalButton matlab.ui.control.Button RemoveSignalButton matlab.ui.control.Button SignalsListBox matlab.ui.control.ListBox SignalsListLabel matlab.ui.control.Label StrategyPanel matlab.ui.container.Panel FixedRadioButton matlab.ui.control.RadioButton PriorityRadioButton matlab.ui.control.RadioButton StrategyButtonGroup matlab.ui.container.ButtonGroup TotalSlotsEditField matlab.ui.control.NumericEditField TotalSlotsLabel matlab.ui.control.Label SimulationPanel matlab.ui.container.Panel RunSimulationButton matlab.ui.control.Button RunFeedbackButton matlab.ui.control.Button RunAnalysisButton matlab.ui.control.Button ResultsTabGroup matlab.ui.container.TabGroup SignalsTab matlab.ui.container.Tab OriginalAxes matlab.ui.control.UIAxes TDMAxes matlab.ui.control.UIAxes DemuxAxes matlab.ui.control.UIAxes SyncedAxes matlab.ui.control.UIAxes PerformanceTab matlab.ui.container.Tab BERAxes matlab.ui.control.UIAxes ParametersTab matlab.ui.container.Tab ParametersTextArea matlab.ui.control.TextArea StatusLabel matlab.ui.control.Label ProgressBar matlab.ui.control.Lamp SNREditField matlab.ui.control.NumericEditField SNRLabel matlab.ui.control.Label IterationsEditField matlab.ui.control.NumericEditField IterationsLabel matlab.ui.control.Label DurationEditField matlab.ui.control.NumericEditField DurationLabel matlab.ui.control.Label SamplingRateEditField matlab.ui.control.NumericEditField SamplingRateLabel matlab.ui.control.Label PriorityWeightsLabel matlab.ui.control.Label PriorityWeightsEditField matlab.ui.control.EditField end properties (Access = private) signals % 存储信号配置的cell数组 params % 系统参数结构体 tdmSystem % TDMSystem实例 controller % TDMFeedbackController实例 analyzer % TDMPerformanceAnalyzer实例 end methods (Access = private) function updateParams(app) % 更新系统参数 - 修复时钟漂移初始化问题 app.params = struct(); app.params.fs = app.SamplingRateEditField.Value; app.params.duration = app.DurationEditField.Value; app.params.numSignals = numel(app.signals); app.params.snrDb = app.SNREditField.Value; app.params.iterations = app.IterationsEditField.Value; app.params.totalSlots = app.TotalSlotsEditField.Value; % 设置时隙分配策略 if app.FixedRadioButton.Value app.params.strategy = 'fixed'; else app.params.strategy = 'priority'; end % 动态设置时钟漂移(支持任意数量的信号) app.params.clockDrift = zeros(1, app.params.numSignals); if app.params.numSignals >= 1 app.params.clockDrift(1) = 0.001; end if app.params.numSignals >= 2 app.params.clockDrift(2) = 0.002; end if app.params.numSignals >= 3 app.params.clockDrift(3:end) = -0.001; end % 解析优先级权重 if ~isempty(app.PriorityWeightsEditField.Value) try weights = str2num(app.PriorityWeightsEditField.Value); if numel(weights) ~= app.params.numSignals error('权重数量必须等于信号数量'); end app.params.priorities = weights / sum(weights); catch % 使用默认权重 app.params.priorities = ones(1, app.params.numSignals) / app.params.numSignals; end else % 默认权重 app.params.priorities = ones(1, app.params.numSignals) / app.params.numSignals; end end function generateSignals(app) % 生成信号数据 - 支持任意数量的信号 t = 0:1/app.params.fs:app.params.duration-1/app.params.fs; numSamples = length(t); app.tdmSystem.signals = zeros(app.params.numSignals, numSamples); app.tdmSystem.signalInfo = cell(app.params.numSignals, 1); for i = 1:app.params.numSignals sigConfig = app.signals{i}; switch sigConfig.type case '正弦波' freq = sigConfig.frequency; amp = sigConfig.amplitude; app.tdmSystem.signals(i, :) = amp * sin(2*pi*freq*t); app.tdmSystem.signalInfo{i} = sprintf('正弦波 (%dHz, %.1fV)', freq, amp); case '方波' freq = sigConfig.frequency; amp = sigConfig.amplitude; duty = sigConfig.dutyCycle; app.tdmSystem.signals(i, :) = amp * square(2*pi*freq*t, duty); app.tdmSystem.signalInfo{i} = sprintf('方波 (%dHz, %.1fV, %.0f%%)', freq, amp, duty); case '随机噪声' amp = sigConfig.amplitude; app.tdmSystem.signals(i, :) = amp * randn(1, numSamples); app.tdmSystem.signalInfo{i} = sprintf('随机噪声 (σ=%.1fV)', amp); case '锯齿波' freq = sigConfig.frequency; amp = sigConfig.amplitude; app.tdmSystem.signals(i, :) = amp * sawtooth(2*pi*freq*t); app.tdmSystem.signalInfo{i} = sprintf('锯齿波 (%dHz, %.1fV)', freq, amp); case '脉冲信号' freq = sigConfig.frequency; amp = sigConfig.amplitude; duty = 0.3; % 占空比 app.tdmSystem.signals(i, :) = amp * pulstran(t, 0:1/freq:app.params.duration, ... 'rectpuls', duty/freq); app.tdmSystem.signalInfo{i} = sprintf('脉冲信号 (%dHz, %.1fV)', freq, amp); end end end function updateParametersDisplay(app) % 更新参数显示 - 添加优先级权重信息 paramText = sprintf('系统参数:\n'); paramText = [paramText sprintf('采样频率: %d Hz\n', app.params.fs)]; paramText = [paramText sprintf('信号持续时间: %.2f 秒\n', app.params.duration)]; paramText = [paramText sprintf('信号源数量: %d\n', app.params.numSignals)]; paramText = [paramText sprintf('信噪比: %d dB\n', app.params.snrDb)]; paramText = [paramText sprintf('时隙分配策略: %s\n', app.params.strategy)]; paramText = [paramText sprintf('总时隙数量: %d\n', app.params.totalSlots)]; paramText = [paramText sprintf('仿真迭代次数: %d\n', app.params.iterations)]; % 添加信号信息 paramText = [paramText sprintf('\n信号配置:\n')]; for i = 1:app.params.numSignals sig = app.signals{i}; switch sig.type case {'正弦波', '方波', '锯齿波', '脉冲信号'} paramText = [paramText sprintf('信号 %d: %s (频率: %d Hz, 振幅: %.1fV)', ... i, sig.type, sig.frequency, sig.amplitude)]; if strcmp(sig.type, '方波') paramText = [paramText sprintf(', 占空比: %.0f%%', sig.dutyCycle)]; end paramText = [paramText newline]; case '随机噪声' paramText = [paramText sprintf('信号 %d: %s (振幅: %.1fV)', ... i, sig.type, sig.amplitude) newline]; end end % 添加优先级权重 paramText = [paramText sprintf('\n优先级权重:\n')]; for i = 1:app.params.numSignals paramText = [paramText sprintf('信号 %d: %.2f\n', i, app.params.priorities(i))]; end app.ParametersTextArea.Value = paramText; end function plotSignals(app) % 绘制原始信号 - 优化布局 t = 0:1/app.params.fs:app.params.duration-1/app.params.fs; colors = lines(app.params.numSignals); % 原始信号 cla(app.OriginalAxes); if app.params.numSignals > 0 hold(app.OriginalAxes, 'on'); for i = 1:app.params.numSignals plot(app.OriginalAxes, t, app.tdmSystem.signals(i, :), ... 'Color', colors(i, :), 'DisplayName', app.tdmSystem.signalInfo{i}); end hold(app.OriginalAxes, 'off'); legend(app.OriginalAxes, 'Location', 'best', 'Interpreter', 'none'); title(app.OriginalAxes, '原始信号'); xlabel(app.OriginalAxes, '时间 (s)'); ylabel(app.OriginalAxes, '幅度'); grid(app.OriginalAxes, 'on'); end % TDM信号 cla(app.TDMAxes); if ~isempty(app.tdmSystem.tdmSignal) plot(app.TDMAxes, t, app.tdmSystem.tdmSignal); title(app.TDMAxes, ['TDM复用信号 (' app.params.strategy '策略)']); xlabel(app.TDMAxes, '时间 (s)'); ylabel(app.TDMAxes, '幅度'); grid(app.TDMAxes, 'on'); end % 解复用信号 cla(app.DemuxAxes); if ~isempty(app.tdmSystem.demuxSignals) && app.params.numSignals > 0 hold(app.DemuxAxes, 'on'); for i = 1:app.params.numSignals plot(app.DemuxAxes, t, app.tdmSystem.demuxSignals(i, :), ... 'Color', colors(i, :), 'DisplayName', ['信号 ' num2str(i)]); end hold(app.DemuxAxes, 'off'); legend(app.DemuxAxes, 'Location', 'best'); title(app.DemuxAxes, '解复用信号'); xlabel(app.DemuxAxes, '时间 (s)'); ylabel(app.DemuxAxes, '幅度'); grid(app.DemuxAxes, 'on'); end % 同步后信号 cla(app.SyncedAxes); if ~isempty(app.tdmSystem.syncedSignals) && app.params.numSignals > 0 hold(app.SyncedAxes, 'on'); for i = 1:app.params.numSignals plot(app.SyncedAxes, t, app.tdmSystem.syncedSignals(i, :), ... 'Color', colors(i, :), 'DisplayName', app.tdmSystem.signalInfo{i}); end hold(app.SyncedAxes, 'off'); legend(app.SyncedAxes, 'Location', 'best', 'Interpreter', 'none'); title(app.SyncedAxes, '同步后信号'); xlabel(app.SyncedAxes, '时间 (s)'); ylabel(app.SyncedAxes, '幅度'); grid(app.SyncedAxes, 'on'); end % 误码率 cla(app.BERAxes); if ~isempty(app.tdmSystem.ber) && app.params.numSignals > 0 bar(app.BERAxes, 1:app.params.numSignals, app.tdmSystem.ber, 0.6, 'FaceColor', [0.2 0.4 0.8]); title(app.BERAxes, '各信号的均方误差'); xlabel(app.BERAxes, '信号编号'); ylabel(app.BERAxes, '均方误差 (MSE)'); grid(app.BERAxes, 'on'); xticks(app.BERAxes, 1:app.params.numSignals); % 添加数据标签 hold(app.BERAxes, 'on'); for i = 1:app.params.numSignals text(app.BERAxes, i, app.tdmSystem.ber(i), ... sprintf('%.4f', app.tdmSystem.ber(i)), ... 'HorizontalAlignment', 'center', ... 'VerticalAlignment', 'bottom'); end hold(app.BERAxes, 'off'); end end end % Callbacks that handle component events methods (Access = private) % Code that executes after component creation function startupFcn(app) % 初始化参数 app.signals = {}; app.params = struct(); app.StatusLabel.Text = '准备就绪'; app.ProgressBar.Color = 'green'; % 设置默认参数 app.SamplingRateEditField.Value = 1000; app.DurationEditField.Value = 1; app.SNREditField.Value = 20; app.IterationsEditField.Value = 5; app.TotalSlotsEditField.Value = 50; app.NumSignalsEditField.Value = 0; app.PriorityRadioButton.Value = true; app.PriorityWeightsEditField.Value = ''; % 更新参数显示 updateParams(app); updateParametersDisplay(app); end % Button pushed function: AddSignalButton function AddSignalButtonPushed(app, ~) % 添加新信号 - 支持振幅参数 signalType = app.SignalTypeDropDown.Value; frequency = app.FrequencyEditField.Value; amplitude = 1.0; % 默认振幅 dutyCycle = 50; % 默认占空比 if frequency <= 0 uialert(app.UIFigure, '频率必须大于0', '无效参数'); return; end % 为方波添加占空比配置 if strcmp(signalType, '方波') dutyCycle = inputdlg('请输入占空比 (0-100):', '方波参数', [1 40], {'50'}); if isempty(dutyCycle) return; end dutyCycle = str2double(dutyCycle{1}); if isnan(dutyCycle) || dutyCycle < 0 || dutyCycle > 100 uialert(app.UIFigure, '占空比必须在0-100之间', '无效参数'); return; end end % 为所有信号添加振幅配置 amplitude = inputdlg('请输入信号振幅:', '振幅参数', [1 40], {'1.0'}); if isempty(amplitude) return; end amplitude = str2double(amplitude{1}); if isnan(amplitude) || amplitude <= 0 uialert(app.UIFigure, '振幅必须大于0', '无效参数'); return; end newSignal = struct(... 'type', signalType, ... 'frequency', frequency, ... 'amplitude', amplitude, ... 'dutyCycle', dutyCycle); app.signals{end+1} = newSignal; app.NumSignalsEditField.Value = numel(app.signals); % 更新信号列表 signalList = cell(1, numel(app.signals)); for i = 1:numel(app.signals) sig = app.signals{i}; switch sig.type case {'正弦极波', '方波', '锯齿波', '脉冲信号'} signalList{i} = sprintf('信号 %d: %s (%d Hz, %.1fV)', i, sig.type, sig.frequency, sig.amplitude); case '随机噪声' signalList{i} = sprintf('信号 %极d: %s (σ=%.1fV)', i, sig.type, sig.amplitude); end end app.SignalsListBox.Items = signalList; % 更新参数 updateParams(app); updateParametersDisplay(app); app.StatusLabel.Text = sprintf('已添加信号: %s (%d Hz, %.1fV)', signalType, frequency, amplitude); end % Button pushed function: RemoveSignalButton function RemoveSignalButtonPushed(app, ~) % 移除选中的信号 selectedIdx = app.SignalsListBox.Value; if isempty(selectedIdx) || selectedIdx > numel(app.signals) uialert(app.UIFigure, '请选择要删除的信号', '无选择'); return; end % 移除信号 removedSig = app.signals{selectedIdx}; app.signals(selectedIdx) = []; % 更新信号列表 app.NumSignalsEditField.Value = numel(app.signals); signalList = cell(1, numel(app.signals)); for i = 1:numel(app.signals) sig = app.signals{i}; switch sig.type case {'正弦波', '方波', '锯齿波', '脉冲信号'} signalList{i} = sprintf('信号 %d: %s (%d Hz, %.1fV)', i, sig.type, sig.frequency, sig.amplitude); case '随机噪声' signalList{i} = sprintf('信号 %d: %s (σ=%.1fV)', i, sig.type, sig.amplitude); end end app.SignalsListBox.Items = signalList; % 如果没有信号,清除选择 if isempty(app.signals) app.SignalsListBox.Value = []; else app.SignalsListBox.Value = min(selectedIdx, numel(app.signals)); end % 更新参数 updateParams(app); updateParametersDisplay(app); app.StatusLabel.Text = sprintf('已移除信号: %s (%d Hz, %.1fV)', removedSig.type, removedSig.frequency, removedSig.amplitude); end % Value changed function: NumSignalsEditField function NumSignalsEditFieldValueChanged(app, ~) % 信号数量变化时更新 updateParams(app); updateParametersDisplay(app); end % Value changed function: SamplingRateEditField function SamplingRateEditFieldValueChanged(app, ~) updateParams(app); updateParametersDisplay(app); end % Value changed function: DurationEditField function DurationEditFieldValueChanged(app, ~) updateParams(app); updateParametersDisplay(app); end % Value changed function: SNREditField function SNREditFieldValueChanged(app, ~) updateParams(app); updateParametersDisplay(app); end % Value changed function: IterationsEditField function IterationsEditFieldValueChanged(app, ~) updateParams(app); updateParametersDisplay(app); end % Value changed function: TotalSlotsEditField function TotalSlotsEditFieldValueChanged(app, ~) updateParams(app); updateParametersDisplay(app); end % Selection changed function: StrategyButtonGroup function StrategyButtonGroupSelectionChanged(app, ~) updateParams(app); updateParametersDisplay(app); end % Button pushed function: RunSimulationButton function RunSimulationButtonPushed(app, ~) % 运行基础仿真 app.StatusLabel.Text = '运行基础仿真...'; app.ProgressBar.Color = 'yellow'; drawnow; try % 更新参数 updateParams(app); % 检查信号配置 if app.params.numSignals == 0 uialert(app.UIFigure, '请至少添加一个信号', '无信号'); app.ProgressBar.Color = 'red'; return; end % 检查总时隙数 if app.params.totalSlots < app.params.numSignals uialert(app.UIFigure, '总时隙数必须大于等于信号数量', '无效参数'); app.ProgressBar.Color = 'red'; return; end % 创建TDM系统 app.tdmSystem = TDMSystem(app.params); % 生成信号 generateSignals(app); % 运行仿真 app.tdmSystem = app.tdmSystem.runSimulation(); % 显示结果 plotSignals(app); updateParametersDisplay(app); app.StatusLabel.Text = '基础仿真完成!'; app.ProgressBar.Color = 'green'; catch ME app.StatusLabel.Text = ['错误: ' ME.message]; app.ProgressBar.Color = 'red'; uialert(app.UIFigure, ME.message, '仿真错误'); end end % Button pushed function: RunFeedbackButton function RunFeedbackButtonPushed(app, ~) % 运行反馈控制仿真 app.StatusLabel.Text = '运行反馈控制仿真...'; app.ProgressBar.Color = 'yellow'; drawnow; try % 更新参数 updateParams(app); % 检查信号配置 if app.params.numSignals == 0 uialert(app.UIFigure, '请至少添加一个信号', '无信号'); app.ProgressBar.Color = 'red'; return; end % 检查总时隙数 if app.params.totalSlots < app.params.numSignals uialert(app.UIFigure, '总时隙数必须大于等于信号数量', '无效参数'); app.ProgressBar.Color = 'red'; return; end % 创建反馈控制器 app.controller = TDMFeedbackController(app.params); % 生成信号 generateSignals(app); % 运行反馈仿真 app.controller.runFeedbackSimulation(); % 显示结果 app.tdmSystem = app.controller; % 用于显示基本结果 plotSignals(app); updateParametersDisplay(app); app.StatusLabel.Text = '反馈控制仿真完成!'; app.ProgressBar.Color = 'green'; catch ME app.StatusLabel.Text = ['错误: ' ME.message]; app.ProgressBar.Color = 'red'; uialert(app.UIFigure, ME.message, '仿真错误'); end end % Button pushed function: RunAnalysisButton function RunAnalysisButtonPushed(app, ~) % 运行性能分析 app.StatusLabel.Text = '运行性能分析...'; app.ProgressBar.Color = 'yellow'; drawnow; try % 更新参数 updateParams(app); % 检查信号配置 if app.params.numSignals == 0 uialert(app.UIFigure, '请至少添加一个信号', '无信号'); app.ProgressBar.Color = 'red'; return; end % 检查总时隙数 if app.params.totalSlots < app.params.numSignals uialert(app.UIFigure, '总时隙数必须大于等于信号数量', '无效参数'); app.ProgressBar.Color = 'red'; return; end % 创建性能分析器 - 使用优化后的类 app.analyzer = TDMPerformanceAnalyzer(app.params); % 生成信号 generateSignals(app); % 运行性能分析 - 调用正确的方法 app.analyzer.runPerformanceAnalysis(); % 显示结果 app.tdmSystem = app.analyzer; % 用于显示基本结果 plotSignals(app); updateParametersDisplay(app); app.StatusLabel.Text = '性能分析完成!'; app.ProgressBar.Color = 'green'; catch ME app.StatusLabel.Text = ['错误: ' ME.message]; app.ProgressBar.Color = 'red'; uialert(app.UIFigure, ME.message, '仿真错误'); end end % Value changed function: PriorityWeightsEditField function PriorityWeightsEditFieldValueChanged(app, ~) updateParams(app); updateParametersDisplay(app); 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 1200 850]; app.UIFigure.Name = 'TDM通信系统仿真'; app.UIFigure.Scrollable = 'on'; % Create SignalConfigPanel app.SignalConfigPanel = uipanel(app.UIFigure); app.SignalConfigPanel.Title = '信号配置'; app.SignalConfigPanel.Position = [20 620 360 200]; % Create NumSignalsLabel app.NumSignalsLabel = uilabel(app.SignalConfigPanel); app.NumSignalsLabel.Position = [20 160 80 22]; app.NumSignalsLabel.Text = '信号数量:'; % Create NumSignalsEditField app.NumSignalsEditField = uieditfield(app.SignalConfigPanel, 'numeric'); app.NumSignalsEditField.Position = [110 160 60 22]; app.NumSignalsEditField.Value = 0; app.NumSignalsEditField.Editable = 'off'; % 设置为只读 app.NumSignalsEditField.ValueChangedFcn = createCallbackFcn(app, @NumSignalsEditFieldValueChanged, true); % Create SignalTypeLabel app.SignalTypeLabel = uilabel(app.SignalConfigPanel); app.SignalTypeLabel.Position = [20 130 80 22]; app.SignalTypeLabel.Text = '信号类型:'; % Create SignalTypeDropDown app.SignalTypeDropDown = uidropdown(app.SignalConfigPanel); app.SignalTypeDropDown.Position = [110 130 100 22]; app.SignalTypeDropDown.Items = {'正弦波', '方波', '随机噪声', '锯齿波', '脉冲信号'}; % Create FrequencyLabel app.FrequencyLabel = uilabel(app.SignalConfigPanel); app.FrequencyLabel.Position = [20 100 80 22]; app.FrequencyLabel.Text = '频率 (Hz):'; % Create FrequencyEditField app.FrequencyEditField = uieditfield(app.SignalConfigPanel, 'numeric'); app.FrequencyEditField.Position = [110 100 60 22]; app.FrequencyEditField.Value = 50; % Create AddSignalButton app.AddSignalButton = uibutton(app.SignalConfigPanel, 'push'); app.AddSignalButton.ButtonPushedFcn = createCallbackFcn(app, @AddSignalButtonPushed, true); app.AddSignalButton.Position = [220 130 100 22]; app.AddSignalButton.Text = '添加信号'; % Create RemoveSignalButton app.RemoveSignalButton = uibutton(app.SignalConfigPanel, 'push'); app.RemoveSignalButton.ButtonPushedFcn = createCallbackFcn(app, @RemoveSignalButtonPushed, true); app.RemoveSignalButton.Position = [220 100 100 22]; app.RemoveSignalButton.Text = '移除信号'; % Create SignalsListLabel app.SignalsListLabel = uilabel(app.SignalConfigPanel); app.SignalsListLabel.Position = [20 70 80 22]; app.SignalsListLabel.Text = '信号列表:'; % Create SignalsListBox app.SignalsListBox = uilistbox(app.SignalConfigPanel); app.SignalsListBox.Position = [20 20 300 50]; app.SignalsListBox.Items = {}; % Create StrategyPanel app.StrategyPanel = uipanel(app.UIFigure); app.StrategyPanel.Title = '时隙分配策略'; app.StrategyPanel.Position = [400 620 250 200]; % Create StrategyButtonGroup app.StrategyButtonGroup = uibuttongroup(app.StrategyPanel); app.StrategyButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @StrategyButtonGroupSelectionChanged, true); app.StrategyButtonGroup.Position = [20 100 200 80]; app.StrategyButtonGroup.Title = '选择策略'; % Create FixedRadioButton app.FixedRadioButton = uiradiobutton(app.StrategyButtonGroup); app.FixedRadioButton.Text = '固定分配'; app.FixedRadioButton.Position = [11 35 75 22]; % Create PriorityRadioButton app.PriorityRadioButton = uiradiobutton(app.StrategyButtonGroup); app.PriorityRadioButton.Text = '优先级分配'; app.PriorityRadioButton.Position = [11 10 100 22]; app.PriorityRadioButton.Value = true; % Create TotalSlotsLabel app.TotalSlotsLabel = uilabel(app.StrategyPanel); app.TotalSlotsLabel.Position = [20 60 80 22]; app.TotalSlotsLabel.Text = '总时隙数:'; % Create TotalSlotsEditField app.TotalSlotsEditField = uieditfield(app.StrategyPanel, 'numeric'); app.TotalSlotsEditField.ValueChangedFcn = createCallbackFcn(app, @TotalSlotsEditFieldValueChanged, true); app.TotalSlotsEditField.Position = [110 60 60 22]; app.TotalSlotsEditField.Value = 50; % Create SimulationPanel app.SimulationPanel = uipanel(app.UIFigure); app.SimulationPanel.Title = '仿真控制'; app.SimulationPanel.Position = [670 620 250 200]; % Create RunSimulationButton app.RunSimulationButton = uibutton(app.SimulationPanel, 'push'); app.RunSimulationButton.ButtonPushedFcn = createCallbackFcn(app, @RunSimulationButtonPushed, true); app.RunSimulationButton.Position = [30 150 190 30]; app.RunSimulationButton.Text = '运行系统仿真'; % Create RunFeedbackButton app.RunFeedbackButton = uibutton(app.SimulationPanel, 'push'); app.RunFeedbackButton.ButtonPushedFcn = createCallbackFcn(app, @RunFeedbackButtonPushed, true); app.RunFeedbackButton.Position = [30 100 190 30]; app.RunFeedbackButton.Text = '运行反馈控制'; % Create RunAnalysisButton app.RunAnalysisButton = uibutton(app.SimulationPanel, 'push'); app.RunAnalysisButton.ButtonPushedFcn = createCallbackFcn(app, @RunAnalysisButtonPushed, true); app.RunAnalysisButton.Position = [30 50 190 30]; app.RunAnalysisButton.Text = '运行性能分析'; % Create ResultsTabGroup app.ResultsTabGroup = uitabgroup(app.UIFigure); app.ResultsTabGroup.Position = [20 20 1150 580]; % Create SignalsTab app.SignalsTab = uitab(app.ResultsTabGroup); app.SignalsTab.Title = '信号可视化'; % Create OriginalAxes app.OriginalAxes = uiaxes(app.SignalsTab); title(app.OriginalAxes, '原始信号') xlabel(app.OriginalAxes, '时间 (s)') ylabel(app.OriginalAxes, '幅度') app.OriginalAxes.Position = [20 300 530 250]; app.OriginalAxes.Toolbar = []; % Create TDMAxes app.TDMAxes = uiaxes(app.SignalsTab); title(app.TDMAxes, 'TDM复用信号') xlabel(app.TDMAxes, '时间 (s)') ylabel(app.TDMAxes, '幅度') app.TDMAxes.Position = [20 20 530 250]; app.TDMAxes.Toolbar = []; % Create DemuxAxes app.DemuxAxes = uiaxes(app.SignalsTab); title(app.DemuxAxes, '解复用信号') xlabel(app.DemuxAxes, '时间 (s)') ylabel(app.DemuxAxes, '幅度') app.DemuxAxes.Position = [580 300 530 250]; app.DemuxAxes.Toolbar = []; % Create SyncedAxes app.SyncedAxes = uiaxes(app.SignalsTab); title(app.SyncedAxes, '同步后信号') xlabel(app.SyncedAxes, '时间 (s)') ylabel(app.SyncedAxes, '幅度') app.SyncedAxes.Position = [580 20 530 250]; app.SyncedAxes.Toolbar = []; % Create PerformanceTab app.PerformanceTab = uitab(app.ResultsTabGroup); app.PerformanceTab.Title = '性能分析'; % Create BERAxes app.BERAxes = uiaxes(app.PerformanceTab); title(app.BERAxes, '均方误差 (MSE)') xlabel(app.BERAxes, '信号编号') ylabel(app.BERAxes, 'MSE') app.BERAxes.Position = [50 150 1000 400]; app.BERAxes.Toolbar = []; % Create ParametersTab app.ParametersTab = uitab(app.ResultsTabGroup); app.ParametersTab.Title = '系统参数'; % Create ParametersTextArea app.ParametersTextArea = uitextarea(app.ParametersTab); app.ParametersTextArea.Position = [20 50 1100 500]; app.ParametersTextArea.Value = {'系统参数将在此显示'}; % Create StatusLabel app.StatusLabel = uilabel(app.UIFigure); app.StatusLabel.HorizontalAlignment = 'right'; app.StatusLabel.Position = [100 830 800 22]; app.StatusLabel.Text = '准备就绪'; % Create ProgressBar app.ProgressBar = uilamp(app.UIFigure); app.ProgressBar.Position = [930 830 20 20]; app.ProgressBar.Color = [0.47 0.67 0.19]; % Create SNRLabel app.SNRLabel = uilabel(app.UIFigure); app.SNRLabel.Position = [950 620 80 22]; app.SNRLabel.Text = '信噪比 (dB):'; % Create SNREditField app.SNREditField = uieditfield(app.UIFigure, 'numeric'); app.SNREditField.ValueChangedFcn = createCallbackFcn(app, @SNREditFieldValueChanged, true); app.SNREditField.Position = [1040 620 60 22]; app.SNREditField.Value = 20; % Create IterationsLabel app.IterationsLabel = uilabel(app.UIFigure); app.IterationsLabel.Position = [950 590 80 22]; app.IterationsLabel.Text = '迭代次数:'; % Create IterationsEditField app.IterationsEditField = uieditfield(app.UIFigure, 'numeric'); app.IterationsEditField.ValueChangedFcn = createCallbackFcn(app, @IterationsEditFieldValueChanged, true); app.IterationsEditField.Position = [1040 590 60 22]; app.IterationsEditField.Value = 5; % Create DurationLabel app.DurationLabel = uilabel(app.UIFigure); app.DurationLabel.Position = [950 560 80 22]; app.DurationLabel.Text = '持续时间 (s):'; % Create DurationEditField app.DurationEditField = uieditfield(app.UIFigure, 'numeric'); app.DurationEditField.ValueChangedFcn = createCallbackFcn(app, @DurationEditFieldValueChanged, true); app.DurationEditField.Position = [1040 560 60 22]; app.DurationEditField.Value = 1; % Create SamplingRateLabel app.SamplingRateLabel = uilabel(app.UIFigure); app.SamplingRateLabel.Position = [950 530 80 22]; app.SamplingRateLabel.Text = '采样率 (Hz):'; % Create SamplingRateEditField app.SamplingRateEditField = uieditfield(app.UIFigure, 'numeric'); app.SamplingRateEditField.ValueChangedFcn = createCallbackFcn(app, @SamplingRateEditFieldValueChanged, true); app.SamplingRateEditField.Position = [1040 530 60 22]; app.SamplingRateEditField.Value = 1000; % Create PriorityWeightsLabel app.PriorityWeightsLabel = uilabel(app.UIFigure); app.PriorityWeightsLabel.Position = [950 500 100 22]; app.PriorityWeightsLabel.Text = '优先级权重:'; % Create PriorityWeightsEditField app.PriorityWeightsEditField = uieditfield(app.UIFigure, 'text'); app.PriorityWeightsEditField.ValueChangedFcn = createCallbackFcn(app, @PriorityWeightsEditFieldValueChanged, true); app.PriorityWeightsEditField.Position = [1040 500 120 22]; app.PriorityWeightsEditField.Value = ''; app.PriorityWeightsEditField.Tooltip = '输入权重向量,如: [0.4, 0.3, 0.3]'; end end methods (Access = public) % Construct app function app = TDMApp222 % Create and configure 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
最新发布
06-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值