Categories
生活

I Do Believe

疲惫了一天地忙碌,到家倒头就睡。。。醒过来已经4点了。。。

2006,暑期结束了。

  • 关于Training

由于fish要去做央邦ccna的讲师,沾光,蹭了2节课玩。算是给自己的ccna打前哨探探情的,央邦没有想像中的大,不过还算是不错,主要设备挺齐全的,可以随意实验。可惜fish只是做了640-801课程osi和standard什么的介绍,后面的课是一个感觉不怎么样的gay上,这样就顺理成章的结束了短暂的ccna刺探之旅。有幸把fish的copy回来了,哈哈,几张cisco ccna的自学教程,很不错的样子,据fish说ccna绝对可以自学考。嗯,向这方面努力ing。小插曲,第一次从漕宝路下站,迷茫的在车站里飘游,虽说光大是漕宝很大的出口,居然让我飘到展览区去了。。。狂汗|||。。。貌似每次从不认识的地铁站下站都会有这样的情形,就连认识的也会。。。

  • 关于展会

除去了刚开始MoCA的Italy Made In Art, Now,这个暑期的展览确实可以用琳琅满目来形容。可惜这个××热的鬼天气,加上project的进度,也就没什么时间的说。说说最近赶的上海oracle高峰会,一般这种会也是找不到什么人陪我去了,哎~~~一样单刀赴会。这次会的主题差不多是grid computing和soa,可惜了,主要接触oracle的产品只是那个database,纯粹当是充电吧,努力努力学习。5小时左右的演讲还是让我这个外行收获颇丰,很很充实的样子,极其满足。期间很是钦佩那个貌似兼职的翻译,虽说有点上了年纪,不过对oracle的产品什么的确实真的弄得很清楚,看来功课做的很充足,不过说是翻译的水平就不怎么样了。说到这里,看到大家都在什么高口、G、ielts的,我的en也要努力了。。。

顺便tip一下9月展会计划,17日-20日的cebit asia和23日-24日的sun科技日。

  • 关于实习

说是实习,倒不如说只是一个项目的ui简单包装和database。第一天到宝信报到,然后就是作team,分到了2个复旦软院大三的家伙,很是不削他们的傲气(没有以偏概全的意思哦|||),总喜欢拿数构什么的纯理论的东西来怎么怎么的标榜自己。领project的时候也就随便他们怎么着了,反正我兵来将挡就是了,拿到的是一个设计院的员工资料登记的project。分析这个project的时候,我的感觉他们完全就是在推委,什么“数据库最简单给你了”啦,“ui没什么挑战性”的话,就当他们××了。我的分析,像这类员工登记什么的,主要可以做的工作纯粹就是在database上,优秀的检索就是在挑战有限硬件资源的最大化利用。我就不知道他们在逻辑层上除了加密外还有什么好做的,这些全是现成的。。。倒是在家soho不错,每周五去趟完成接口的连接,返回的确定。到最后我完成我份内的,他们居然能还讨论加密算法的细节。。。无奈,真不知道真的需要那么严谨的security吗。。。郁闷。等旅游回来,整体整合还是我做的。。。真不知道他们在做些什么。。。

现在就等去焦那里拿张实习的表格了,自己懒得写东西。应该25号可以拿到吧,好像说是帮我弄好的了,哈哈

  • 关于TC

现在对于algorithm的热情也没有以前那么狂热了,topcoder上面的match也是很长段时间没有去观望过。2006 tccc是没有兴趣去玩了。一次又是兴起,一清早起床做了srm 315的registration,然后又躺下了,忘了个精光,到想起来要open题的时候已经是半夜三更了。。。而后开题point 250的是骰子的题目,算点的,很是easy;point500的题更是比250还简单,居然就是算个数和,如果过2位再算和。。。point900题有点约瑟夫环的意思,可惜数构的方法怎么都想不起来,google了下,snap it,不过感觉做的有点慢了,分应该不是很高。最后rate是2500+,还是挺满意的。不过就是半夜三更的做题人有点累。。。

无意发现多了个marathon match可能这个会挺适合我吧,有时间也想试试software development,哈哈。

  • 关于看书

一直在帮侯弄新模电书的illustration,正好全当是复习模电了,貌似调制里新增加进了数字键控psk等很多通信原理里的东西,这样看来我们好像算是挺幸运的,至少学的东西比以后的要少。恰好和侯讨论用什么做illustration的时候,她说是matlab很不错,然后教了点简单的图形描绘的命令给我,加上以前一直断断续续的自学,matlab制图应该是没什么问题了,因为制图的问题,mathcad也差不多会了。不过最后的结论是用flash做函数图形,visio做电路,ai做简单图形。

应该说是书非借不能读的,这次因为据说延长可以还新校区的书,so。。。猛借了三大本砖头出来。通信系统仿真由于主要是自学matlab用的,既然会的差不多了也就扔一旁了。数字通信翻了翻也没什么看,好像是通信原理里数字部分的延伸,还是有时间要仔细看看的。现代通信系统确实是看得挺认真的,受益菲浅,就是讨厌那些一堆堆的公式计算。。。计划外开始重温2年前看的think in java,不过这次看的是3rd的。加入了些新的和dotnet的思想,很是不错。在新的ubuntu下玩eclipse做ex也很爽^_^

  • 关于旅游

嵊泗的计划由于project而耽搁,没有成行,还好,吃到了可爱的会吃肉的老虎鱼,算是补偿吧,嘻嘻

和abomer去了以俊秀名闻天下的黄山,又是可惜,天公不做美,一下索道就开始下暴雨,2天的行程就成了雾中境。。。迷漫的雾气虽说看不到了黄山远景的险峻,倒是恰好给了我们观赏松石的秀美,雾中境极其有意境,稀饭哈。旅途中也遇到了许多有趣的人,火车同座对面的舞蹈老师,看上去非常之年轻,居然30又3了。。。确老孩子气的,很是kawayi。同行的3位貌似同年龄的姐姐,一个是极会“拉人”的中尉,一个是貌似刚毕业的高中老师,还有个更巧,老强调低调的巴士学院未来的地铁调度。前面2位好像有着说不尽的话,叽叽喳喳叽叽喳喳。后面那位可以在火车上连说上上百次的要低调。。。哈。。。接下来2个精力可谓旺盛的小弟弟和小妹妹,他们的无限能量可以使我这个做哥哥也望尘莫及的。。。哎~~~人不得不服老啊。。。有时间还真想再和他们一起出去玩哈p-)

  • 关于其他

其实本来是不太看电视的,更就不用说什么“我型我show”等选秀。倒是妈妈居然乐此不疲,也就百无聊赖的有意无意瞄上几眼。发现个问题,现在越来越莫名那些电视选秀节目为什么都喜欢来cry,台上cry,台下cry,弄得我妈也来cry,猛拿纸巾擦眼睛的。。。我也不知道用观众眼泪来换取收视率有那么容易吗。。。

好像近期居委都在搞什么换届选举的,推脱间,开始想起自己许多次的投票都习惯性的弃权。。。

发现小电脑市场的混乱,一个代理的垄断,导致的价格虚高。如果买东西的话,建议上海还是奔徐家汇实在。

开始觉得游戏真的没什么吸引力了对我。

据说joi要出新专辑了,哈期待啊,嘻嘻^_^

 

这个暑假出了好多的可惜的事,不过现在的我也开始学着接受不完美的东西了,如果万事都太完美没有任何意外的话这个世界也就太无趣了

我的大三要开始了,看来自己的时间也不多了,继续努力ing…

I do believe tomorrow will be a wonderful day.

Categories

JPEG 压缩编码笔记

 一大清早醒来,百无聊赖间想到下学期好像是要学图像压缩的说,然后就联系到了JPEG编码,既然想到了就翻开了床头的数据通信原理,翻到编码论部分,貌似以前看这本书的时候都整整把这章给跳掉了,很是枯燥的。记得这章在图书馆翻这本书3e的时候大致浏览了遍,留有少许记忆的,不妨重新整理下做个笔记。

一、JPEG算法概要
JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准,因此又称为JPEG标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。
JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。例如,在VCD和DVD-Video电视图像压缩技术中,就使用JPEG的有损压缩算法来取消空间方向上的冗余数据。为了在保证图像质量的前提下进一步提高压缩比,近年来JPEG专家组正在制定 JPEG2000标准,这个标准中将采用小波变换(Wavelet)算法。
JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。JPEG算法框图如图:

压缩编码大致分成三个步骤:
1、使用正向离散余弦变换(Forward Discrete Cosine Transform,FDCT)把空间域表示的图变换成频率域表示的图。
2、使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。
3、使用霍夫曼可变字长编码器对量化系数进行编码。

译码或者叫做解压缩的过程与压缩编码过程正好相反。

JPEG 算法与彩色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同彩色空间的数据,如RGB, YCbCr和CMYK。

二、JPEG算法的主要计算步骤
JPEG压缩编码算法的主要计算步骤如下:
(1)正向离散余弦变换(FDCT)。
(2)量化(Quantization)。
(3)Z字形编码(Zigzag Scan)。
(4)使用差分脉冲编码调制(Differential Pulse Code Modulation,DPCM)对直流系数(DC)进行编码。
(5)使用行程长度编码(Run-Length Encoding,RLE)对交流系数(AC)进行编码。
(6)熵编码(Entropy Eoding)。

1、正向离散余弦变换
下面对正向离散余弦变换(FDCT)变换作几点说明。
(1)对每个单独的彩色图像分量,把整个分量图像分成若干个8×8的图像块,如图所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。
 

(2)DCT变换使用下式计算:

它的逆变换使用下式计算:

上面两式中,
C(u),C(v) = (2)-1/2,当u, v = 0;
C(u),C(v) = 1,其他。
f(i, j)经DCT变换之后,F(0,0)是直流系数,其他为交流系数。

  (3)在计算两维的DCT变换时,可使用下面的计算式把两维的DCT变换变成一维的DCT变换:


2、量化
量化是对经过FDCT变换后的频率系数进行量化。量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。
对于有损压缩算法,JPEG算法使用如下图所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。下面2个表中的数值对CCIR 601标准电视图像已经是最佳的。如果不使用这两种表,你也可以把自己的量化表替换它们。

亮度量化值表和色度量化值表

3、Z字形编排
量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如下图所示。这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。

量化DCT系数序号

 

0

1

5

6

14

15

27

25

2

4

7

13

16

26

29

42

3

8

12

17

25

30

41

43

9

11

18

24

31

40

44

53

10

19

23

32

39

45

52

54

20

22

33

38

46

51

55

60

21

34

37

47

50

56

59

61

35

36

48

49

57

58

62

63

4、直流系数的编码
8×8 图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码。
Delta=DC(0,0)k-DC(0,0)k-1

5、 交流系数的编码
量化AC系数的特点是1×64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。

6、熵编码
使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。
在 JPEG有损压缩算法中,使用霍夫曼编码器来减少熵。使用霍夫曼编码器的理由是可以使用很简单的查表(Lookup Table)方法进行编码。压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。这种可变长度的霍夫曼码表可以事先进行定义。

7、组成位数据流
JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEG bitstream)。

 

MathWork上公开的JPEG编码器代码:下载

Categories

MATLAB,上采样和内插仿真

1)
5    h1(j)=j/M;
6end
7h=[0,h1,1,fliplr(h1),0]
8% End of function file.
  生成的图形:
 

  不错,很能说明问题了,上采样的开销较大,线性内插的就好多了的说,嘻嘻,到这里结束^_^

Categories
开发

Simulink 命令集

仿真命令:
    sim       —
仿真运行一个simulink模块
    sldebug   —
调试一个simulink模块
    simset    —
设置仿真参数
    simget    —
获取仿真参数

线性化和整理命令:
    linmod    —
从连续时间系统中获取线性模型(状态方程)
    linmod2   —
也是获取线性模型,采用高级方法
    dinmod    —
从离散时间系统中获取线性模型
    trim      —
为一个仿真系统寻找稳定的状态参数

构建模型命令:
    open_system   —
打开已有的模型
    close_system  —
关闭打开的模型或模块
    new_system    —
创建一个新的空模型窗口
    load_system   —
加载已有的模型并使模型不可见
    save_system   —
保存一个打开的模型
    add_block     —
添加一个新的模块
    add_line      —
添加一条线(两个模块之间的连线)
    delete_block  —
删除一个模块
    delete_line   —
删除一根线
    find_system   —
查找一个模块
    hilite_system —
使一个模块醒目显示
    replace_block —
用一个新模块代替已有的模块
    set_param     —
为模型或模块设置参数
    get_param     —
获取模块或模型的参数
    add_param     —
为一个模型添加用户自定义的字符串参数
    delete_param  —
从一个模型中删除一个用户自定义的参数
    bdclose       —
关闭一个simulink窗口
    bdroot        —
根层次下的模块名字
    gcb           —
获取当前模块的名字
    gcbh          —
获取当前模块的句柄
    gcs           —
获取当前系统的名字
    getfullname   —
获取一个模块的完全路径名
    slupdate      —
1.x的模块升级为3.x的模块
    addterms      —
为未连接的端口添加terminators模块
    boolean       —
将数值数组转化为布尔值
    slhelp        –simulink
的用户向导或者模块帮助

封装命令:
    hasmask       —
检查已有模块是否封装
    hasmaskdlg    —
检查已有模块是否有封装的对话框
    hasmaskicon   —
检查已有模块是否有封装的图标
    iconedit      —
使用ginput函数来设计模块图标
    maskpopups    —
返回并改变封装模块的弹出菜单项
    movemask      —
重建内置封装模块为封装的子模块

诊断命令:
    sllastdiagnostic  —
上一次诊断信息
    sllasterror       —
上一次错误信息
    sllastwarning     —
上一次警告信息
    sldiagnostics     —
为一个模型获取模块的数目和编译状态

硬拷贝和打印命令:
    frameedit         —
编辑打印画面
    print             —
simulink系统打印成图片,或将图片保存为m文件
    printopt          —
打印机默认设置
    orient            —
设置纸张的方向