为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

NetCDF格式数据无损压缩

2011-08-10 5页 pdf 346KB 49阅读

用户头像

is_175960

暂无简介

举报
NetCDF格式数据无损压缩 第 6 卷第 4 期 2010 年 12 月 三 江 学 院 学 报 Journal of Sanjiang University Vol. 6,No. 4 Dec.,2010 收稿日期:2010-08-07 作者简介:顾洪(1968 -) ,男,三江学院计算机科学与工程学院副教授。研究方向:计算机应用。 NetCDF格式数据无损压缩研究 顾洪 (三江学院 计算机科学与工程学院,江苏 南京 210012) 摘 要:NetCDF格式数据是气象要素数据,由于涉及到的时间跨度比较大,气象要素种类比 较多,时次比较密集等...
NetCDF格式数据无损压缩
第 6 卷第 4 期 2010 年 12 月 三 江 学 院 学 报 Journal of Sanjiang University Vol. 6,No. 4 Dec.,2010 收稿日期:2010-08-07 作者简介:顾洪(1968 -) ,男,三江学院计算机科学与工程学院副教授。研究方向:计算机应用。 NetCDF格式数据无损压缩研究 顾洪 (三江学院 计算机科学与工程学院,江苏 南京 210012) 摘 要:NetCDF格式数据是气象要素数据,由于涉及到的时间跨度比较大,气象要素种类比 较多,时次比较密集等原因,数据量一般情况下总是比较大的,对这些数据进行无损压缩很有必 要。笔者针对相邻时次要素数据的相关性,提出了对相邻时次要素数据进行减运算,使数据高位 尽可能地出现 00 值或 FF值,进而应用 WinRAR 工具,实现无损压缩的算法。实验结果证实,这 种压缩方法,可以有效地提高压缩比,实现气象要素数据无损压缩、减少数据存储量的目的。 关键词:数据压缩;无损;WinRAR;数据运算;压缩比 中图分类号:TP391 文献标识码:B 文章编号:JS-S265(2010)04-0021-005 一、NetCDF文件结构 NetCDF全称为 Network Common Data For- mat,中文译法为“网络通用数据格式”,对程序 员来说,它和 zip、jpeg、bmp文件格式类似,都是 一种文件格式的。NetCDF 文件开始的目 的是用于存储气象科学中的数据,现在已经成 为许多数据采集软件的生成文件的格式。[1] 从数学上来说,NetCDF 存储的数据就是 一个多自变量的单值数。用公式来说就是 f (x,y,z,. . .)= value,函数的自变量 x,y,z 等 在 NetCDF 中叫做维(Dimension)或坐标轴 (Axix) ,函数值 value 叫做变量(Variable)。 而自变量和函数值在物理学上的一些性质,比 如计量单位(量纲)、物理学名称等等,在 NetCDF中就叫属性(Attributes)。 一个 NetCDF文件的结构包括以下对象: 变量(Variable) 变量对应着真实的物理数据。比如我们 家里的电表,每个时刻显示的读数表示用户的 到该时刻的耗电量。这个读数值就可以用 NetCDF里的变量来表示。它是一个以时间为 自变量(或者说自变量个数为一维)的单值函 数。再比如在气象学中要作出一个气压图,就 是“东经 xx 度,北纬 yy 度的点的大气压值为 多少帕”,这是一个二维单值函数,两维分别 是经度和纬度。函数值为大气压。 从上面的例子可以看出,NetCDF 中的变 量就是一个 N 维数组,数组的维数就是实际 问题中的自变量个数,数组的值就是观测得到 的物理值。变量(数组值)在 NetCDF 中的存 储类型有六种,ASCII 字符 (char)、字节 (byte)、短整型(short)、整型(int)、浮点 (float)、双精度(double) ,显然这些类型和 C 中的类型一致。 维(Dimension) 一个维对应着函数中的某个自变量,或者 说函数图象中的一个坐标轴,在线性代数中就 是一个 N 维向量的一个分量(这也是维这个 名称的由来)。在 NetCDF 中,一个维具有一 个名字和范围(或者说长度,也就是数学上所 说的定义域,可以是离散的点集合或者连续的 区间)。在 NetCDF 中,维的长度基本都是有 12 限的,最多只能有一个具有无限长度的维。 属性(Attribute) 属性对变量值和维的具体物理含义的注 释或者说解释。因为变量和维在 NetCDF 中 都只是无量纲的数字,要想让人们明白这些数 字的具体含义,就得靠属性这个对象了。 在 NetCDF 中,属性由一个属性名和一个 属性值(一般为字符串)组成。比如,在文件 的文件头格式中有这样的代码段 temperature:units = " celsius" ; 前面的 temperature 是一个已经定义好的 变量(Variable) ,即温度,冒号后面的 units 就 是属性名,表示物理单位,=后面的就是 units 这个属性的值,为“celsius”,即摄氏度,整个一 行代码的意思就是温度这个物理量的单位为 celsius。 本文所处理的 NetCDF 文件为 ftp:/ / ftp. iap. ac. cn / fnl /ncep. reanalysis / surface下的 NC 文件。 二、无损压缩思路 通过对文件存储格式的具体可以知 道,NC 文件中存储数据是有格式上的限制 的,具体存储形式为(以平年为例) : 文件头信息 第 1 天第 1 时次时间数据 8 字节 第 1 天第 1 时次要素数据 144* 73* 2 字节 第 1 天第 2 时次时间数据 8 字节 第 1 天第 2 时次要素数据 144* 73* 2 字节 第 1 天第 3 时次时间数据 8 字节 第 1 天第 3 时次要素数据 144* 73* 2 字节 第 1 天第 4 时次时间数据 8 字节 第 1 天第 4 时次要素数据 144* 73* 2 字节 第 2 天第 1 时次时间数据 8 字节 第 2 天第 1 时次要素数据 144* 73* 2 字节 第 2 天第 2 时次时间数据 8 字节 第 2 天第 2 时次要素数据 144* 73* 2 字节 第 2 天第 3 时次时间数据 8 字节 第 2 天第 3 时次要素数据 144* 73* 2 字节 第 2 天第 4 时次时间数据 8 字节 第 2 天第 4 时次要素数据 144* 73* 2 字节 第 3 天至第 364 天的时间数数据和要素数据 ……………………………… 第 365 天第 1 时次时间数据 8 字节 第 365天第 1时次要素数据 144* 73* 2字节 第 365 天第 2 时次时间数据 8 字节 第 365天第 2时次要素数据 144* 73* 2字节 第 365 天第 3 时次时间数据 8 字节 第 365天第 3时次要素数据 144* 73* 2字节 第 365 天第 4 时次时间数据 8 字节 第 365天第 4时次要素数据 144* 73* 2字节 每个 NC文件包含文件头,接着就是要素 数据,每时次时间数据占 8 字节,每时次要素 数据占 144* 73* 2 字节,即每格点的数据用 双字节来表示格点数值,每天有 4 个时次的 数据。 本文对此数据压缩的思路是:利用 Win- RAR 压缩软件的特点,对连续出现的数据压 缩比高,分析数据的具体存放形式,将相邻时 次的数据进行减运算,使表示格点数据的数值 的高字节尽可能地出现 00(相减结果大于等 于 0)或 FF(相减结果小于 0)的情况;再将高 字节数据集中存放,使 00 或 FF又尽可能地重 复出现,经过处理后,文件的长度仍然保持原 来的长度,只是数据发生了改变,但经过处理 后的数据再用 WinRAR 工具进行压缩,就可 能得到比原先直接使用 WinRAR 工具进行压 缩更高的压缩比。 三、算法实现 对 NC数据文件进行压缩处理的算法是: (1)文件头信息保持不变; (2)将各时次时间数据集中存放; (3)将各时次要素数据集中存放; (4)对要素数据进行处理: ①读入 N天的数据,每天有 4 个时次,共 N* 4 个时次的数据,分别记为 D0,D1,D2, ……,Di,Di +1,Di +2,……,Dn -2,Dn -1,Dn; ②按从后往前的顺序,对 Dn 的数据进行 22 第 4 期 三江学院学报 第 6 卷 运算,计算公式为 Dn = Dn -1 - Dn 即用上一时次的数据与本时次的数据的 相减,记为本时次的数据,下同。 ③对 Dn -1的数据进行运算,计算公式为 Dn -1 = Dn -2 - Dn -1 ④对 Dn -2,……,Di,Di -1,……,D2,进行 这种运算,计算公式是 Di = Di - 1 - Di ⑤对 D1 的数据进行运算,计算公式为 D1 = D0 - D1 对 Do的数据不做运算,这样可以保证经 过这种运算后的数据是可以恢复的。 ⑥回到步骤①,直到处理完全年的数据; (5)将处理后的数据写入文件; (6)调用 WinRAR 工具进行压缩,处理 结束。 在 C# 环境下的主要代码如下:[2] / /对各时次相邻要素数据进行减运算 / /注意其中 k 值的初值为 1,就是要保留 D0 数据的值 for (i = 0;i < 144;i + +) { for (j = 0;j < 73;j + +) { for (k = 1;k < 4* N;k + +) { Data_A_Day[i,j,k]= (short) (Data_A_Day[i,j,k - 1]– Data_A_Day[i,j,k]) ; } } } 调用 WinRAR 压缩工具的主要代码 如下:[3] the _ Reg = Registry. ClassesRoot. Open- SubKey (@ " ApplicationsWinRAR. exeShel- lOpenCommand") ; the_Obj = the_Reg. GetValue(" ") ; the_rar = the_Obj. ToString( ) ; the_Reg. Close( ) ; the_rar = the_rar. Substring(1,the_rar. Length - 7) ;/ /WinRAR压缩程序 Directory. CreateDirectory(Server. MapPath (unRarPatch) ) ; the_Info = " e " + rarName + " " + Server. MapPath(unRarPatch) + " - y"; / /WinRAR 压缩参数 the_StartInfo = new ProcessStartInfo( ) ; the_StartInfo. FileName = the_rar; the_StartInfo. Arguments = the_Info; the_StartInfo. WindowStyle = ProcessWin- dowStyle. Hidden; / /运行压缩程序的窗口风格为隐藏 the_StartInfo. WorkingDirectory = Server. MapPath(rarPatch) ; / /获取压缩包路径 the_Process = new Process( ) ; the_Process. StartInfo = the_StartInfo; the_Process. Start( ) ;/ /启动压缩程序 处理图如下: 图 1 压缩处理流程图 对压缩后的数据进行解压缩的算法是: (1)调用 WinRAR工具进行解压缩,文件 头信息和时次信息据保持不变; (2)对要素数据进行处理: 32 第 4 期 顾洪:NetCDF格式数据无损压缩研究 第 6 卷 ①读入 N天的数据,每天有 4 个时次,共 N* 4 个时次的数据,分别记为 D0,D1,D2, ……,Di,Di +1,Di +2,……,Dn -2,Dn -1,Dn; ②D0 数据不变,按从前往后的顺序,对 D1 的数据进行运算,计算公式为: D1 = D0 - D1 即用上一时次的数据与本时次的数据的 相减,记为本时次的数据,下同。 ③对 Dn -2,……,Di,Di -1,……,D2,进行 这种运算,计算公式是: Di = Di - 1 - Di ④对 Dn -1的数据进行运算,计算公式为: Dn -1 = Dn -2 - Dn -1 ⑤对 Dn 的数据进行运算,计算公式为: Dn = Dn -1 - Dn ⑥回到步骤①,直到处理完全年的数据; (5)调整时次信息,按原格式存放时间信 息和要素数据,将处理后的数据写入文件; (6)处理结束。 解压缩的处理流程图如下: 图 2 解压缩处理流程图 四、结果比较 应用上面的算法,分别对 air. sig995. 1948. nc(闰年)和 air. sig995. 1949. nc(平年) 的数据进行了处理,结果如下表。 项目 闰年数据 平年数据 原文件名 air. sig995. 1948. nc air. sig995. 1949. nc 原文件大小 30,793,156 30,709,028 直接压缩文件大小 15,298,528 15,254,658 直接压缩比 2. 013 2. 013 处理后压缩 文件大小 12,920,806 12,951,133 处理后压缩比 2. 383 2. 371 压缩比提高 18. 4% 17. 8% 注:WinRAR 的版本是 WinRAR3. 71,开发环境是 Visual Studio 2005。 从表中可看出,应用本文提出的压缩算 法,可以比较有效地对原气象要素数据进行无 损压缩,节省存储空间。 五、下一步 表中所列结果是在上面的算法中 N 取值 为 1 的情况下取得的,也就是说,压缩程序考 虑了一天中 4 个时次气象要素数据间的相关 性,而没有考虑多天若干时次间气象要素的数 据相关性。下一步的计划有: 1. 对 N 的取值逐步增大,分别对比压缩 效果,找出压缩效果最好时的 N值。 2. 相邻间数据相减后,存储数据的高位 出现了比较多的 00 值或 FF值,也可以改变相 减后的数据存放,使 00 值或 FF 值再集中存 放,从而进一步提高压缩比。 3. 相邻间数据相减后,存储数据的低位 变化比较多,针对低位数据可以考虑二次相减 运算,尽可能地去除数据间的相关性。 参考文献: [1]netcdf格式的简单介绍[EB /OL].[2008 - 07 - 02]http:/ / jiangtou. blog. sohu. com /93481948. ht- ml, [2]耿肇英,等. C#应用程序设计教程[M].北京:人 民邮电出版社,2007. 42 第 4 期 三江学院学报 第 6 卷 [3]利用 C#调用 WINRAR 实现压缩与解压[EB / OL].(2007 - 11 - 06)http:/ /www. cnblogs. com / netwom /archive /2007 /11 /06 /951301. html, Research on Lossless Compression on NetCDF Format Data GU Hong (School of Computer Science and Engineering,Sanjiang University,Nanjing 210012,China) Abstract:Data of NetCDF format are element data of meteorology and these data occupy large storage due to the wide time span,diversity of element,density of times and so on,which necessitates a lostless data compression. On the basis of relativity between adjacent times data,this paper proposed a lostless data compression algorithm, which firstly applied minus computation on adjacent time span data on account of regulation,so that the value 00 or FF can occur in storage as much as possible,and secondly applied WinRAR tool to compress data lostlessly. The experiment result illustrated that this method can improve lostless compression ratio effectively. Key words:Data Compression;Lostless;WinRAR;Data Computation;Compression Ratio 52 第 4 期 顾洪:NetCDF格式数据无损压缩研究 第 6 卷
/
本文档为【NetCDF格式数据无损压缩】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索