SCADE Display画布尺寸和Ratio计算

本文详细介绍了在使用SCADEDisplay绘图时如何计算画布尺寸和Ratio,包括计算每毫米像素点数、Ratio值及画布尺寸的具体步骤。

在使用SCADE Display绘图时,常会碰到画布尺寸的设定和Ratio的设置问题。

进行画布大小计算和Ratio计算时,需要以下信息:

1.显示器的物理尺寸

2.显示器的分辨率

3.显示器的物理单位

 

由于画布尺寸和Ratio的计算比较抽象,故以实例进行介绍。

此处以下列数据为例:

1.已知显示器物理尺寸为:380*214(mm)

2.已知显示器分辨率为:1920*1534

3.已知显示器物理单位为:mm

计算步骤如下:

1.已经知道所需的数据,首先要计算出该显示器中每毫米的像素点数。

(1)计算显示器的英寸

根据已知的物理尺寸,使用勾股定理:

求出C=436mm(四舍五入,可根据实际情况进行取舍)

进行单位转换,换算成英寸,英寸与厘米的转换关系为:

1英寸=2.54厘米

那么,该显示器的英寸应为:

436/10/2.54=17英寸(四舍五入,可根据实际情况进行取舍)

(2)计算显示器的PPI(即每英寸像素点数)

PPI计算公式:

公式中的X=1920,Y=1534,屏幕尺寸为17。

那么,在将例中分辨率和求出的英寸套入可求出PPI为144.56

 

(3)计算每毫米的像素点数

计算出的PPI为每英寸的像素点数,已知每英寸=2.54cm,那么,每毫米像素点数为:

144.56/2.54/10=5.691339

2.计算Ratio

Ratio根据物理单位的不同有差异,在该例中,使用的单位为mm,且计算得出每毫米有5.691339个像素点,那么Ratio的值即为每个像素的宽度:

1/5.691339=0.1757

 

3.计算画布尺寸

SCADE Display画布是由一个个像素点构成的,画布长和宽分别用物理尺寸的长和宽乘以每毫米的像素点数即可。

 

给以下代码增加异常数据回溯参数异常的类型:%% 风电机组智能监测系统 - 全功能代码 % 功能:LSTM预测、异常检测、多指标评估、可视化分析 % 包含:RMSE/MAE/MAPE指标、4种分析图表 %% 1. 初始化环境 ==================================================== % 1.1 清理工作区 clear; clc; close all; % 1.2 固定随机种子 rng(0); % 1.3 禁用警告 warning off; %% 2. 数据准备阶段 ================================================= % 2.1 数据读取 raw_data = readmatrix("train_scada.xlsx"); % 2.2 数据参数设置 total_samples = size(raw_data, 1); % 2.2.1 总样本数 train_ratio = 0.8; % 2.2.2 训练集比例 train_num = round(total_samples * train_ratio); % 2.2.3 训练样本数 % 2.3 数据划分 shuffled_idx = randperm(total_samples); % 2.3.1 随机索引 % 2.4 训练集处理 train_input = raw_data(shuffled_idx(1:train_num), 1:8)'; % 2.4.1 输入特征 train_target = raw_data(shuffled_idx(1:train_num), 9)'; % 2.4.2 目标值 % 2.5 测试集处理 test_input = raw_data(shuffled_idx(train_num+1:end), 1:8)'; % 2.5.1 输入特征 test_target = raw_data(shuffled_idx(train_num+1:end), 9)'; % 2.5.2 目标值 % 2.6 样本数量记录 train_samples = size(train_input, 2); % 2.6.1 训练样本数 test_samples = size(test_input, 2); % 2.6.2 测试样本数 %% 3. 数据预处理 =================================================== % 3.1 输入特征归一化 [train_input_norm, input_norm] = mapminmax(train_input, 0, 1); % 3.1.1 test_input_norm = mapminmax('apply', test_input, input_norm); % 3.1.2 % 3.2 目标值归一化 [train_target_norm, target_norm] = mapminmax(train_target, 0, 1); % 3.2.1 test_target_norm = mapminmax('apply', test_target, target_norm); % 3.2.2 %% 4. 数据格式转换 ================================================= % 4.1 训练集转换 train_cells = arrayfun(@(i) double(train_input_norm(:,i)),... % 4.1.1 1:train_samples, 'UniformOutput', false)'; % 4.2 测试集转换 test_cells = arrayfun(@(i) double(test_input_norm(:,i)),... % 4.2.1 1:test_samples, 'UniformOutput', false)'; % 4.3 目标值转置 train_target_norm = train_target_norm'; % 4.3.1 test_target_norm = test_target_norm'; % 4.3.2 %% 5. LSTM模型构建 ================================================= % 5.1 网络结构定义 layers = [ sequenceInputLayer(8) % 5.1.1 输入层 lstmLayer(128, 'OutputMode', 'last') % 5.1.2 LSTM层 reluLayer % 5.1.3 激活层 fullyConnectedLayer(1) % 5.1.4 全连接层 regressionLayer % 5.1.5 回归层 ]; % 5.2 训练参数配置 options = trainingOptions('adam',... % 5.2.1 优化器 'MiniBatchSize', 500,... % 5.2.2 批量大小 'MaxEpochs', 1000,... % 5.2.3 最大迭代次数 'InitialLearnRate', 1e-2,... % 5.2.4 初始学习率 'LearnRateSchedule', 'piecewise',... % 5.2.5 学习率策略 'LearnRateDropFactor', 0.1,... % 5.2.6 衰减系数 'LearnRateDropPeriod', 800,... % 5.2.7 衰减周期 'Shuffle', 'every-epoch',... % 5.2.8 数据打乱 'Plots', 'training-progress',... % 5.2.9 训练进度图 'Verbose', false); % 5.2.10 关闭输出 % 5.3 模型训练 net = trainNetwork(train_cells, train_target_norm, layers, options); %% 6. 预测与评估 ==================================================== % 6.1 执行预测 train_pred_norm = predict(net, train_cells); % 6.1.1 test_pred_norm = predict(net, test_cells); % 6.1.2 % 6.2 反归一化处理 train_pred = mapminmax('reverse', train_pred_norm, target_norm); % 6.2.1 test_pred = mapminmax('reverse', test_pred_norm, target_norm); % 6.2.2 % 6.3 计算RMSE train_rmse = sqrt(mean((train_pred - train_target').^2)); % 6.3.1 test_rmse = sqrt(mean((test_pred - test_target').^2)); % 6.3.2 % 6.4 计算MAE train_mae = mean(abs(train_pred - train_target')); % 6.4.1 test_mae = mean(abs(test_pred - test_target')); % 6.4.2 % 6.5 计算MAPE(安全处理零值) train_nonzero = find(train_target ~= 0); % 6.5.1 非零索引 train_mape = mean(abs( (train_pred(train_nonzero) - train_target(train_nonzero)) ... ./ train_target(train_nonzero) )) * 100; % 6.5.2 test_nonzero = find(test_target ~= 0); % 6.5.3 非零索引 test_mape = mean(abs( (test_pred(test_nonzero) - test_target(test_nonzero)) ... ./ test_target(test_nonzero) )) * 100; % 6.5.4 %% 7. 异常检测模块 ================================================= % 7.1 残差计算 train_residual = train_pred - train_target'; % 7.1.1 test_residual = test_pred - test_target'; % 7.1.2 % 7.2 动态阈值计算(3σ原则) threshold = mean(abs(train_residual)) + 3*std(abs(train_residual)); % 7.2.1 % 7.3 异常样本识别 abnormal_idx = find(abs(test_residual) > threshold); % 7.3.1 abnormal_count = length(abnormal_idx); % 7.3.2 normal_count = test_samples - abnormal_count; % 7.3.3 %% 8. 可视化系统 ==================================================== % 8.1 创建画布 figure('Position', [100 100 1400 1000], 'Color', 'w'); % 8.2 训练集预测对比 subplot(2,2,1) plot(train_target, 'b-', 'LineWidth', 1.2) hold on plot(train_pred, 'r--', 'LineWidth', 1) title(sprintf('训练集预测对比\nRMSE=%.4f MAE=%.4f MAPE=%.2f%%',... train_rmse, train_mae, train_mape)) xlabel('样本序列'), ylabel('目标值') legend({'真实值','预测值'}, 'Location', 'northeast') grid on % 8.3 测试集异常检测 subplot(2,2,2) plot(test_target, 'b-', 'LineWidth', 1) hold on plot(test_pred, 'm:', 'LineWidth', 1.5) scatter(abnormal_idx, test_target(abnormal_idx), 80,... 'k', 'filled', 'MarkerEdgeColor', 'w') plot(xlim, [mean(test_target)+threshold, mean(test_target)+threshold],... 'k--', 'LineWidth', 1.5) plot(xlim, [mean(test_target)-threshold, mean(test_target)-threshold],... 'k--', 'LineWidth', 1.5) title(sprintf('测试集异常检测\nRMSE=%.4f MAE=%.4f MAPE=%.2f%%',... test_rmse, test_mae, test_mape)) xlabel('样本序列'), ylabel('目标值') legend({'真实值','预测值','阈值'}, 'Location', 'best') grid on % 8.4 残差分布直方图 subplot(2,2,3) histogram(abs(test_residual), 50, 'FaceColor', [0.2 0.6 0.9]) xline(threshold, 'r--', 'LineWidth', 2, 'DisplayName', '检测阈值') xline(test_mae, 'g:', 'LineWidth', 2, 'DisplayName', 'MAE值') title('预测残差分布分析') xlabel('残差绝对值'), ylabel('频数') legend('残差分布', '检测阈值', 'MAE值') grid on % 8.5 样本状态分布 subplot(2,2,4) bar_data = [normal_count, abnormal_count]; bar_plot = bar(categorical({'正常样本','异常样本'}), bar_data, 'FaceColor','flat'); bar_plot.CData(1,:) = [0.3 0.7 0.3]; % 正常样本颜色 bar_plot.CData(2,:) = [0.8 0.2 0.2]; % 异常样本颜色 text(1:2, bar_data, compose('%d\n(%.1f%%)',... [bar_data; 100*bar_data/test_samples]),... 'HorizontalAlignment','center',... 'VerticalAlignment','bottom',... 'FontWeight','bold') title('样本状态分布') ylabel('样本数量') grid on % 8.6 总标题 sgtitle('风电机组智能监测分析系统',... 'FontSize',16, 'FontWeight','bold', 'Color','#003366') %% 9. 结果输出 ===================================================== % 9.1 控制台报告 fprintf('======== 模型性能 ========\n') fprintf('训练集 RMSE: %.4f MAE: %.4f MAPE: %.2f%%\n',... train_rmse, train_mae, train_mape) fprintf('测试集 RMSE: %.4f MAE: %.4f MAPE: %.2f%%\n',... test_rmse, test_mae, test_mape) fprintf('\n======== 异常检测 ========\n') fprintf('动态阈值: %.4f\n', threshold) fprintf('异常样本: %d (%.2f%%)\n', abnormal_count, 100*abnormal_count/test_samples) % 9.2 文件保存 abnormal_records = table(abnormal_idx',... test_target(abnormal_idx)',... test_pred(abnormal_idx)',... 'VariableNames', {'位置','真实值','预测值'}); writetable(abnormal_records, '异常样本明细.csv') saveas(gcf, '综合监测分析图.png') %% 10. 网络分析 =================================================== analyzeNetwork(net)
05-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AfredZhao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值