基于极坐标系的二进制信号量化压缩方法.doc

上传人:laozhun 文档编号:2886858 上传时间:2023-03-01 格式:DOC 页数:40 大小:255KB
返回 下载 相关 举报
基于极坐标系的二进制信号量化压缩方法.doc_第1页
第1页 / 共40页
基于极坐标系的二进制信号量化压缩方法.doc_第2页
第2页 / 共40页
基于极坐标系的二进制信号量化压缩方法.doc_第3页
第3页 / 共40页
基于极坐标系的二进制信号量化压缩方法.doc_第4页
第4页 / 共40页
基于极坐标系的二进制信号量化压缩方法.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《基于极坐标系的二进制信号量化压缩方法.doc》由会员分享,可在线阅读,更多相关《基于极坐标系的二进制信号量化压缩方法.doc(40页珍藏版)》请在三一办公上搜索。

1、基于极坐标系的二进制信号量化压缩方法 目 录压缩解压缩算法11摘要32引言33算法原理、理论分析与计算3a.系统模型3b.算法内容5c.作品特色及难点分析64算法系统实现方案设计6a.基于VC6.0的算法程序设计6b.程序主要函数说明75结果分析76结论87参考文献81 摘要数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率的一种技术方法。或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间。虽然当今有很多处理数据专用的压缩方法,如哈弗曼编码、小波变换压缩方法、快速傅里叶变换的分块自适应量化(FFT-BAQ)。但是在具体应用时,要具体考虑原始数据的

2、特点,采用合适的算法。本设计的思想就是:用较少的数据位来表示相同的数据。通过观察时域I/Q数据的直角坐标分布,分析数据分布的特点,采用极坐标数据量化压缩方法。关键词:极坐标量化,时域压缩,增量压缩2 引言本设计采用极坐标对QPSK和64AQM的时域信号进行量化编码,在一定程度上实现了数据的压缩。本设计相对于传统编码方法,有很多优势,如哈弗曼编码适合符号频率出现较多的情况,并且需要对符号进行统计,建立哈弗曼表,并且重新编码,由于QPSK和64AQM的编码数据的随意性大,符号频率不易统计,因此不适合采用;又如采用FFT-BAQ算法,虽然压缩率较高,但算法复杂度相对较高,而且硬件实现难度大。本设计的

3、极坐标系量化则压缩率在61%左右,虽然压缩率偏低,但是算法简单,硬件实现简单,具有很大的优势。3 算法原理、理论分析与计算a. 系统模型阐述系统基本结构,定义各个阶段数据的数学符号表示,为后续分析计算提供必要的在直角坐标系下,一个点的坐标需要用到两个坐标值。所给的数据样本,在时域以I方向为横坐标,以Q方向为纵坐标,可以画出样本点在时域的分布图。如图1。图 1 采样数的时域分布图由图1可以看到数据块主要分为四个组成,从图中可以看出数据主要分布区为四个,I方向数据范围为(012000)和(-32770-21770),而Q方向数据位(012000)和(-32780-21780)。I和Q方向的数据都是

4、从(-327700),量化这些数据需要用16为二进制数据(加上符号位),从图1可以明显看出,在(-267707000)之间存在很大的量化空白,因此可以设法用较少的二进制数据来对样本点进行表示。由于每个区域的数据呈现扇形状分布,如图2,可以考虑将四个数据块加以标记后叠放在一起,然后采用这里我们采用极坐标表示扇形数据块。图2 每个部分的样本点分布如图3的A点,用笛卡尔坐标为(It,Qt),而用极坐标则表示为()0()IQA图2 样本点的坐标表示其中为A到(0,0)点的距离,为相对于极径的张角。并且可以用1314bit的二进制数据表示,范围为(016384),可以用7bit数据表示范围(0127),

5、并且4个部分的样本点,可以用2bit来加以区分。因此总的bit位的总数为22bit相对于原来的32bit表示减少了10bit,实现了数据压缩,且理论上压缩率为。b. 算法内容算法的功能为实现样本点的笛卡尔坐标到极坐标表示。首先对图1的四个数据块位置进行编号,右上为P0,左上为P1,左下为P2,左下为P3。若样本点在P0中,即样本点的I在016384,Q在016384。则直接处理样本点数据。变换式如下(1) (2)若样本点在P1中,则对I方向数据进行处理I=I+32770,将数据变换到P0区域。再对数据按照(1)(2)式进行变换。若样本点在P2中,则对I、Q方向数据进行处理I=I+32770,Q

6、=Q+32780,将数据变换到P0区域。再对数据按照(1)(2)式进行变换。若样本点在P3中,则对Q方向数据进行处理Q=Q+32780,将数据变换到P0区域。再对数据按照(1)(2)式进行变换。变换过程中,P0-P3的样本点分别用2bit进行标注。标识表如表1。表1 区域标注对应表区域二进制bitP000P101P210P311最终将变换后的数据组成数据帧,帧结构如图3。2bit7bit13/14bit极径数据位角度数据位位置数据位图3 数据帧格式解压缩数据时,分别提取数据帧的位置、角度、极径等信息。按照下式完成极坐标系到笛卡尔坐标系数值的转化。(3)(4)这种量化压缩方法的误差主要是由于角度

7、的四舍五入造成的。角度量化可以采用7bit来表示0-90的数据,当极径较大时,有角度带来的EVM也会变大,若角度可以采用10bit二进制数表示,表示范围变成0.0-90.0,使量化精度提高,EVM减小,但由于增加的量化bit,使总的压缩率降低。c. 作品特色及难点分析本设计的设计特色在于采用简单的数据坐标变换法实现压缩,相比于其他的复杂压缩方法,具有简单、快速,且有一定压缩比的优点。4 算法系统实现方案设计a. 基于VC6.0的算法程序设计本设计的算法采用C语言在VC6.0环境下实现,程序分为压缩和解压缩两部分。算法流程图如图4 。P3原始数据16进制数据转2进制数据位置位00极坐标转化压缩数

8、据数据块位置?位置位01位置位10位置位1116进制编码P0P1P2P3解压缩数据16进制编码极坐标转直角坐标位置位01位置位10位置位11位置位00P0P1P2数据块位置?16进制数据转2进制数据压缩数据图4 压缩和解压缩算法程序流程图b. 程序主要函数说明1. 压缩程序函数包括Encode_1c()、xy_to_p()、fwrite_rls()。其中Encode_1c()实现十六进制到二进制数据的转换。xy_to_p()实现数据坐标的变化,fwrite_rls()实现处理过数据的编码以及生成压缩数据文件。2. 解压缩程序函数包括Decode()、Decode_2c() 。其中Decode(

9、)实现十六进制到二进制数据的转换。Decode_2c()实现数据解压缩处理,包括数据帧信息(极径、角度、位置)的提取,坐标的变化(从极坐标到笛卡尔坐标),最后生成解压缩数据文件。 完整代码见附录一和附录二。5 结果分析这种量化压缩方法的误差来源(在VC6.0环境下)主要是由于角度的四舍五入造成的。例如,输入数据位FD8C/2066,对应的十进制数为I=-32140、Q=8294,角度为=85.6562(10bit的量化),极径=8317.89,而在压缩数据的时候,将数据保存为=85.7,极径=8318。这样解压缩以后,对应的I=-32147/Q=8294,十六进制表示为FD93/2066,即I

10、方向上数据造成7个单位的量化误差,误差相对较小。同理,采用7bit的量化时,解压缩后数据为I=-32190/Q=8297,即I方向上数据造成50个单位的量化误差,Q方向上3个量化误差,误差相对较大,造成较大的EVM值。表1为分别取7bit和取10bit的EVM值。表2 7bit和10bit角度的EVM恶化值(平均值)2TX8TX7bit0.50650.505010bit0.06880.0620在取7bit量化时,压缩后的数据大小为4.32M,压缩比为61.5%;取10bit量化时,压缩后的数据大小为4.69M,压缩比为66.8%。程序在VC下实现,程序还有待优化,如极径可以采用增量压缩,对每一

11、次的极径差值进行编码压缩,可以进一步提高压缩率,但压缩复杂度要增加一些。6 结论经过实际验证,数据压缩率和理论值近似,当采用7bit角度值时,压缩率为61%,恶化率为0.5%,采用10bit角度值时,压缩率67%,EVM为0.05%。经过压缩后的数据可以为减少数据的传输总量,从而达到减少传输带宽,提高传输率的目的。7 参考文献1 郑伟强,赵志钦,黄顺吉;合成孔径雷达极坐标数据编码器J;电子科技大学学报;1997年01期2 宋鸿梅,王岩飞,潘志刚;基于FFT-BAQ的SAR原始数据压缩新算法J;系统工程与电子技2009年11期附一、程序使用说明:软件环境:VC6.0功能:此程序实现7bit角度为

12、的压缩和解压缩压缩程序为:copress7.c解压缩为:decompress7.c程序使用时,要配置程序的文件路径Copress7.c 需要配置Encode_1c()中的注释部分和fwrite_rls()的注释部分。Decompress7.c 需要配置Decode()中的注释部分和Decode_2c()的注释部分。1.copress7.c#include #include math.h#define SIZE 50 #define SIZE_2 50 char bin4;#define MaxNumber 20#define step 16int s2n(int n);long int xy_

13、to_p(float x,float y);char int_to_char(int temp);void fwrite_rls();/*函数名:字符形 1和0 转换成整形 1和0*/int abc(char t)int temp;switch(t)case 1:temp=1;break;case 0:temp=0;break;default:;break;return temp;/*函数名:十六进制转二进制*/hex2dec(char hex) char *sp=bin;switch(hex)case 0: sp=0000;break;case 1: sp=0001;break;case 2

14、: sp=0010;break;case 3: sp=0011;break;case 4: sp=0100;break;case 5: sp=0101;break;case 6: sp=0110;break;case 7: sp=0111;break;case 8: sp=1000;break;case 9: sp=1001;break;case A: sp=1010;break;case B: sp=1011;break;case C: sp=1100;break;case D: sp=1101;break;case E: sp=1110;break;case F: sp=1111;brea

15、k;default:;break; return sp;/*函数名:二进制数据压缩算法-第一层*/void Encode_1c() char *tt; int i=0,j,k=0; FILE *fp1; FILE *fp2; char textSIZE; /注:此处需要配置文件路径 fp1 = fopen(d:VC+projyasuo_7sbb_signal_2Tx_1frame.txt,r);/正确配置待压缩文件的路径 fp2 = fopen(d:VC+projyasuo_7stemp.txt,w);/正确配置临时文件的保存路径 while(fgets(text,1024,fp1)!=NUL

16、L) i+; for(j=0;j4;j+) tt= hex2dec(textj);if(k=8)/4-16,8-32k=0;fputs(n,fp2); k+;fputs(tt,fp2); fclose(fp1); fclose(fp2);printf(%dn,i);void main() Encode_1c(); fwrite_rls(); /*函数名:计算2的N次方*/int s2n(int n)int temp=1,j;if(n=0)return 1;elsefor(j=0;j=0&x=0&y=15000)if(x=5)s=s/10+1;elses=s/10;rr=(int)r;ss=(i

17、nt)s;rls=rr*s2n(9)+ss*s2n(2)+0; if(x-32770&x=0&y=5)s=s/10+1;elses=s/10;rr=(int)r;ss=(int)s;rls=rr*s2n(9)+ss*s2n(2)+1; if(x-32770&x=-32780&y=5)s=s/10+1;elses=s/10;rr=(int)r;ss=(int)s;rls=rr*s2n(9)+ss*s2n(2)+2; if(x=0&x=-32780&y=-21780)if(x=5)s=s/10+1;elses=s/10;rr=(int)r;ss=(int)s;rls=rr*s2n(9)+ss*s2

18、n(2)+3; return rls;char int_to_char(int temp)char tp;switch(temp)case 0: tp=0;break;case 1: tp=1;break;case 2: tp=2;break;case 3: tp=3;break;case 4: tp=4;break;case 5: tp=5;break;case 6: tp=6;break;case 7: tp=7;break;case 8: tp=8;break;case 9: tp=9;break;case 10: tp=A;break;case 11: tp=B;break;case

19、12: tp=C;break;case 13: tp=D;break;case 14: tp=E;break;case 15: tp=F;break;default:;break;return tp;/*函数名:将极坐标转化后的数据写入TXT文件*/void fwrite_rls() int j,ii,k=0; int xx,yy,lag=0,sma=0; FILE *fp1; FILE *fp2; char text50; / int arrMaxNumber,ssrMaxNumber; int low,high;int w;long int decimalist,i=0; int quot

20、ient,residual; / /注:此处需要配置文件路径 fp1 = fopen(d:VC+projyasuo_7stemp.txt,r);/临时文件路径 fp2 = fopen(d:VC+projyasuo_7sbb_signal_2Tx_1frame_compressd_rs.txt,w);/压缩文件的保存路径 while(fgets(text,1024,fp1)!=NULL) i+;text32=NULL;/0-16数据if(text0=1)xx=0;for(j=15;j0;j-)xx+=abc(textj)*s2n(15-j);xx=0-xx;elsexx=0;for(j=15;j

21、0;j-)xx+=abc(textj)*s2n(15-j); /16-32数据if(text16=1)yy=0;for(j=31;j16;j-)yy+=abc(textj)*s2n(31-j);yy=0-yy;elseyy=0;for(j=31;j16;j-)yy+=abc(textj)*s2n(31-j); decimalist=xy_to_p(xx,yy); if(decimalist=0) decimalist=4096; / low=high=0;/用做堆栈使用quotient=decimalist;while(decimalist!=0)quotient=decimalist/ste

22、p;residual=decimalist%step;arrhigh=residual;high+;decimalist=quotient; high-;w=high;for(j=w;j=0;j-)ssrw-j=arrj; for(j=0;j=w;j+) fprintf(fp2,%c,int_to_char(ssrj); / fputs(n,fp2); fclose(fp1);/关闭文件 fclose(fp2);/关闭文件 remove(temp.txt); printf(Compress Ok! NO=%dn,i);2.decompress7.c#include #include math.

23、h#define SIZE 50 #define SIZE_2 50 char bin4;/*函数名:计算2的N次方*/int s2n(int n)int temp=1,j;if(n=0)return 1;elsefor(j=0;jn;j+) temp=temp*2;return temp;/*函数名:字符形 1和0 转换成整形 1和0*/int abc(char t)int temp;switch(t)case 1:temp=1;break;case 0:temp=0;break;default:;break;return temp;/*函数名:十六进制转二进制*/hex2dec(char

24、hex) char *sp=bin;switch(hex)case 0: sp=0000;break;case 1: sp=0001;break;case 2: sp=0010;break;case 3: sp=0011;break;case 4: sp=0100;break;case 5: sp=0101;break;case 6: sp=0110;break;case 7: sp=0111;break;case 8: sp=1000;break;case 9: sp=1001;break;case A: sp=1010;break;case B: sp=1011;break;case C:

25、 sp=1100;break;case D: sp=1101;break;case E: sp=1110;break;case F: sp=1111;break;default:;break; return sp;/*函数名:10进制转16进制*/dec2hex(char hex) char tp;switch(hex)case 0: tp=0;break;case 1: tp=1;break;case 2: tp=2;break;case 3: tp=3;break;case 4: tp=4;break;case 5: tp=5;break;case 6: tp=6;break;case 7

26、: tp=7;break;case 8: tp=8;break;case 9: tp=9;break;case 10: tp=A;break;case 11: tp=B;break;case 12: tp=C;break;case 13: tp=D;break;case 14: tp=E;break;case 15: tp=F;break;default:tp=F;break; return tp;/*函数名:二进制数据 解压算法-第二层*/void Decode_2c() float ss,pit=3.141592653,xx,yy;long int rls=0,rr; int i=0,j,

27、k=0,oo,xxt,yyt; FILE *fp1; FILE *fp2; char textSIZE; char trans4; /注:此处需要配置文件路径 fp1 = fopen(d:VC+projyasuo_7stemp.txt,r);/解压缩的临时文件存放路劲 fp2 = fopen(d:VC+projyasuo_7sbb_signal_8Tx_1frame_decompressd_rs.txt,w);/解压缩后文件的存放路径 while(fgets(text,1024,fp1)!=NULL) rls=0; i+; for(j=0;textj!=n;j+) k+; for(j=0;jk

28、;j+) if(abc(textj)=1) rls=rls+s2n(k-j-1); k=0;/oo=rls%4;rls=rls/4;ss=rls%128;rls=rls/128;rr=rls;/极坐标到笛卡尔坐标转换 if(oo=0) xx=rr*cos(ss*pit/180);yy=rr*sin(ss*pit/180); if(oo=1) xx=rr*cos(ss*pit/180);yy=rr*sin(ss*pit/180);xx=xx-32770;if(xx-32767)xx=-32767; if(oo=2) xx=rr*cos(ss*pit/180);yy=rr*sin(ss*pit/1

29、80);xx=xx-32770;yy=yy-32780;if(xx-32767)xx=-32767;if(yy-32767)yy=-32767; if(oo=3) xx=rr*cos(ss*pit/180);yy=rr*sin(ss*pit/180);yy=yy-32780; if(yy=0) xxt=(int)xx;trans0=dec2hex(xxt/4096); xxt=xxt%4096; trans1=dec2hex(xxt/256); xxt=xxt%256; trans2=dec2hex(xxt/16);xxt=xxt%16; trans3=dec2hex(xxt%16); els

30、exx=0-xx; xxt=(int)xx;trans0=dec2hex(xxt/4096+8); xxt=xxt%4096; trans1=dec2hex(xxt/256);xxt=xxt%256; trans2=dec2hex(xxt/16);xxt=xxt%16; trans3=dec2hex(xxt%16); for(j=0;j=0) yyt=(int)yy;trans0=dec2hex(yyt/4096); yyt=yyt%4096; trans1=dec2hex(yyt/256);yyt=yyt%256; trans2=dec2hex(yyt/16);yyt=yyt%16; tra

31、ns3=dec2hex(yyt%16); elseyy=0-yy; yyt=(int)yy;trans0=dec2hex(yyt/4096+8); yyt=yyt%4096; trans1=dec2hex(yyt/256);yyt=yyt%256; trans2=dec2hex(yyt/16);yyt=yyt%16; trans3=dec2hex(yyt%16); for(j=0;j4;j+) fprintf(fp2,%c,transj);/rls=0;fputs(n,fp2); fclose(fp1); fclose(fp2); remove(temp.txt); printf(%dn,i)

32、; /*函数名:二进制数据 解压算法*/void Decode() char *tt; int i=0,j,k=0; FILE *fp1; FILE *fp2; char textSIZE; /注:此处需要配置文件路径 fp1 = fopen(d:VC+projyasuo_7sbb_signal_2Tx_1frame_compressd_rs.txt,r);/待解压缩的文件路径 fp2 = fopen(d:VC+projyasuo_7stemp.txt,w);/临时文件存放路径 while(fgets(text,1024,fp1)!=NULL) i+; for(j=0;textj!=n;j+) tt=hex2dec(textj); fputs(tt,fp2);fputs(n,fp2); fclose(fp1); fclose(fp2); printf(i=%dn,i);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号