又是新年

现在我除了吃妈妈的奶和奶牛的奶之外,又添加了一些新的食品,目前有水果汁和菜汁两种。不过我对这两种东西并不太感冒,最好吃的仍然是妈妈的奶。

虽然爸爸很懒,没有精确计算我哪天满一百天,但是这个月我还是收到了爸爸妈妈送给我的好礼物:一个婴儿背包。有了这个背包,我就能在阳光明媚、气温宜人的日子里到屋外做一下空气浴了。我对外面的世界充满了好奇。蔚蓝的天空、嘈杂的街道、匆忙的人群、商店里琳琅满目的商品等等这些,充分地刺激着我的听觉、视觉神经,以至于即使尿裤子也没有令我察觉而啼哭起来。

今天是大年三十,是我这个本命年的最后一天,天气很好,今天该到哪里去逛逛呢?

新年

初一
阳光明媚,一家人把我抱出去到附近的舞子六神社拜神。妈妈很虔诚地祈祷了一番,许了一个愿望。然后我们步行到大桥旁边的公园晒太阳,这是我第一 次出来这么长时间,阳光暖洋洋地照在脸上,我的皮肤显得更加晶莹透亮,身上也一点也不觉得寒冷,于是我就在爸爸的怀里好好地睡了一觉,醒来之后我还照了不 少照片呢。
回到家里,爸爸妈妈和姑奶奶都觉得带我出去是个累赘,虽然他们三个人轮流抱我,可是还是各个腰酸背疼,我真的就那么重么。再问妈妈她许的什么愿望,她居然说她忘记了,我倒。
 
初三
家里包饺子招待隔壁的叔叔阿姨和三木。这是我出生以来第一次看家里包饺子,我当然很配合,虽然我一口也吃不上。
 
初四
时间过得真快,今天我已经满三个月了。一大早起来我就把身上的衣服裤子都尿湿了,把妈妈忙活了半天。今天恐怕没有什么庆祝活动了,不过昨天还剩一些饺子,也可以凑合凑合吧。对了,爸爸给我录了新年发言,什么时候给大家听听。

修改RockBox字体

RockBox虽然不错,但是中文的字体实在是有些难看,它唯一支持中文的字体是unifont.fnt,这个字体中有的字大有的字小,而且英文和数字也很难看。于是我就开始研究如何自己制作字体。

首先到http://homepage.ntlworld.com/cyborgsystems/CS_Main/RockBox/RockBox.htm(现在好像不能下载了) 下一个windows下的rockbox开发包。然后到http://www.rockbox.org 下载rockbox的源代码,按照开发包的说明进行安装设置。在源代码的tools目录下有个convbdf.exe工具可以把bdf字库转换为rockbox的字库。

下 一步就是如何制作bdf字库了,google一下,找到一个叫做otf2bdf的软件可以把矢量字库转换为bdf字库。于是我用它把windowsXP系 统中的宋体(simsun)字库转换了。但是结果并不令人满意,因为转换的时候有许多参数需要调整,所以我用python写了一个显示bdf字库的程序, 这样就可以预览转换的效果了。

我发现参数 -p 9 的汉字效果很不错,于是就用convbdf转换为rockbox字库,传到H120上看实际效果,结果发现所有的汉字的最低下一行都没有了。于是开始研究 bdf字库的格式,原来只需要把bdf文件中的以BBX开头的行的最后一个数字加一即可,例如:BBX 6 13 0 -2 修改为 BBX 6 13 0 -1。这最后一个数字表示y轴的偏移量。另外转换后的英文和数字实在是很难看,于是我用rockbox自带的6x13.bdf中的字符替换了 simsun.bdf中的。

经过如上操作一个比较完美的中文字库就制作成功了。点击下载

※2006/11/18 修正了标点符号上下错位的问题


Rockbox

RY DSP开发 2006/01/21

网络上闲逛居然发现一个好去处:http://www.rockbox.org 。它是一个开源mp3播放器firmware,功能强大,而且正好支持我的iriver H120,于是我毫不犹豫地把我的H120升级为rockbox的固件了。同时iriver自己的固件也可以在启动的时候选择使用。

以下几个功能我很感兴趣:

  • 支持多种声音文件格式
  • 更多更细的设置
  • 支持插件,目前已经有许多插件,包括游戏、演示动画、应用程序,还能够在我的黑白液晶上显示jpeg图片。
  • 居然还有一个gameboy的模拟器,不愁没有游戏玩了。
  • 开放源代码,我已经在我的windowsXP上编译成功,下一步就是自己写几个plugin玩玩了。程序开发可以完全在电脑上实现,因为它还带了一个模拟器源程序,可以在电脑上模拟硬件的操作。
  • 由于H120是软件解码,因此完全可以对解码后的数据进行声音效果处理,这样我的DSP程序就能排上用场了。
目前,也可能一直不会支持wma播放,但是只要启动iriver的固件就可以播放了。

几个关于声音处理、合成的网站

RY DSP开发 2006/01/19

http://ccrma.stanford.edu/~jos/pasp/pasp.html
这 是一个名为Physical audio signal processing的声音信号处理方面的教材。它详细地介绍了声音信号处理的许多基础知识,以及相关的物理模型。涉及的滤波器有:梳状滤波器、全通滤波 器、FDN(反馈延时网络)、digital waveguide(数字波导)等等。介绍了弹弦乐器、钢琴、弓弦乐器等乐器的物理模型,以及这些乐器的合成技术。

http://ccrma.stanford.edu/software/stk/
Synthesis ToolKit in C++,它是一个开源的语音处理合成的开发包。实现了Physical audio signal processing中提到的许多模型,建议参照其源代码学习PASP。

http://chuck.cs.princeton.edu/
一个使用STK开发的声音处理及合成方面的程序设计语言,它可以实时地处理和合成声音。搞声音的朋友们不应该错过这个有趣的东西。

4GB CompactFlash无法启动

RY DSP开发 2006/01/11

今天遇到一个怪问题,新的电压监控仪对于某块4GB CompactFlash有脾气,如果插入这块卡就无法启动,而同样型号的别的卡就没有问题。

启 动失败之后,我打开CCS调试,发现DSP已经爆走(执行到没有程序的地址)了。通过CCS载入程序执行同样爆走,于是我加入断点,单步执行程序,居然没 有问题。由此我推断某个地方需要延时,经过几番调试,终于发现在初始化CF卡的函数前面加上延时之后,就一切正常了。那么可以断定问题出在此初始化函数之 前的语句与初始化函数之间有些冲突。在初始化CF卡之前,程序对CF卡进行了Enable和Reset。CF卡Reset之后并不能马上存取,需要等待一 定的时间,而等待的时间因卡而异,所以最好等待比较长的时间,例如300ms左右。

设计IIR滤波器

RY DSP开发 2006/01/06

使用Matlab的FDAtool工具可以很方便地IIR设计滤波器。使用File菜单中的export选项可以把滤波器的参数输出到Matlab 的工作空间中。若滤波器为IIR型,则输出的变量名为G和SOS。它把高阶的IIR滤波器转换为一系列二阶IIR滤波器的级联。SOS为二阶IIR滤波器 的参数,G为缩放系数。计算IIR滤波器的输出的时候,先将输入数据乘以G, 然后一一通过SOS中的每个IIR滤波器,就得到最终的结果了。

但 是如果二阶IIR滤波器的程序只支持定点小数运算的话,那么就需要调整一下系数了。因为设计出来的G有时候很小(不知道会不会很大),这样一旦把输入数据 乘以G后,就会使得二阶IIR滤波器的输入过小,造成很大的误差。我们需要把G分配到每个二阶IIR滤波器的系数中,使得每次得到的中间结果都刚好不会溢 出。若以IIRi表示第I个二阶IIR滤波器的话,则我们需要保证IIR1, IIR1 * IIR2, IIR1 * IIR2 * IIR3, … 的频率响应都不超过0dB,*号表示级联。为了使得输出的精度最好,我们还需要让上面这些滤波器的频率响应中的最大值最接近0dB。

我用Python写了个小程序来实现这样的计算,其中最重要的部分就是计算二阶IIR滤波器的频率响应,还好在网上找到了直接计算的公式,省去了不少麻烦。