回家看海月

看着海月一天一天地长大,觉得时间过得实在是太快了。去年5月份把她送回武汉的时候,她连爬都还不会,现在可是满屋子转悠,而且嘴巴里经常嘟嘟囔囔的不知道说些什么。现在她对很多事情都有自己的意见,如果不按照她的想法做的话,她就会不依不饶地闹下去。

在摄像头中看着海月成长,心里面总是痒痒的,我们做父母的错过了她第一次走路,第一次会叫人,多少有趣的记忆都错过了。所以我们决定让孩子她妈这个月就回去看看海月,不要让海月把远在日本的父母给忘记了。这次回国为期一个月,得3月5日才能再回到日本。

一家三口分两处,难啊。今后的这一个月的日子里,我又回到了单身生活。可是我早就习惯了--- 一回家就用微波炉热老婆准备好的饭菜,渴了就说“老婆我要喝水 ”,甚至每天吃药都是老婆发邮件提醒的幸福生活。这次一个人过,得自己勤动手,不能再偷懒了。

这一个月中空闲的时间我准备用来写写程序,唯有编程能让时光流逝的快一些。

这是妈妈给我照的照片,好不好看?


作文発表会の感想文

私は作文発表会に参加するのが初めてですから、しっかり準備しました。一ヶ月  作文を書いておいて、先生に添削してもらいました。そして家で何回も読んでいました。

発表会の日に生徒さんたちと先生たちのほか  たくさんの知っていませんでした 知らない 人も発表会に参加するために来ました。黒板に読み 読む 順番  書いておき あり ました、私は最後ぐらい  読むと分かって、なんでそんなにうしろですか、もし もう少し 早く読み終わったら、ずっと緊張することも いら ないと思いました。私は落ち着いたふりをして、余田先生と前の座席  座りました。永楽先生は先生 一人ずつ  (ごとに)紙を配って、「 これは生徒たちの意見を書く用の 紙です と教えました。青木先生は司会としていろいろな楽しい言葉を言って 言ったので、現場の雰囲気  高まるようになりました しました。まず留学生たちの自己紹介でした、留学生たちはうまく使った言葉が出ってきた時、拍手をもらって、すごく嬉しかった そうでした。「 余田先生は聞きながら、紙  意見を書きました。  見せて見せて と言って、見たら、意見じゃなくて、全部褒めた言葉ばかりでした。 余田先生、全部いい言葉のはだめですよ  と言って 言ったら はい分かった  と余田先生答えてくれました。

しばらく して 私の順番でした が来ました。発表会の前に私は先生にゆっくり読むように言われましたけど ていましたけれど、始めはゆっくり読んだ のですが、だんだんつい速くなってきました しまいました。大体そのままで読んだだけで、作文の意味はあまり考えませんでした。やっぱり緊張していましたから読んで 読み 終わってからほっとしました。やっぱり緊張していましたから。 全部終わってから余田先生は上手に読みましたように 読めだね」  言いました 。まだ 褒めてくれ いただい てありがとうございました。


好久没有更新照片了

好些天爸爸妈妈都没有看到我的照片了,今天给他们传过去几张,把二位乐得合不拢嘴。都说海月长得好快啊,就是头发不怎么长,始终都是这个贝克汉姆的头型。其实我成长是有顺序的,先长脑袋里面,等里面长聪明了再长头发不迟阿。所以,奶奶说我可聪明了,我现在会在电话里面对爷爷说爷爷好,对爸爸说爸爸好了。

看我这个头型是不是贝克汉姆型的?

 


产生Sine Sweep波

在滤波器设计中,经常需要知道滤波器的频率特性。测量滤波器的脉冲响应,能够精确地获取频率特性。但是如果无法进行精确的数字的脉冲响应运算的话,那么用Sine Sweep波(频率逐渐变高的正弦波,也叫做频率扫描)来测量系统的频率特性是再适合不过的了。例如我们可以用Sine Sweep波来测量某个Mp3播放器的的频率特性,以及设置不同的EQ(均衡器)之后的频率特性。我们可以让播放器播放某个特定的Sine Sweep文件,用录音设备记录下它的输出声音,查看录下来的波形就能大概知道系统的频率特性了。

为了符合人类的听觉特性,通常频率响应图的频率轴都采用对数坐标。因此我们要产生的Sweep波的频率变化就需要成指数增长。下面具体谈谈如何推导出这种 Sine Sweep波的函数方程。Sweep波的频率需要根据时间成指数增长,因此它的函数方程为

freq(f) = f0*k^t

其中f0为初始频率,k为增长系数,例如如果我们要产生f0 - f1的t0秒的Sweep波 的话,那么

k = exp(log(f1/f0)/t0)

我们知道频率为F的正弦波的函数为

sweep(t)=sin(2*PI*F*t)

那么把频率的变化 方程带入此式得

sweep(t)=sin(2*PI*f0*k^t*t)

这个公式是否正确,我写了一个程序测试,程序按照f0=20Hz, f1=20kHz, t0=50s 设置,结果发现37秒左右的时候就已经达到了20kHz的频率了。所以这个公式是错误的。

那么错在什么地方呢?我们从频率的基本概念入手,重新考虑这个问题。所谓频率就是相位的变化率,所以频率是相位的导数,相位是频率的积分。当频率函数为常数F也就是freq(t)=F时,那么相位函数为freq(t)的积分与2PI的乘积,phase(t)=2*PI*F*t,这样恒定频率F的正弦波的方程才是sin(2*PI*F*t)。

如果频率函数为

freq(t) = f0*k^t

则计算相位函数需要对f0*k^t积分,得

phase(t) = 2*PI*f0*(k^t-1)/log(k)

所以正确的Sine sweep波的函数为:

sweep(t) = sin(2*PI*f0*(k^t-1)/log(k))

这里给出一个输出Sine Sweep Wave文件的Python程序 。其核心的计算部分为:

01def sinesweep(f0, f1, sweeptime, samplingrate, peak):
02   k = exp(log(float(f1)/f0)/sweeptime)
03   data = array.array("h", "\x00"*sweeptime*samplingrate*2)
04   dt = 1.0/samplingrate
05   t = 0.0
06   p = 2*pi*f0/log(k)
07   for i in xrange(sweeptime*samplingrate):
08       data[i] = int(peak*sin( p*(pow(k,t)-1) ))
09       t += dt
10   return data
 

第四个参数是输出波形的振幅,最大为0x7fff。由于Python本身不太适合这样的重量级计算,因此程序运行需要一些时间,如果安装了psyco库的话,取消

import psyco
psyco.profile()

两行的注释能够加速程序3倍左右。以后我会详细讲解如何利用这个Sine Sweep测量Mp3播放器的频率响应。


用Python分析COFF文件

TI的编译器,连接器等工具产生的目标文件格式为Common Object File Format(简称COFF)。COFF格式是AT&T开发的,在UNIX系统中所采用的目标文件格式。TI的编译器产生的obj文件以及连接之后产生的out文件都是COFF格式的。用CCS载入out文件到DSP的内存的时候,CCS会分析这个out文件,将其中储存的代码段和初始数据等段中的数据复制到DSP的内存中,并且设置程序指针到Entry Point(入口地址)。Hex5x, Hex6x等转换工具通过分析out文件,将其输出为一个boot table,方便各种自举(自启动)程序的编写。例如我们经常把这样的boot table写入flash, 制作成能从flash自举的应用程序。

了解COFF文件的格式,有助于我们了解一些自启动的细节,明白CCS loader和hex转换工具的工作原理,或者编写一些特殊用途的启动程序。例如多启动或者部分更新正在运行的程序等等。

在TI的文档中有COFF文件格式的详细介绍。例如TMS320C55x Assembly Language Tools User’s Guide或者TMS320C6000 Assembly Language Tools User's Guide等。文档很详细,下面只是简单介绍一下COFF文件的基本构造。

 COFF最开始是文件头和附加文件头,附加文件头中保存有Entry Point的地址。其后就是Section Header表,其中有各个section的物理地址、长度以及初始化数据的在文件中的偏移地址等信息。所有的section header结束之后就是数据区了。也就是需要复制到DSP 内存中去的数据。其后还有连接用的relocation信息,如果out文件的话不需要这些信息,relocation之后是符号表,例如C语言的全局变量,函数等符号都在这个表中储存。最后是字符串表,section的名称或者符号名称太长的时候就把这些名称字符串储存到字符串表中。
根据这样的结构,自己动手写一个out->boot table的程序其实也很简单,只需要从out文件中获取entry pointer、需要复制的各个section的地址、长度以及数据即可。

这里给出一个Python程序示范:COFF Reader ,它可以显示出out文件的结构。此程序只是一个示范,并无实用价值,参照它阅读COFF格式的文档也许会更加容易一些。运行此程序需要事先在电脑中安装Python 2.4。解压之后运行coff.py文件即可。左边是程序的界面截图。

 


给博客添加留言板

经过几个月的运作,HYRY Studio的访客也日益多了起来。特别是博客这边讨论DSP等技术的留言越来越多了。在这种情况之下,原先简单的博文评论功能就不太够用了。其实HYRY Studio从建立初期开始就有一个简单的论坛页面,不过访客寥寥无几,不如博文的评论热闹。

所以今天就花了些功夫把留言板的一些基本功能添加到了这个博客之中。输入框仍然使用了 TINYMCE 的编辑器,不过不知道从中国国内访问时是否能很快把下载完这个编辑器,如果你觉得速度太慢了的话,请留言告诉我。博客网页的左侧栏中添加了最新留言栏目,以从新到旧的顺序列出最新的20条留言,它们直接链接到相应的主题页面。页面上方添加了留言板的快捷连接,它链接到主题列表页面。如果需要添加新的讨论,请打开这个页面。

以前一些与博文无关的评论留言我也移到了留言板中,各位朋友如果要继续讨论的话,请在留言板中的相应的主题下留言。如果你在博文的评论中添加了与文章无关的留言的话,我会把它移动到留言板去。


<笑迎春>----红烧鸡腿

 以前炒菜多半是为了填饱肚子,什么营养呀,色彩呀,荤素搭配呀,几乎不太考虑。最近经常看到网友把自己经心做的菜的照片放在网上,并且介绍心得。看上去 真的很不错,很佩服他们能够把生活搞得那么有情趣。前几天放假便也想自己试着做做即好看又好吃的菜。我做的就是这道<笑迎春>,起这个名字是 因为正好是新年,还有老公看了这道菜后笑得合不上嘴。其实做法很简单,先把鸡腿用酒,葱,姜,蒜,酱油拌好稍微腌一下,这个时候可以去煮西兰花,为了搭配 颜色同是煮了些胡萝卜,我经常用胡萝卜来调菜的颜色。蔬菜煮好后,便可以煮鸡腿了,先用油炒几下鸡腿,然后放上适量的酱油和糖还有少量的水煮,要经常翻动 以防烧糊了。做好后就可以装盘了,要一个稍微大一点的盘子,中间堆起鸡腿周围摆上蔬菜就可以上桌了。为了营造气氛可以倒上两杯红酒,因为家里没有红酒只有 用饮料代替了。

新的一年匆匆开始了

日盼夜昐的元旦假期就要结束了,本来想趁着假期好好放松一下,可惜还是被逛街呀,拜访朋友呀和看电影这些事而累。哎!没办法时间太宝贵了。记得有人说过" 每天早上能睁开眼睛是最快乐的事",对于我来说能平安地度过一年也是件非常快乐的事。我也希望大家不吵不闹地好好过日子,家合万事兴嘛。小时候过年的情景 还依昔萦绕在眼前,再过几年怕是想也想不起来了。不能总是回忆过去呀,时间的脚步不等人。记得小时候过年自己会定计划,新的一年要怎么怎么样,有的时候想 要的太多了,到头来什么也没有得到。相反“做事的过程努力,做事的结果随缘。”能够在一个轻松的环境下工作学习,是不是会更好呢。随着年龄的增长渐渐的把 很多事情给看淡了,把人际关系看淡了,把长相穿着看淡了,把个人得失看淡了,把生活条件看淡了,把金钱利益看淡了。更加关心家人和朋友的生活,希望大家都 过得快乐。做为一个人活在这世上,看似普通,但我认为是奇迹。就算是为了自己也要每天开开心心地,就算是有什么难事,我相信早晚也会象所有的事一样,变成 过去。日本人每年要开忘年会和新年会,我理解为把过去一年的失败和成功都忘记,重新开始。2007年就让它成为一个只有过程不期待结果的一年吧。

元旦老板请吃的螃蟹火锅,很过瘾的