数据的归一化及其还原

 

本文算法源于作者导师主持的某动态心电压缩算法研究项目,为作者原创,可供对数据整理和归一化有需求的同学研究、讨论。 

该算法目的是将由11位表示的带符号整数归一化到-127~128之间,通过减小数据表示的位数以实现数据压缩,可作为全局压缩算法的一个环节。

 

数据集ToBeTrans.mat是重庆某医院提供的标准12导联动态心电数据(N*12),一列代表一个导联的数据(Lead),导联即通道(Channel),表示连续采自一个传感器的数据。

其中ftrQrsData_V6为来自V6导联的数据,读者可用一列随机整数集来测试。

 

程序以matlab源码描述,可以R2006a、R2008a上正确运行。 

这里谨列出:归一化、还原,以及测试函数。

 

第一部分:normData.m 

% 函数:归一化数据为int8型
function [normD, minD, maxD] = normData(data)
minD = min(data);
maxD = max(data);
normD = data / (maxD-minD) * 128; % 计算;先归一化到[-1,1]上,再乘128
normD = round(normD); % 整型便于存储
normD = int8(normD);
% data_rec2 = round ( data_norm2 / 128 * (maxD-minD) );

 

 第二部分:recoData.m 

% 函数:将归一化数据(int8型)还原
function [recoD] = recoData(normD, minD, maxD)
normD = double(normD);
recoD = round ( normD / 128 * (maxD-minD) );

 
第三部分:TestingCase.m

% 测试归一化与逆归一化程序
clear all; close all; clc;
load ToBeTrans.mat;
[normD, minD, maxD] = normData(ftrQrsData_V6);
recoD = recoData(normD, minD, maxD);

err = recoD - ftrQrsData_V6;
prd = sqrt(sum(err.^2) / sum(ftrQrsData_V6.^2)); % 误差以PRD,即均方根误差来衡量

figure;
subplot(211);
plot(err(1:300)),title('重建误差');
subplot(212);
plot(ftrQrsData_V6(1:300), 'r:'),title('重建对比'), hold on;
plot(recoD(1:300)), hold off;
legend('org', 'rec');

disp(sprintf('归一化后还原,其误差PRD为 %g%%,可行!', prd*100));

 

至于测试结果,作者亲自验证之后才在程序里写上“XX可行”字样的,见笑了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值